読者です 読者をやめる 読者になる 読者になる

OpenBSD 4.6 (今更)を SD カードリーダ経由 SD カードからインストールする

ThinkPad X40

昔々僕の中で第1期 OpenBSD ブームが来ていたときに 4.4 をインストールして xfce まで入れて Opera まで動かしていた ThinkPad X40 さんですが、その後部屋の中で何処へいったかわからないくらいの冷遇の時期が続いていました。

そして昨今のリバイバルブーム。これは入れざるを得ますまい。 4.7 がもうすぐ出ようというこの時期に 4.6 だが、なんだか disklabel 部分がオススメ設定とかで自動になったりしてインストールが便利になってるという話。やってみたくてやってみました。

が、話の本筋はそこではなくて、うちの X40 には光学ドライブが無いので CD からのインストールができません。しかし bsd.rd というオンメモリのカーネルさえとにかく起動すればインストールまで漕ぎ着けられるのが OpenBSD の良いところ。ソフマップの店頭で 500 円くらいで叩き売られている USB メモリで充分…、なんですが、うちにあった2本の USB メモリは2本ともこないだ会社の天才若手にアニメぎっしり詰め込んで貸したっきり、その天才性ゆえにさっぱり返してくれないので手元に無い!。しかしふとみると SD カードとカードリーダならある!ということでそれでやってみました。できちゃうんだな。これが。

考え方

14.7 - How does OpenBSD/i386 boot?

ここに全部書いてあるんですが、 OpenBSD のブートは、

  1. MBR ( fdisk で区切った上でどれかをアクティブに)
  2. PBR ( installboot でファイルシステムに仕込む)
  3. boot (ディスクのルートに置いてあればいい)
  4. bsd, bsd.rd (ディスクのルートに置いてあればいい)

という順番で上のものが下のものを起動して上がっていきます。僕は GRUB とかブートローダが好きでは無いので、デュアルブートする場合も大抵 fdisk でアクティブパーティション(アクティブスライス)を切り替えて使ってます。そっちの方がカチっとするよ!

OpenBSD 4.4 on VMWare で SD カードを OpenBSD にフォーマットしちゃう

はい、というわけで、 VMWare Virtual Appliance で拾ってきた OpenBSD 4.4 があったので、それを立ち上げて SD カードリーダをゲストに接続。なにせカードリーダにはカード差すところいっぱいあるので、認識した途端 sd1 から sd6 くらいまでばーっと増えるのですが、 "disk offline" ではないものが一つだけあるのでそれが今回の対象。僕のところでは sd3 でした。これを弄くります。

まず、 Windows 的な意味でのパーティションを思い切って初期化。どーん。

# fdisk -i sd3

次に、 Unix 的な意味でのパーティションをずばっと一個だけ作る。

# disklabel -E sd3
> p m
(全体を示す c しかないことを確認)
> a a
offset: [63] Enter
size: [1943802] Enter
FS type: [4.2BSD] Enter
> p m
( a が増えた)
> q

とまあ、以上切ったので newfs でフォーマット!どーん

# newfs /dev/rsd3a

以上フォーマット完了。

次に、オンメモリブートに必要な最低限のファイルを SD カードに移します。 4.4 のものから移しちゃうと 4.4 のインストーラが走ってしまうので、 4.6 のファイルを落としてきて SD カードへ。

# ftp ftp://ftp.jaist.ac.jp/pub/OpenBSD/4.6/i386/bsd.rd
# ftp ftp://ftp.jaist.ac.jp/pub/OpenBSD/4.6/i386/base46.tgz
# makedir base46
# cd base46
# tar zxvf ../base46.tgz
# mount /dev/sd3a /mnt
# cp usr/mdec/boot /mnt/
# cp ../bsd.rd /mnt/

はい、これで boot と bsd.rd を移動完了! boot ってのは bsd.rd のさらに前の段階のブータですね。 MBR の「次の次の段階」がこれなんじゃないかと推測します。

OpenBSD を起動すると最初 boot> で待ってくれますが、これが boot が上がった状態。このあとに通常はオンディスクカーネルである bsd を上げるわけです。今回は bsd.rd です。

次に、 installboot で、 MBR から最初に起動される(と僕が推測する)ブータをファイルシステム中に仕込みます。この仕込んだものが boot を上げてくれるそうです。すごいですね。

# usr/mdec/installboot -nv /mnt/boot usr/mdec/biosboot sd3
( installboot も 4.6 のものを使うことに注意!)
using MBR partition 3: type 166 (0xa6) offset 63 (0x3f)
(ごにょごにょでOKそう。offset XX の XX の値が disklabel でつくった a パーティションのオフセットと一致してないとブート失敗するぜ!)
# usr/mdec/installboot -v /mnt/boot usr/mdec/biosboot sd3
# umount /mnt

"-n" で一回様子をみて、外して実行。 biosboot ってのはなんかテンプレートだそうです。これで boot が上がるようになりました。嬉しいな。

ThinkPad X40 に差す

というわけで OpenBSD 4.4 on VMWare から抜いて、 ThinkPad X40 くんにぶっさします。そんで起動、 F12 でブートデバイス選択。みごと USB HDD が表示されていたので選択します。

ばっちりブート!

disk: hd0+ hd1+
boot> boot hd0a:/bsd.rd

kbd(8) mapping? ('L' for list0 [none] jp
Which one is the root disk? (or 'done') [done] wd0
Do you want to use *all* of wd0 for OpenBSD? [no] yes
...

あとははいとかいいえとか Done くらいでご自由にでいけた。 disklabel はオート設定があって A っていれるだけで( Unix の言う)パーティションを切ってくれる!あれが一番迷うというかどうでもいいというかバビるところだったんですよね。

というわけで簡単になってるね! OpenBSD のインストールも!

でもやっぱり無線 LAN はつながらない

4.3 から 4.4 にバージョンが上がった際にまったくつながらなくなってしまった X40 の無線 LAN 。ドライバは ath0 。4.6 で解決してるかなと思ったんですが全然だめでした。 wpapsk に対応してないとかそういう話ではなく、 ath0 がウェイクアップしてこないんですよねー…。謎です。昔は 4.3 が入った USB メモリで一回ウェイクアップさせて、それからリブートして 4.4 というわけのわからないことをやっていたんですが、今回もそうせざるを得ないようです。

テオ様も言ってましたが、まったく無線 LAN は戦場だぜー!!

で、何に使うのか?

わかりません。

使ったコマンド manual