新生活様式(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 なんと、過去の自分に遭遇しちゃったよ。再挑戦になるのか。

FreeBSD kernel debugging

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。


This year's Index

Home