OpenBSD on FreeBSD
Table of Contents
gpart
以前に、USB DriveにFreeBSDを入れた。その時、FreeBSD側からのgpart確認を 怠っていたので、確認しておく。まずは、FreeBSDが/dev/da0にて見える事を 確認。USBストレージはda0とかになるんだな
sakae@slfb:~ $ df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/da0s1a 147252956 12934028 122538692 10% / devfs 1 0 1 0% /dev tmpfs 524288 104 524184 0% /tmp
sakae@slfb:~ $ gpart show => 63 488397105 ada0 MBR (233G) 63 1 - free - (512B) 64 488397104 4 !166 [active] (233G) => 63 488397105 diskid/DISK-091026PB42041SGY80YB MBR (233G) 63 1 - free - (512B) 64 488397104 4 !166 [active] (233G) => 63 312581745 da0 MBR (149G) 63 1 - free - (512B) 64 312475648 1 freebsd [active] (149G) 312475712 106096 - free - (52M) => 0 312475648 da0s1 BSD (149G) 0 304087040 1 freebsd-ufs (145G) 304087040 8388608 2 freebsd-swap (4.0G)
そして、普通のHDDは、adaとかになるんか。このHDDはマシンに組み込みされ た奴。OpenBSDが入っている。
刺さる
USB Driveに入れたFreeBSDを使っていると、時々、応答しなくなる事がある。 それは突然にやってくる。lsに反応しなくなったり、psに応答しなくなったり、 見境なく発生する。 そうなった場合、コマンドをキャンセル(C-c)するんだけど、その痕跡がター ミナルに ^CC なんて風に残る。で、そのうちにプロンプトに戻るんだ。
どうも、Driveが応答しなくなってる。業界用語で言う、刺さる って症状だ。 これが発生して、回復した時、エラーが発生していないか/var/log/messageを 確認するんだけど、何の痕跡も無し。
Drive回りって事で、実害が無い sync コマンドでも、根気よく試していると、
発生した。どんな事をやってるか、 vfd_syscalls.c
で確認。
/* * Sync each mounted filesystem. */ sys_sync(struct thread *td, struct sync_args *uap) { return (kern_sync(td)); }
マウントされてる奴に対して実行。
kern_sync(struct thread *td) { for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) { if (vfs_busy(mp, MBF_NOWAIT | MBF_MNTLSTLOCK)) { nmp = TAILQ_NEXT(mp, mnt_list); continue; } if ((mp->mnt_flag & MNT_RDONLY) == 0 && vn_start_write(NULL, &mp, V_NOWAIT) == 0) { save = curthread_pflags_set(TDP_SYNCIO); vfs_periodic(mp, MNT_NOWAIT); VFS_SYNC(mp, MNT_NOWAIT); curthread_pflags_restore(save); vn_finished_write(mp); } mtx_lock(&mountlist_mtx); nmp = TAILQ_NEXT(mp, mnt_list); vfs_unbusy(mp); } mtx_unlock(&mountlist_mtx); return (0); }
busyじゃない奴についてsyncする。で、その実体は、
#define VFS_SYNC(MP, WAIT) ({ \ int _rc; \ \ _rc = (*(MP)->mnt_op->vfs_sync)(MP, WAIT); \ _rc; })
vfs_sync
が、本体だと思うのだけど、追跡してくと堂々巡りになっちゃう
んだよな。はて、どうしたものか? geom(8) or disk(4)
VMWare
前回は、bhyveがマシンの機能不足で動作しなかった。ちょっと悔しいので、 知識を身につけておく。
それから、残念なCPUを回避する方法も調べてみる。
Virtualization Technology (VT-X)を有効にするには on Lenovo
VMware Player で VT-x が有効化できない時はデバイス セキュリティを確認
VMware 16 PlayerでVT-xを有効にできていなかった話
Intel VT-x(CPUの仮想化機能)が有効にならずCMLが起動できない時の対応方法
やっぱり、微妙な問題には、Windowsが絡んでくるんだな。WSL2と喧嘩するの かな?
まあ、VMWareと言えどもWindows上のいちアプリでしかない。領主様のWindows の意向には逆らえない訳で。いや、WSL2なんてのに靡いたオイラーが意志薄弱 と認識しておこう。こやつ一度使うと癖になりますから。その主因は、 Windowsのスクリプト環境が貧弱すぎるからだろう。
PowerShellとか有るみたいだけど、根が腐っているからね。たとえば、血圧デー タの入力で、朝晩のセットで入力しなきゃいけない所を朝だけしか入力しなかっ たとする(入力時にこれは、あえてチェックしていない)。後でそれを検出する のは、5秒で作成できたよ。こんなの、PowerShellでは、どうやるか皆目見当 も付かないぞ。
alias ckcsv="tail -150 current.csv | cut -b-6 | uniq -c | grep -v '2 '"
これ、Debian/WSL2上のやつね。24070204 .. 24070221 .. みたいなデータな んで、冒頭の6文字を取り出して、uniq -c すれば、2になってるはず。それを 逸脱してるのを検出すればOK。unixならチョロイものだ。
OpenBSD on FreeBSD
FreeBSDにqemu税を支払って導入。税と言うのはDiskを無駄にするオプション 群の事ね。
sakae@f64:~ $ pkg info qemu qemu-8.2.2_1 Options : CDROM_DMA : on CURL : on DOCS : on GNUTLS : on GTK3 : on JPEG : on NCURSES_DEFAULT: on OPENGL : on PNG : on SASL : on VDE : on X11 : on
X11,GTK3,OPENGLとかテキスト屋には、無用の長物なんだけどね。まあ、しょ うがない。自分用にqemuをコンパイルするなんてのは、考えないでおこう。
で、OpenBSD用のdiskを準備
sakae@f64:/opt/OB75 $ cat MKDISK.sh qemu-img create -f qcow2 ./disk 8G
こんなインストール用スクリプトを利用。
sakae@f64:/opt/OB75 $ cat INS.sh qemu-system-x86_64 -m 384 -nographic -no-fd-bootchk -s \ -net nic -net user,hostfwd=tcp::2022-:22 \ -hda disk -cdrom ./install75.iso
動作中にcom0の設定を行なう。下記 はcom0関係の項目に絞って掲載。
boot> ;; Press SPACE boot> help commands: # boot echo env help hexdump ls machine reboot set stty time machine: boot comaddr diskinfo memory boot> set tty com0 switching console to com>> OpenBSD/amd64 CDBOOT 3.65 boot> boot> boot : Welcome to the OpenBSD/amd64 7.5 installation program. (I)nstall, (U)pgrade, (A)utoinstall or (S)hell? i At any prompt except password prompts you can escape to a shell by typing '!'. Default answers are shown in []'s and are selected by pressing RETURN. You can exit this program at any time by pressing Control-C, but this can leave your system in an inconsistent state. : Terminal type? [vt220] System hostname? (short form, e.g. 'foo') ob64 : Change the default console to com0? [yes] Available speeds are: 9600 19200 38400 57600 115200. Which speed should com0 use? (or 'done') [9600] :
こんな風にインストールを実施する。com0の設定は、/etc/boot.confに反映さ れているよ。
ob64# cat /etc/boot.conf stty com0 9600 set tty com0
そして、こちらは、OpenBSDの起動スクリプト。
sakae@f64:/opt/OB75 $ cat boot.sh qemu-system-x86_64 -m 384 -nographic -no-fd-bootchk -s \ -net nic -net user,hostfwd=tcp::2022-:22 \ -hda disk
初回の起動時に、/etc/firmware/vmm が自動的に追加された。これ、BIOS-ROM なのね。また、不要なダエモン君が多数出現してるので、下記の設定で、辞退 してもらった。
ob64# cat /etc/rc.conf.local library_aslr=NO pf=NO check_quotas=NO smtpd_flags=NO ntpd_flags=NO sndiod_flags=NO slaacd_flags=NO resolvd_flags=NO
VM on OpenBSD
さて、これで母艦ってかホストOSであるFreeBSDで、ゲストOSであるOpenBSDが 動き出した。qemuさん、ありがとう。そしてVWMwareさんには並々ならぬご支 援を頂き感謝しております。
さて、このゲストOS上で、VMしてみたい。OpenBSD FAQ - Virtualization
しっかり、前提条件が説明されてるぞ。
ob64# dmesg | egrep '(VMX/EPT|SVM/RVI)' ob64#
残念なCPUは遺伝するんだなあ。あきらめろ。 強引に、起動してみる。
ob64# rcctl enable vmd ob64# rcctl start vmd vmd(failed)
そして、/var/log/messages
Jul 3 06:58:30 ob64 vmd[60344]: vmd: /dev/vmm: Operation not supported by device
泣く泣く、/etc/rc.conf.localに追加された、 vmd_flags=
を削除するので
あります。
ob64# ktrace rcctl -f start vmd vmd(failed)
これじゃkshのログしか採取できないな。
ログから、発生現場を探してみます。まずは、文字列のエイリアスを見付ける。
ob$ cd /sys/sys ob$ fgrep 'supported by device' * errno.h:#define ENODEV 19 /* Operation not supported by device */
そして、現場に当たる。
ob$ cd ../dev/vmm/ ob$ grep ENODEV * vmm.c: * ENODEV: if vmm(4) didn't attach or no supported CPUs detected vmm.c: return (ENODEV); vmm.c: return (ENODEV);
vmmopen(dev_t dev, int flag, int mode, struct proc *p) { /* Don't allow open if we didn't attach */ if (vmm_softc == NULL) return (ENODEV); /* Don't allow open if we didn't detect any supported CPUs */ if (vmm_softc->mode == VMM_MODE_UNKNOWN) return (ENODEV); return 0; }
もうドライバーの領域(暗黒街)なんで、それなりの覚悟で潜入捜査しないと、 殺されるぞ。
TRAMP-Mode
しょうがないので、せめてソースと対面したいと思った。が、ゲスト側には emacsなんて入れてない。そこでホスト側のemacsを利用できないか?
こういう要望にちゃんと答てくれるんだなあ。その名は、TRAMP-Mode。微妙に 世界を騒がす御仁とはつづりが違うぞ。
素な使い方は、下記。
C-x C-f /ssh:sakae@localhost#2022:abc.c
少々ググったら、便利な設定が公開されてた。 Emacs Tramp でリモート上のファイルを直接編集する方法
sakae@f64:~/.ssh $ cat config Hostname localhost Host qemu User sakae Port 2022
こんな設定をやっておくと、
sakae@f64:~ $ ssh qemu sakae@localhost's password: Last login: Wed Jul 3 15:18:56 2024 from 10.0.2.2 OpenBSD 7.5 (GENERIC) #79: Wed Mar 20 15:33:49 MDT 2024 :
面倒なく、接続できた。ssh -p2022 localhost のエイリアスみたいなものだ な。
C-x C-f Find file: /ssh:qemu:/sys/kern/ Password for /ssh:qemu:
そして、それをemacsにも適用できる。
接続が切れるとフリーズする。その場合は、 M-x tramp-cleanup-all-buffers を実行する
なお、~/.authinfo が自動作成されるけど、ヤバイ情報が格納されてるから、 都度削除しておこう。このトランプ野郎は、指定したゲストからファイルをロー カルに転送してemacsに喰わせるって仕組みで動作してる。だから、ヤバイ情 報をキャッシュしてるんだ。emacsを終了したら、自動で削除しないのかねぇ。 後始末大事だよ。
can't boot FreeBSD/amd64 on qemu
FreeBSDの母艦に、FreeBSDを入れて、ゲストをgdbしたい。
qemu-system-x86_64 -m 384 -nographic -no-fd-bootchk -s \ -net nic -net user,hostfwd=tcp::2022-:22 \ -boot order=d -cdrom ./FreeBSD-14.1-RELEASE-amd64-disc1.iso disk
ちょいと苦労して、インストール用スクリプトを用意した。
Booting from DVD/CD... CD Loader 1.2 Building the boot loader arguments Looking up /BOOT/LOADER... Found Relocating the loader and the BTX Starting the BTX loader
が、上記の様に、ローダーの本体が起動してこない。
過去にi386版のFreeBSD 14.0を入れた事が有るんだけど、その時はすんなりで きた。OpenBSD上でやったので、同様の手順を踏んだけど、駄目だった。こう なったら、VMWareでやってみて、それを移動してくるかなあ。
install FreeBSD on VMweare
インストールしたら、すかざず、 com0からアクセス出来るように設定。on /boot/loader.conf
boot_multicols="yes" boot_serial="yes" comconsole_speed="9600" console="comconsole,vidconsole" autoboot 0
そのDISK(vmdk)を母艦に転送して、qcow2なフォーマットに変換。
sakae@f64:/opt/FB141 $ qemu-img convert -O qcow2 vmw.vmdk disk qemu-img: Could not open 'vmw.vmdk': Could not open 'vmw.vmdk': Invalid argument sakae@f64:/opt/FB141 $ file vmw.vmdk vmw.vmdk: VMware4 disk image
が、エラーだよ。4Gに分割を選んだので、実体は
-rwxr-xr-x 1 sakae wheel 1111228416 Jul 4 14:41 qemu-s001.vmdk* -rwxr-xr-x 1 sakae wheel 65536 Jul 4 14:41 qemu-s002.vmdk* -rwxr-xr-x 1 sakae wheel 497 Jul 4 14:41 qemu.vmdk*
最初、s001が本命と思ってvmw.vmkなんて名前で持ってきてたんだ。それが間 違いだっと。全部持ってきて、代表で、qemu.vmdkを指定したら、上手く変換 できた。
can not boot on qemu
Booting from Hard Disk... /
何時まで待っても、loginが出てこない。
1001 2 R+ 8:35.56 qemu-system-x86_64 -m 384 -nographic -no-fd-bootchk -s -net nic -net user,hostfwd=tcp::2022-:22 -hda disk
README
読書メーター 皆様の感想が面白い。
オイラーは、このカタカナ言葉 & 業界用語に引かれて、この本を手にした次 第。著者の経歴をいの一番に確認するんだけど、金融機関でシステムエンジニ アをやってたそうだ。
銀行が統合した。A銀行とB銀行は、もちろん別々なシステムで動いていた訳だ から、おいそれと統合できない。当面の間、コンピューター間を橋渡しするシ テム(小説上ではリンカーって名称になってる)で、凌ぐ事になる。 そのシステムのお守りをする人達の物語。
そんな構図が現実に有ったよね。リレー・コンピューターって呼んでたかかな。 よく落ちるで有名だった、いなほの銀行の事ね。
このリンカーはUNIXで構築されているって設定。雷で停電、UPSが糞でホスト が落ちた。オイラーの現役時代に経験してるな。リアルな話しだ。
なんとかシステムを復旧。しかし、原因不明の振込が発生。苦労して原因を追 求したら、昔 顧客の要求で、取引店舗変更の為に作成したデータが残っていた。しかもその 帳票がYMDで持つべきデータをMDで処理してたと言う、ミニY2K 問題。アホみたいな話だなあ。
ホットしていたら、今度は謎のタイムアウトが頻発。サーバーの時計が3秒ず れていたらしい。ntpdが切れても数日で3秒も時計が狂うかね。稼動中のマシ ンの時計を、一気に修正しちゃうってどうよ? ntpdの効能を知らない人達だ ああ、と思っちゃうぞ。でも、時計合わせで現象消失。
でも、また再発。ノリノリってエイリアス名で呼ばれる新人(本名、範子)が、
ググってBUGを発見。それによると、
データの受信時に、ヘッダーに記された時刻と、リアルな時刻を加算して2で
割る処理がはいってた。その処理で2038年問題が発覚。 time_t
が32Bitで
処理してたため、エラー発生、タイムアウト。いやいや、よくある事です。
どこのUnixか説明はなかったけど、まあ大型ホストをやってるメーカーのやつ でしょう。AIXかSolarisかな。想像すると楽しいな。 データベースは何を採用してるんだろう? mysqld? いやいや、落ちても責任 転嫁できる、ボラクルでしょう。ブランド品だから文句を言うなって原理が働 いているに違いない。
と、技術的に読むののいいし、あだ名が通用する、楽しいチームというか人間 関係の物語として読んでもいいよ。