FuguIta 7.7 ja (2)
Table of Contents
前回の補足
many windows manager on FuguIta に、軽いWMが紹介されてる。ROX Filer + iceWM ってのが、一番基本っぽい。これと、xfce-terminalを組み合わせするのはどうよ。
wsconsctl display.brightness で、画面の明るさを調整可能との事。昔 教えていただいてたけど、すっかり失念してた。
FreeBSD に KDE6 が降ってきた に、fcitx の設定例が紹介されてた。
bootしないぞ
安いUSBに焼いた河豚板を起動してみた。そしたら、とんでもない事が起きた。
FuguItaのバナーが出た後、 scanning partitions: ad0i sd0jext2fs... Warining: Nome of FuguIta's operating device(s) found. Which is FuguIta's operating device? ->
キーボードの種別入力になるはずなんだけど、そこまで到達していない。 世間では夏休みなんで、オイラーの所にも、宿題が回ってきたんだな。 じっくり腰を据えて調査してみるか。
lubuntuからどう見える?
超遠方から攻めてみる。母艦にはlubuntuが導入されてるんだけど、導入後に マシンの挙動が変化した様に思えるんだ。
マシンを通電した時、レノボのバナーが表示される。この時に、RETURNを叩くと BIOSの設定選択になる。F1は設定(ここで、起動デバイスの順序を設定可能)、F12で 起動デバイスの一時変更。 以前は、外部のUSBを起動デバイスに指定しておくだけで、USB-HDDの電源ONしておいて(あるいは、 スティックを差しておいて)から、本体電源ONするだけで、河豚板が起動してた。
それが現在は機能しない。しょうがないので、都度F12で指定してる。
そんな訳なんで、リナでどう見えるか確認するのだーー。
sakae@lu:tmp$ lsblk : sda 8:0 0 238.5G 0 disk ├─sda1 8:1 0 300M 0 part /boot/efi └─sda2 8:2 0 238.2G 0 part / sdb 8:16 1 14.6G 0 disk ├─sdb1 8:17 1 512K 0 part ├─sdb4 8:20 1 14G 0 part /media/sakae/682832e856d0ed2c1 ├─sdb5 8:21 1 1.1G 0 part /media/sakae/682832e856d0ed2c ├─sdb6 8:22 1 3G 0 part ├─sdb7 8:23 1 3G 0 part └─sdb8 8:24 1 6.9G 0 part
sdaは、リナの入った本体SSD。sdbは河豚板の入ったUSBスティック。何となく、 パーテションを認識してる様に見うけられるな。
FuguItaからどう見える?
USB-HDDと USBスティックも差した状態で起動。F12で出てくる案内には、一般的な名称である USB-HDDと表示された。USBデバイスを単独で差した場合、SAMSUNG SP1604Nとか General, UDiskって表示されてたぞ。
刑事は、こういう些細な事を見逃さないんだ。推測するに、複数のUSBを検出はして みたものの、どれが優先されるはかはポートの関係で、一意に決定できないのだろう。 だから、お茶を濁したとな。
fugudemo$ dmesg | grep sd sd0 at scsibus1 targ 0 lun 0: <ATA, SAMSUNG MZ7LN256, EMT0> naa.5002538d00000000 sd0: 244198MB, 512 bytes/sector, 500118192 sectors, thin sdmmc0 at rtsx0: 4-bit, dma sd1 at scsibus2 targ 1 lun 0: <USB-HS, SAMSUNG SP1604N, 0.01> serial.0411002a000001112523 sd1: 152627MB, 512 bytes/sector, 312581808 sectors
sd1が認識されてUSB-HDDからbootしてきた。でも、 sd2は検出してくれないなあ。これって、ひょっとしてBIOSが2番目以降の奴を無効に してるのかも?
まあ折角起動してるんで、母艦のsd0を確認してみる。
fugudemo$ doas disklabel sd0 # /dev/rsd0c: type: SCSI disk: SCSI disk label: SAMSUNG MZ7LN256 duid: 0000000000000000 : 16 partitions: # size offset fstype [fsize bsize cpg] c: 500118192 0 unused i: 614400 4096 MSDOS j: 499484954 618496 ext2fs
sd0i,sd0jは、ちゃんと認識してるんだな。
起動時にsd2以降はdisabelされているって推測の裏取り。スティックを差し直したら認識したわい。
fugudemo$ dmesg | grep sd : sd2 at scsibus5 targ 1 lun 0: <General, UDisk, 5.00> removable serial.abcd1234018838012506 sd2: 15000MB, 512 bytes/sector, 30720000 sectors
ちゃんと安物USBを認識した。
fugudemo$ sysctl -n hw.disknames sd0:,cd0:,rd0:ebdda82f6cc44d7c,sd1:75597a1fe2694c32,vnd5:8df7616b671be722,sd2:75597a1fe2694c32
diskの種を拾い出す元も確認。ちゃんと列挙されてる。
これからの捜査方針。
1. 安物だけを差して、hw.disknamesがどうなるか? 2. 高価なUSB(8G)に河豚板を焼いてみて、それで起動するか? 3. 安物にi386河豚板を入れて、i386機で使用できるか?
これぐらいを調べてみれば、安物が問題の発生源か、色眼鏡の冤罪か白黒が つくだろう。事件は会議室で起こっているんじゃない、現場で起ってるんです。 多分、世界中を探してみても初事例でしょう。
なお、河豚板特製rcの関連部分は、下記だ。ソースが公開されてるって とっても贅沢な事。作者様に大大大感謝します。
# make a list of all partitions # scan_disks () { #------------------------------- # make a list of all partitions # for dsk in `sysctl -n hw.disknames | /boottmp/sed -E -e 's/:[0-9a-f]+/:/g; s/[:,]+/ /g;'`; do case $dsk in [csw]d[0-9]*) disklabel -c -pm $dsk 2> /dev/null \ | /boottmp/sed -E -e '/^ [abd-p]: /!d; s/^ (.):/'$dsk'\1/' ;; esac done > /boottmp/boot_partitions :
check 1
単独で安物USBを起動。現象が発現したら、Ctl+Cでshellを起動して確認。
sysctl -n hw.disknames sd0:,cd0:,rd0:ebb...7e
想像した通り sd1 は、列挙されていない。これじゃ候補が無いのは当然だ。 苦しまぎれに、USBを抜き差ししたよ。そしたら、sd1を認識しましたって メッセージが出てきた。Ctl+c(だったかd)で、元に戻ると、候補に
sd1a sd1b sd1d sd1e sd1i と表示され、何事も無かったように、sd1aが チョイスされて、目出度く、キーボードの選択を経由して、DeskTopの画面 表示まで行きついた。
疑問が深まるなあ。起動時に何故カーネルはsd1を検出してくれないの? それが、安物の安物たる所以ですってか。ここで諦める訳にはいかないので、 次のチェックへと歩を進めよう。
check 2
ブランドの東芝製USB(8G)に焼く。焼く場所は、lubuntu上だ。だって何時も i386なOpenBSD機を使ってるけど、仮にこいつが稼動しなくなった場合、右往左往 しない為の訓練をしておこうと思ったから。リナでは、USBをキャラ・デバイスとしては 扱かえないみたいだ。gzipからのstdoutをddで受けるんだな。
gzip -dcv FuguIta-7.7-amd64-202507011.img.gz | dd of=/dev/sdb bs=4M status=progress oflag=direct 2147483648 bytes (2.1 GB, 2.0 GiB) copied, 376.937 s, 5.7 MB/s 0+48183 records in 0+48183 records out 2147483648 bytes (2.1 GB, 2.0 GiB) copied, 376.957 s, 5.7 MB/s root@lu:/var/my/ISO# sync
余談になるけど、東芝USBは、lubuntuのインストーラーが入っていた。此れを差すと 余計なお節介でファイラーで開くが聞いてくる。不要ですって答えても、勝手に マウントしちゃう。しかも、マウント・ポイントの一部が 'Ubuntu installer' の様に、spaceが入っていたぞ。ここまでWindowsの悪しき習慣を真似るんですかい。 リナはUnixの良き習慣を破壊した、えせWindowsだな。
これで起動したら、無事に稼動した。ついでなので、起動が速くなる様に、/usr/local をusbfadm領域から分離する様な河豚板を作成してみる積りだ。いわゆる、河豚板 ja の縮小版(16G -> 8G)ね。
check 3
今度は、余ってしまった、安物USB(16G)を、i386機様に転用する事にする。 上手く起動すれば、i386機のデータバックアップとして利用出来るからね。
BIOS設定の所作は、amd64機と同様だった。同じレノボ製だから、同一なBIOSを 使用してるのだろう。USBスティックを最初に起動してって設定をしておいて起動。 指示した安物USBから起動してきたぞ。そして普通に河豚板が稼動を始めた。
TODO
ここまでの捜査をまとめておく。
不具合は、安物USBをamd64機で起動した時のみ発現する。一次原因は、河豚板
特製のrc内にある scan_disks()
で、sd1が検出されない為。
カーネルが稼動してsysctlで何故 sd1が列挙されないか? 事件は現場で発生 してるんだけど、追跡困難だ。会議と称して、コードを眺めるしか手はないの?
困った時の神頼み、神託を聞いてみる。
A: ご質問ありがとうございます。OpenBSDのライブシステム(FuguIta)をUSBメモリから起動した際、**特定のUSBデバイスがブート時に認識されない**という問題ですね。
この現象は、いくつかの技術的な背景とUSBストレージの実装の違いに起因しています。以下にその**原因と背景**を解説します。
—
## 🔍 想定される原因ポイント
### 1. USBデバイスの初期化遅延
- 安価なUSBストレージや一部の互換チップを使った製品では、電源投入後に**内部のファームウェアの初期化が遅い**ことがあります。
- カーネルがデバイススキャンを行うタイミングで、まだUSBデバイスが**準備完了しておらず**、認識に失敗します。
- これは\*\*"cold boot detection problem"\*\*(コールドブートでデバイスが見つからない)として知られています。
### 2. USBプロトコルやSCSIのエミュレーション品質
- USBマスストレージは、**USB Mass Storage Class (MSC)** に準拠しつつ、**SCSIコマンドセットをエミュレート**して通信します(Bulk-Only Transport, BOT)。
- 安価なUSBメモリは、**SCSIコマンドの実装が不完全**だったり、挙動が曖昧なものがあります。
- そのため、OpenBSDのように厳密な実装を行うOSでは、**初回のスキャンでエラーを出して除外**する場合があります。
### 3. USBポートやHUBとの相性
- USBバスの初期化順序や、ルートHUBのリセット処理のタイミングの違いで、デバイスがタイミングを逃すことがあります。
- 特に、USB 3.0ポートにUSB 2.0デバイスを接続した場合、タイミングの違いが顕著になることがあります。
### 4. FuguItaやOpenBSD側のSCSIバススキャン仕様
- OpenBSDのUSBストレージスキャンは、早い段階で `umass(4)` → `scsibus` → `sd` と進みます。
- すべてのデバイスにリトライ処理があるわけではなく、**初回失敗で諦めるケース**も存在します。
- `boot.conf` や `rc.firsttime` にウェイトを入れるなどの工夫がなければ、**見落としが起きやすい**です。
—
## 💡 対策と検証方法
### ✅ 対策1:USBの抜き差し
→ 実際にされているように、ブート後に抜き差しすると `umass0` デバイスが再スキャンされ、`sd1` として認識されます。
### ✅ 対策2:USB起動時に `umass` の初期化待ちを入れる
- FuguIta の `/boot.conf` などに `bootdelay=5` のような遅延を入れることで、問題を緩和できる可能性があります。
### ✅ 対策3:USBメモリの選定を見直す
- Kingston、SanDisk、Transcend の中〜上位モデルは初期化が高速で安定していることが多く、相性問題が少ないです。
—
## 🧠 補足:USBメモリのSCSIエミュレーションの仕組み
USBメモリは以下のような**仮想SCSIディスク**として動作します:
- **umass(4) ドライバ**が USB デバイスを検出。
- デバイスが `USB Mass Storage Class` に対応しているか確認。
- BOT(Bulk-Only Transport)または UAS(USB Attached SCSI)を選択。
- SCSIバス (`scsibusX`) を仮想的に割り当て。
- 仮想SCSIターゲット (`targ X`) を通じて `sdX` デバイスを作成。
- カーネルからは、SCSIディスク(sdX)と見なされ、通常のブロックデバイスとして扱われます。
—
## ✅ 結論:なぜ認識されなかったのか
- USBストレージデバイスの 初期化が遅延 していた。
- OpenBSDの デバイススキャンタイミング がその準備完了より早かった。
- そのため ブート時にsd1として認識されなかった が、後から抜き差しすれば検出された。
色々と原因を並べたててくれたなあ。初期化遅延ってのはどうかな? カーネルもsd1に 鎮座してるんだから、これが原因とすると、そもそもカーネルが起動しないだろう。 それに、差すポート(3個ある)を代えてみたけど、全部で失敗してた。ポートのうちの 一つは常に電源が供給されてるポートだった。USBに通電時に、初期化されるって仮定 すると、初期化遅延の疑いは無くなるな。
デバイススキャンタイミングってのが臭そうだな。その根拠として、遅いマシン であるi386機では、安価なUSBでも正常に稼動してるから。
umass(4)あたりが、とっかかりになるのかな。
NAME umass - USB mass storage support SYNOPSIS umass* at uhub? DESCRIPTION The umass driver provides support for USB mass storage class devices. SEE ALSO scsi(4), uhub(4), usb(4), disklabel(8)
/sys/dev/usb/umass.c
/* * Universal Serial Bus Mass Storage Class specs: * https://www.usb.org/sites/default/files/Mass_Storage_Specification_Overview_v1.4_2-19-2010.pdf * https://www.usb.org/sites/default/files/usbmassbulk_10.pdf * https://www.usb.org/sites/default/files/usb_msc_cbi_1.1.pdf * https://www.usb.org/sites/default/files/usbmass-ufi10.pdf */
ここ見ろワンワンってURLが掲載されてるけど、いきなりは大変そう。 まずは、 ユニバーサル・シリアル・バス あたりを見て、全体象を把握してからかなあ。
カーネルの下半分を主に調べる事になるだろうけど、kvmで動作させてるOpenBSDを 対象にする事になる。この環境って、USBをパススルーしてくれるのだろうか? 途中に居るLubuntuが、いらぬ妨害をしてくる気がするぞ。真夏の夜の夢にならない事を 祈るばかりですよ。
USBの基礎知識 ――パケットのフォーマットからプロトコルの詳細まで
これは、見所一杯だなあ。これを読んで分った事にするかな。
たった498円の出費で思わぬ方向に誘導された。そして、当初の目的であった、 夏に強い河豚板の作成にも着手できた(してる)。16GのUSBはamd64機では動作 しなかったけど、i386機用に使用できる。正に、虎は死して皮を残すだな。
README
推し活大全 なんて本を読んだ。
NHKでやってるアサイチの名物企画が非常に好評だったので、本にしたとか。 オータニサン映像をたれ流すよりは健全だと思うぞ。映像はとんでもなく高価。 おかげで再放送と番宣ばかりだもの。
それに対してアサイチは金をかけずに、番組を作ってる。テーマを決めて、 お便りをつのるんだけど、推しの回は、アンケートが押しよせてきたとか。 紹介してもきりないので、推しの人をリストアップする事にした。 そして、それを番組の背景パネルに提示。名付けて、推し名書き。
アンケートがフリーフォーマットなので、名前の抽出が機械的にできない。 たとえば、嵐の二宮君があったり、嵐のニノさんが有ったり。こういう表記ゆれは 人海戦術で対処するしかない。2次元は松岡アナ、著者は俳優・アーティスト、もう一人のディレクター は、宝塚みたいに、得意分野を担当したとか。
珍しい所で、perl6をhaskellで書いちゃった台湾のハッカー、オードリー・タン さん(現在、台湾のディジタル相)が紹介されてた。巻末に、リストが掲載されてるんだけど、オイラーの 知らない人達ばかりだ。まあ、いいんでないかい。
推し効果として、ライブ鑑賞、グッズ売上や聖地巡礼による経済効果。徳を積むと称して、推し本人の行動を 真似て、被災地への寄付だとか、動物愛護に貢献したい人が続出してるらしい。