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ディスク**として動作します:

  1. **umass(4) ドライバ**が USB デバイスを検出。
  2. デバイスが `USB Mass Storage Class` に対応しているか確認。
  3. BOT(Bulk-Only Transport)または UAS(USB Attached SCSI)を選択。
  4. SCSIバス (`scsibusX`) を仮想的に割り当て。
  5. 仮想SCSIターゲット (`targ X`) を通じて `sdX` デバイスを作成。
  6. カーネルからは、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で書いちゃった台湾のハッカー、オードリー・タン さん(現在、台湾のディジタル相)が紹介されてた。巻末に、リストが掲載されてるんだけど、オイラーの 知らない人達ばかりだ。まあ、いいんでないかい。

推し効果として、ライブ鑑賞、グッズ売上や聖地巡礼による経済効果。徳を積むと称して、推し本人の行動を 真似て、被災地への寄付だとか、動物愛護に貢献したい人が続出してるらしい。


This year's Index

Home