新生活様式(for Unix)
再帰とは、「我に返る」事也と、とある文学者が言ってた。分かり易い。
フィッシャーの実験計画法
図書館から借りて来た、統計学の本をちまちまと読んでいる。その一節に、フィッシャーの実験計画法ってのの説明が出てた。
実験した結果はまとめて、論文に仕上げなければ、研究者の存在価値無し。後で整理する時に、後ろ指さされないように、かつ、最大の効果を得るべく、正しい実験計画を立てましょうってやつだ。それを、統計学から見た場合の指標を提示してる。
反復 同じ水準内で、独立した実験を繰り返す 無作為化 実験の順番、場所の配置をランダムにする 局所管理 時間や空間を小分けにして実験する
お前の態度は如何に?
Windows terminal
前回、偶然にもWindows Terminalなんてのを知ってしまったものだから、喜びいさんでOpenBSD起動用のメニューを登録した。そこまではいいんだけど、emacsとの相性が悪くて使い物にならない。で、他人まかせしちゃったけど、それは無いよな。自分で何とかしなさい。
実は、WindowsにWSLを入れているおかげで、それ用の起動用のメニューが動的にWindows terminalに表われるんだ。そこから、sshでログインする分には、何の問題も無くemacsが使える。
何故最初からWSL用のターミナルを使わないで、com.exeにしたのか? com.exeは超旧式なWindows用のshell。そこからWindowsのアプリsshを呼び出すのは、さっぱりしてる。
WSLな端末だと、WSLなアプリが動いて、bashが動いて、その上でsshが動くと言う複雑な構成になるから。それを嫌ったのさ。その配慮が裏目に出た格好。Windowsとdebianでは、端末の扱いが違うって事だな。
でも、いちいちOpenBSDとかのIPアドレスを覚えていないぞ。そんなの簡単に解決出来るよ。
alias ob='ssh xxx.xxx.xxx.xxx' # OpenBSD alias pen='ssh xxx.xxx.xxx.xxx' # debian
こんな具合に、.bashrc にエイリアスを設定しておくのさ。これで、obって叩けば、即パスワードを聞いてくる。この方が、いちいちマウスでメニューをクリックする鬱陶しさが無くて好都合。なお、obとかpenって言う謎な名前は、それぞれのプロンプトから取ってます。相変わらず、こだわりが薄いなあ。
幾らOSを起動しておいても、端末画面が一つに収まって好都合。
タブの操作は、下記の2つを覚えておくだけ。簡単にエエワ。
key bind | Action |
---|---|
Ctl + Shift + T | 新しいタブ(窓)を開く |
Ctl + TAB | タブ間の移動 |
なお、タブ内を分割して操作するペインって機能も有るけど、そんなの覚える必要無し(オイラーの場合ね)。まあ、後発のtmuxだ出たと思えば良い。Windowsは華やかなでなくてはならないとか言って、ゴテゴテ機能満載ですから。
qemuの疑惑
i386
前回qemuにi386用のOpenBSDを入れたんだけど、さんざ待たされた挙句、consoleからログイン出来なかった。もっと正確に言うと、アカウントのrootって文字が入力出来ないんだ。
じゃ、sshでloginしてみろ。それもタイムアウトしちゃって、取り付く島もない状態。
最後の悪あがきとして、インストール時に、consoleをcom0へ渡すかってのをyesにしてみた。 これなら、VGA系と言うかqemuが多少おかしくても、希望が有る。なんせ、OpenBSDに直結のホットラインですから。
cu -l /dev/ttyp3 とか、指示されたラインに接続しても、OpenBSD側から一切の応答無し。陸の孤島状態。これはもう、諦める鹿?
minix 3.2.1
悔しいので、qemuを使った何かって事で、minixを入れてみる事にした。
qemu-img create -f qcow2 disk 2G qemu-system-i386 -m 256 disk -cdrom minix.iso -boot d : couldn't open cd9660 (//cd9660/cd9660.kmod) ;; on VGA window
OpenBSDで試すのは初めてかな。なんかモジュールが足りなくて、インストールもままならない。
今回のqemuは不作なんですかねぇ。
OpenBSD for i386
先の実験計画法を鑑みるに、疑惑はqemuがミスってる。i386版のOpenBSDがおかしいの2点が浮上する。
仮説として、OpenBSDがおかしいって言う命題を立て、それが棄却されるか検証する。若し、棄却(そんな事は無いって事)されたならば、qemuが犯人って事になる。この場合、実験者は間違いを起こさない前提です。
で、最終目標は、i386版のOpenBSDを立ち上げて、ホイホイといろんな事をしたい(qemuでやったような事)。だから、最低限の機能でインストールする。
diskは4Gも有れば十分。カーネルのソースを入れてコンパイル。それから、手に馴染んだemacsとgdbぐらいが有れば良い。
VMWareに入れた。当然OpenBSDなんて言う選択肢は無いので、その他の32Bitを選んであげたよ。
i386$ uname -a OpenBSD i386.localdomain 6.7 GENERIC#165 i386 i386$ df -h Filesystem Size Used Avail Capacity Mounted on /dev/wd0a 3.4G 1.1G 2.1G 35% /
カーネルをコンパイルする予定なんで、それも入れてある。ふと気になってカーネルのコンパイル回数を見たら、大きかったぞ。
使うか(使えるか)どうか分からないけど、パッケージからgdbも入れた。やっとpython3を引き連れてきた。巷では、3.8とかが出てるらしいですね。よう知らんけど。
i386$ python3 Python 3.7.7 (default, May 9 2020, 14:29:22) [Clang 8.0.1 (tags/RELEASE_801/final)] on openbsd6 Type "help", "copyright", "credits" or "license" for more information.
と言う事で、OpenBSDのi386版はおかしいと言うのは、棄却されました。益々、qemuがおかしい説に傾くなあ。
あれ? そう結論付けるのはおかしいぞ。大体、debian機に入れてるqemuでも、おかしかっただろうね。すると、相性問題なんですかね。結局、うやむや路線。
仮想シリアル
VMWare側には、シリアルが無かった。んで、追加したよ。そしたら、実在していないのでどうするコータラ言われた。 取り合えず、起動時に接続をOFFにしておいた。
dmesgすると、
com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
生えてきた。このままでは、使えないので、/etc/ttysを編集してから、kill -HUP 1
tty00 "/usr/libexec/getty std.9600" vt100 on
接続を待っているか確認。
i386$ ps awx | grep tty00 94709 00 I+pU 0:00.07 /usr/libexec/getty std.9600 tty00
後は、こいつをコンソールに対応させる必要が有ったな。
where is how to kernel debugt
QEMUのgdbserver機能でNetBSD kernelをデバッグする
kgdb in openbsd なんと、過去の自分に遭遇しちゃったよ。再挑戦になるのか。
make kernel
上でKGDBを有効にしたカーネルの作り形が出てきてたので、i386なマシンに対してやってみる。 そして、VMWare間を仮想シリアルで接続と言う目論見。
/usr/src/sys/dev/pci/drm/radeon/radeon_combios.c:1458:6: error: stack frame size of 2956 bytes in function 'radeon_get_legacy_connector_info_from_table' [-Werror,-Wframe-larger-than=] bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev) ^ 1 error generated.
radeonなデバイスはOFFにしたはずなんだが。。。しょうがないので、org/Makefile で、2047に制限されたのを増やした。これって、オイラーの所だけ?
/usr/src/sys/dev/isa/wds.c:450:1: error: unused function 'wds_init_scb' [-Werror,-Wunused-function] wds_init_scb(struct wds_softc *sc, struct wds_scb *scb) ^ 1 error generated.
今度は使っていないやつを検出して止まった。五月蝿い -Werrorは消した。小言を言う姑は死ねって言う鬼嫁の態度です。
cc -g -Wall -Wimplicit-function-declaration -Wno-uninitialized -Wno-pointer-sign -Wframe-larger-than=3047 -Wno-address-of-packed-member -Wno-constant-conversion -ffreestanding -fno-pie -mretpoline -O0 -pipe -nostdinc -I/usr/src/sys -I/sys/arch/i386/compile/SEE/obj -I/usr/src/sys/arch -I/usr/src/sys/dev/pci/drm/include -I/usr/src/sys/dev/pci/drm/include/uapi -DDIAGNOSTIC -DKTRACE -DACCOUNTING -DKMEMSTATS -DPTRACE -DCRYPTO -DSYSVMSG -DSYSVSEM -DSYSVSHM -DUVM_SWAP_ENCRYPT -DFFS -DFFS2 -DFFS_SOFTUPDATES -DUFS_DIRHASH -DQUOTA -DEXT2FS -DMFS -DNFSCLIENT -DNFSSERVER -DCD9660 -DUDF -DMSDOSFS -DFIFO -DFUSE -DSOCKET_SPLICE -DTCP_ECN -DTCP_SIGNATURE -DINET6 -DIPSEC -DPPP_BSDCOMP -DPPP_DEFLATE -DPIPEX -DMROUTING -DMPLS -DBOOT_CONFIG -DKGDB -DKGDB_DEVNAME=\"com\" -DKGDBADDR="0x3f8" -DKGDBRATE="0x2580" -DUSER_PCICONF -DAPERTURE -DMTRR -DHIBERNATE -DPCIVERBOSE -DEISAVERBOSE -DUSBVERBOSE -DWSDISPLAY_COMPAT_USL -DWSDISPLAY_COMPAT_RAWKBD -DWSDISPLAY_DEFAULTSCREENS="6" -DX86EMU -DONEWIREVERBOSE -DMAXUSERS=40 -D_KERNEL -MD -MP -c /usr/src/sys/conf/swapgeneric.c ld -T ld.script -X --warn-common -nopie -o bsd ${SYSTEM_HEAD} vers.o ${OBJS} text data bss dec hex 17703627 265728 1093632 19062987 122e0cb mv bsd bsd.gdb ctfstrip -S -o bsd bsd.gdb
折角の機会なので、コンパイル番号を仕組みを見ておく。
i386# cat vers.c : const char ostype[] = "OpenBSD"; const char osrelease[] = "6.7"; const char osversion[] = "SEE#0"; const char version[512] = "OpenBSD 6.7" STATUS " (SEE) #0: Wed May 27 15:02:55 JST 2020\n sakae@i386.localdomain:/sys/arch/i386/compile/SEE\n";
versionなんてファイルも作られていて、1になってた。次にコンパイルした時に、この数字が埋め込まれるのだろうね。
sh /usr/src/sys/conf/newvers.sh
これをやった後、vers.cをコンパイルしてたぞ。
i386# make install mkdir -p -m 700 /usr/share/relink/kernel rm -rf /usr/share/relink/kernel/SEE /usr/share/relink/kernel.tgz mkdir /usr/share/relink/kernel/SEE tar -chf - Makefile makegap.sh ld.script *.o | tar -C /usr/share/relink/kernel/SEE -xf - [[ ! -f /bsd ]] || cmp -s bsd /bsd || ln -f /bsd /obsd install -F -m 700 bsd /bsd && sha256 -h /var/db/kernel.SHA256 /bsd
こうして作ったkernelでgdbが使えるかと思ったが、全く動作せず。おかしいと思って、kernelで呼び出している所を探ってみると、
ob$ find . -type f -name '*.c' | xargs grep KGDB ./arch/hppa/hppa/db_interface.c: :: "i" (HPPA_BREAK_KERNEL), "i" (HPPA_BREAK_KGDB)); ./arch/sgi/hpc/zs.c:/* Polled character I/O functions for console KGDB */ ./dev/ic/z8530tty.c: /* If KGDB took the line, then tp==NULL */
インテル系の石では、影も形も無い。やっぱりqemuの力を借りて、6.6までって事だな。残念至極であります。
slow login
amd64なOpenBSDだが、起動してコンソールにloginが出てからも、裏でごにょごにょやってて、負荷が急増してるため、さっぱりlogin出来ない。
どのぐらいごにょごにょやってるか、WindowsのタスクマネージャーでCPU負荷を見てたら、約6分かかっていた。起動の度にこれをやられては、DISKがすり減るぞ。
そんな訳で、OpenBSDが誇る、世界に一つだけのOSってのの看板を下ろす事にした。 同様のミニ版がlibcとかにも適用されてる。こちらの方は、/etc/rcを読むと、スイッチが用意されたんで、OFFにした。 /etc/rc.conf.local
library_aslr="NO"
カーネルの方が問題。/etc/rcの最後で、バックグラウンドに回っての作業。止めるスイッチは無いので、実行しない様にコメントにしたよ。
# Re-link the kernel, placing the objects in a random order. # Replace current with relinked kernel and inform root about it. #### /usr/libexec/reorder_kernel &
余裕の有る時に、やればOk。