ArchLinux installの追試
VirtualBox
前回VirtualBoxとVMWAREのスピード比べをやって、VMWAREが圧勝したんだけど、ずっとVMWAREを使うのを少々躊躇してる。その理由は、VMWAREを立ち上げると、裏で指定したメモリー分のファイルが作成されてしまうからだ。
毎回1.5Gのファイルが作られて、消されてってのは心臓によくない。少なくともこのパソコンをWindows 10のEOLになるまで使いたい。それまでSSDには元気でいて欲しいのよ。その為には、不要なWRITEをなるべく避けたいのさ。ブラウザーもキャッシュを作らないようにしてるしね。
後2年はもって欲しいのよ。その頃には半道体の供給も回復してるだろう、10から11への買い換え需要でパソコンの安売が始まるだろうから。これって希望的な観測?
それから、VirtualBoxで使ってたDISKをVMWAREに装着すると、initramfs内にあるモジュールの差異により起動しない。あせらずにフォールバックを選んで、起動する事。忘れてしまって、アタフタしそうだな。永続使用するなら、initramfsを更新すればよい。
vmdk
VirtualBoxを積極的に使って行くとしたら、VMWAREとの連携がスムーズに出来るようにDISKの形式をdviからvmdkに改めておくといいだろう。で、やってみた。そしたらベンチで使ったものが若干速くなったと思う。
前回は、dvi形式で
1m31.56s real 0m39.29s user 0m43.27s system 1m25.76s real 0m36.75s user 0m41.73s system 1m25.26s real 0m35.96s user 0m42.20s system
だったんだけど、vmdk形式では、こうなった。
1m26.37s real 0m33.17s user 0m44.00s system 1m25.04s real 0m36.59s user 0m41.53s system 1m25.48s real 0m34.01s user 0m41.46s system
ファイルがメモリーに乘る、一回目の所要時間が、微妙に短縮されてる。
NAT壁
ゲストOSにホストOS側のファイルを取込たい。 が、両OS共、IPアドレスが同一になってて、しかもNATモードで動いている。 ゲスト側のIPアドレスを確認。
riscv# ifconfig vio0 vio0: flags=808843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,AUTOCONF4> mtu 1500 lladdr 52:54:00:12:34:56 index 1 priority 0 llprio 3 groups: egress media: Ethernet autoselect status: active inet 10.0.2.15 netmask 0xffffff00 broadcast 10.0.2.255
そして、ルーチィングテーブルも確認。いずれもQEMUが提供してるものだ。
riscv$ route show -inet Routing tables Internet: Destination Gateway Flags Refs Use Mtu Prio Iface default 10.0.2.2 UGS 0 0 - 8 vio0 base-address.mcast localhost URS 0 0 32768 8 lo0 10.0.2/24 10.0.2.15 UCn 2 0 - 4 vio0 10.0.2.2 link#1 UHLch 1 1 - 3 vio0 10.0.2.3 52:55:0a:00:02:03 UHLc 0 10 - 3 vio0 10.0.2.15 52:54:00:12:34:56 UHLl 0 10 - 1 vio0 10.0.2.255 10.0.2.15 UHb 0 0 - 1 vio0 127/8 localhost UGRS 0 0 32768 8 lo0 localhost localhost UHhl 1 2 32768 1 lo0
ゲスト側(OpenBSD)の方が慣れているので、IPアドレスがホスト側とかぶらないように変更してみたけど、通信は確立せず。ホスト側(ArchLinux)でのIPアドレスってどうやって変更するの? 基本部分を扱かうコマンドがどんどん変わるLinuxは困った奴だと思うぞ。
そして、 コマンドによるポートフォワード を参考にNATを突破出来無いかも試してみたけど、文字通りNAT壁は高くてどうにもならず。
ならばホスト側(VirtualBox)でNAT止めて、ブリッジモードにしちゃえ。ネットワークの割当てをNATからブリッジにアダプターへ変更。これで、ホスト側は、Windows10と同列のネットワークになった。
こうしておいて、ホスト側からファイル(.tmux.conf)を取って來る。
riscv$ scp HostIP:.tmux.conf . The authenticity of host 'HostIP (HostIP)' can't be established. ED25519 key fingerprint is SHA256:b/bNk4d8FKuNikSY5MmpYzw8mt0T0jyITDQ4EPfFrzU. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'HostIP' (ED25519) to the list of known hosts. sakae@HostIP's password: .tmux.conf 100% 386 12.9KB/s 00:00
無事に出来た。まあ、こういう事はあまりないので、NAT壁モードに戻しておく。
ArchLinux install for VMWARE
前回はArchLinuxをVMWAREにインストールしようとして失敗した。年も改まったので、そのリベンジをする。原因は分っていて、opensslの署名が新しくなり、キーリングにそれが登録されていなかったので、異物と看做されて拒否されていたからだ。一緒にキーリングの新しいのを指定したけど、それが有効にならず、じたばたしてもしょうがないと時間を置く事にしたんだ。
2023-01-01版のメディアが、配布されたんで、それを使ったら、何の問題もなくインストール成功。新しいキーリングに更新されたんで、問題なく受け入れてくれたんだろうね。
前回の方法で、初回にgrubとsudoも一緒にインストールすべきだった。grub-installが無いと言われてびっくりしたのと、sudoで一般ユーザーが変身出来るようにしておくべきだった。それと、ユーザーも事前に作成してvisudoしとくのも必須。だって、インストール後は、rootでリモート・ログイン出来無いからね。
で、あたふたしない方法が有る。ネットは危い。ならばシリアルだーーーだ。
シリアルコンソールを使って Arch Linux をインストール
さすがArchの人は分っていらっしゃる。GUIなインストールを推してくりどこかのデストロとは大違いだな。
VMWAREのコンソールはフォントサイズが小さすぎて、オペレーション出来無い。いきおい使い慣れた端末で作業を強いられるからね。
で、折角、素からインストールしたので、愛着が有る。これをOpenBSDのriscV版を動かすベッドにしよう。OpenBSD関係の類を別DISKに切り分けた。ってか、VirtualBoxの方でその作業を行い(Diskの形式は、vmdk)、それをVMWARE側にコピーしたんだ。
いざ、マウントしようとすると
[sakae@arch ~]$ sudo mount -a mount: (hint) your fstab has been modified, but systemd still uses the old version; use 'systemctl daemon-reload' to reload. [sakae@arch ~]$ sudo systemctl daemon-reload
こんな注意を受けた。何もかもsystemctlに任せてしまうってどうよ。オイラー的には気持悪いな。まて、USBの抜き差しの関係が有って、常に監視する機構になってるのか。便利優先に舵を切ってるリナって事で、許してやれよ。ツンツンしてもしょうがない。
DISK関係は、こうなった。
[sakae@arch ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 24G 0 disk ├─sda1 8:1 0 512M 0 part /boot ├─sda2 8:2 0 1G 0 part [SWAP] └─sda3 8:3 0 22.5G 0 part / sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 20G 0 part /mnt sr0 11:0 1 1024M 0 rom
sdb1にOpenBSD関係が入ってる。sda3には、それを駆動する関係だけを入れた。余計な物を入れるのは極力避けよう。qemu-system-riscv,riscv64-elf-gdbぐらいが主な所だ。
[sakae@arch ~]$ df Filesystem 1K-blocks Used Available Use% Mounted on dev 594172 0 594172 0% /dev run 605432 828 604604 1% /run /dev/sda3 23044528 3530068 18318532 17% / tmpfs 605432 0 605432 0% /dev/shm tmpfs 605432 0 605432 0% /tmp /dev/sdb1 20464208 7763664 11635688 41% /mnt /dev/sda1 523244 105848 417396 21% /boot tmpfs 121084 0 121084 0% /run/user/1000
世界3大お邪魔虫
こんな事を書くと、世間の顰蹙を買うのは分っているけど(今風に言うとSNSでの炎上)、まあ許せ。あくまでも私見だから。
何かの機能を使おうとすると、自前でコンパイルするかパッケージからサクッとインストールするかのどちらかになる。最近は面倒嫌いって事で、もっぱらパッケージ頼りだ。
でも、パッケージだと、依存関係って事で、余計な物がわんさか付いてくる。パッケージャの方は、ポリシーを持って便利な物が同時にインストールされるようにしてるのは頷けるんだけどね。
新しいOSをインストールした時に、必ず入れる奴のお邪魔虫を晒してみる。
emacs
vimは嫌いだ。余計な機能が大杉。viは機能が限定的で好き。でも一番使ってるのがemacs。これが、標準では、自前で窓を作って、グラフィックまで表示出来るようになってる。
おかげで、わんさかとgtk3とかの連中が入り込んで來る。gtkの陳列台みたいなもので、emacsが入った後、firefoxなんかを入れると、あれこれだけってな具合にインストールされるものは少ない。
まあ、自前でGUI無しコンパイルすれば済む事なんだけど、面倒なので、alias emacs='emacs -nw' して、大半の機能を無視して使ってる。
[sakae@arch ~]$ pacman -Ss emacs extra/emacs 28.2-2 [installed] The extensible, customizable, self-documenting real-time display editor extra/emacs-nativecomp 28.2-2 The extensible, customizable, self-documenting real-time display editor with native compilation enabled extra/emacs-nox 28.2-2 The extensible, customizable, self-documenting real-time display editor without X11 support
あれ、今調べたらnox版数も有るじゃん。何で気がつかなかったのだろう? それよりnative版とやらが気になるな。素直に解釈すれば、バイトコンパイルじゃなくて、マシン語にまでlisp言語が変換される。そうsbclみたいにね。
ネイティブコンパイルEmacsの登場 まだお試し期間中だから、手は出さないよ。
それを待っていられないなら、emacsをサーバーとして起動しておき、後はemacs-client で起動して使う方法がある。こうすると一瞬で起動する。但し弊害があって、起動した時は、サーバーとして起動したワーク・ディレクトリィーが、クライアント側にも伝搬しちゃう。オイラーみたいに、あちこちにcdして、そこでemacsする人には、これが鬱陶しいのだ。誰か解決策をご存知ありませんか?
How to open emacsclient with working directory set to $PWD?
これが答?
emacs --daemon emacsclient -t .
gnuplot
これも、何故か必ず入れる奴。グラフの一つも描かれなくちゃって奴。グラフならpythonとかjuliaとかmaximaとかでも描けるけど、それらでは思考停止、指もフリーズになるんで、gnuplotに統一してる。
が、こいつは大概qt族を引き連れてくる。
[sakae@arch ~]$ pacman -Qi gnuplot Name : gnuplot Version : 5.4.5-1 : Depends On : gd wxwidgets-gtk3 lua qt5-svg libcerf libcaca
OpenBSDとかの奴だと、あっさりしててXだけだ。だからマウスでぐりぐりは出来無い相談。普通にグラフが描ければOKよ。余計なものはいらない。
あれ、luaを引き連れているけど、luaで何が出来るの? 折角あるのを使ってあげないって、なんか可哀想だな。
gdb
そして、オイラー的にはpythonは御免こうむりたいんだけど、必須アプリのgdbを入れると、絡なずくっついて來る。
[sakae@fb ~]$ pkg info gdb Name : gdb Version : 12.1_1 : Options : BUNDLED_READLINE: off BUNDLED_ZLIB : off DEBUG : off GDB_LINK : on GUILE : off KGDB : on NLS : on PORT_ICONV : on PORT_READLINE : on PYTHON : on SOURCE_HIGHLIGHT: on SYSTEM_ICONV : off SYSTEM_ZLIB : on TUI : on
[sakae@arch ~]$ pacman -Qi gdb Name : gdb Version : 12.1-2 : Depends On : glibc ncurses libncursesw.so=6-64 gcc-libs expat xz mpfr source-highlight gdb-common=12.1 readline libreadline.so=8-64 guile python libelf
ArchLinuxだとpythonだけじゃなくてguileって言うschemeまでくっついて來る。やれやれであります。
other
今、graphvizが欲くなって入れてみたら、こんな提案が有った。結構色々な言語が入っていて、新に入れる必要は無いな。
Optional dependencies for graphviz mono: sharp bindings guile: guile bindings [installed] lua: lua bindings [installed] ocaml: ocaml bindings perl: perl bindings [installed] python: python bindings [installed] r: r bindings [installed] tcl: tcl bindings [installed] qt5-base: gvedit [installed] gtk2: gtk output plugin [installed] xterm: vimdot [installed]
この間、友達に The PLDB Blog なんて言うのを教えて貰った。星の数程有る言語を紹介したサイトだ。見ていて呆る事がないな。そのうちに変てこりんな言語にでも手を出してみるかな。ありきたりじゃつまらないからね。
REPL駆動言語なんてのがあるそうな。筆頭はCommon Lisp。トップレベルから記述していき走らせる。当然未定義の所で、おっこちる。そしたらそこで未定義な奴を定義してcontinue。これを繰り返して欲しいコードに仕上げるそうな。
まあ、こういのはよくやるな。ちょっと実験と称してirbでコードを試す。良かったらそれを本流に取り込む。まあ、REPL駆動の変形版と言った所か。
python
んな事でguileは兎も角として世間を席巻してるpythonに少し触れてみる。 むかし、むかし、パソコンが出始めの頃、必ずBASICが乗ってて、電源を入れるとBSICが起動してきた。あれには辟易して、クリーン・コンピュータと銘うったMZ-80を買ったのさ。 国民機と称されるやつには、見向きもしなかったねぇ。
Think Python:コンピュータサイエンティストのように考えてみよう
線形代数演習講義へのjulia導入を考える 番外編:pythonが支配的すぎる弊害
そしてgdbとpythonとの共演とな。
正直、何が嬉しいか、オイラーにはさっぱり別りません。
guile
pythonはどうでもよくて、同じGNU族な同列会社の製品もgdbに紛れこませて、世間の注目を熱目ようと言う作戦だな。どんな版を出してきたのかな。
[sakae@arch ~]$ guile GNU Guile 3.0.8 Copyright (C) 1995-2021 Free Software Foundation, Inc. Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'. This program is free software, and you are welcome to redistribute it under certain conditions; type `,show c' for details. Enter `,help' for help. scheme@(guile-user)>
詳しい説明は、こちら。 23.4 Extending GDB using Guile
gdbの核があって、そいつをコントロールする為に標準のI/Fが用意されてる。カーネルとそれのI/Fとなるshellみたいな関係なんだな。
拡張機能を使うと今迄bash相当で(標準になぞらえてね)使っていたgdbを、pythonとかguileのREPLに置き換えましょって事か。酔狂な人は、何でもpythonからやってしまうだろう。
ちょっと例に習って試してみる。
[sakae@arch tmp]$ gdb -q (gdb) guile >(+ 1 2) > ;; 結果が出てこないので、Ctl-Dで抜ける。 (gdb) guile (+ 1 2) ;; 一行にすると、結果が出てくる 3 (gdb) guile ;; ここからはguileのREPLに突入 >(define ans (* 3 4)) >(display ans) (newline) >end ;; endで抜けると、結果が出てくるとな。 12 (gdb)
そして、gdbの根幹を理解する為に、自作した人がいる。車輪の再発明大いに結構。 デバッガを自作してみよう
昔、ルビマのインタビューで、一番好きなメソッドは何ですかってのが流行っていた。それ風に、一番好きなアプリは何ですかって訊かれたら、迷わずにgdbって答えるよ。
そう、過去から未来への計算を途中で中断するってのが本業だからね。中断した所で、呼出の履歴がどうなってるとか、メモリーエリアを調べたりは、副業だな。満足したら、continue。 こんなのがschemeにもあったな。call/cc とか call-with-current-continuation って奴だ。