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との共演とな。

Pythonでgdbを操作する

正直、何が嬉しいか、オイラーにはさっぱり別りません。

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 って奴だ。

etc