CCLUB のサーバでは FreeBSD 3.5-STABLE が走ってるんですが、 こいつをアップグレードしろと命令が下りまして。
3.x → 4.x の場合、ソースからのアップグレードは、なんだか 素人にはお勧めできない らしいのです。
で、右と左くらいしかわからないような状態なので、 とりあえず VMWare で試してみようと思いまして。
どちらかといえば、「参考にしてください」でなくて「ツッコミ入れてください」な方向で。
……は省略。上書きインストールについては FreeBSD 4.0 RELEASEの上書きインストール方法 というサイトがあるんで、これを参考に。
とりあえず、/etc/fstab のハードコピーはとっておけ、とのことだったので、 スクリーンキャプチャをとる。
root、すなわち / が mount できないと言っている。
3.x → 4.x ではデバイスファイルの名前がどうたら、という話を見たことがあったので探す。 で、DAMMER'S FACTORY によると、/dev/wd* は /dev/ad* に名前が変わってるらしい。そこで、
ufs:/dev/ad0s1a
と打ち込んでみる……なんか動いた。なお、ここで「:」を入力するには、 「Shift + ;(セミコロン)」とする必要があった。keymap が変なのか。
アップグレードするときに、マウントポイントやら何やらの設定をまずったのが原因か? (元の /etc/fstab と同じ容量のところに同じマウントポイントを書いただけだったので)
なんか「予期しない不一致がある; 手動で fsck してくれ」とか 「shell の full path を入力してくれ」とか言ってる。
shell (sh) の場所は /bin/sh で間違いないのでそのまま Enter。 すると、プロンプト "#" が表示された。シングルユーザモード? root? (っていうか、この 2 つに操作上とか権限上とかで大きな違いはあるのか)
とりあえず、シングルユーザモードに落ちてみる。やり方は 緊急時のブート方法 にあり。 ……すると、2.2 と同じ雰囲気の表示に。 ってことは既にシングルユーザモードに落ちてたというわけね。
ページに書いてあるとおり(HDD のデバイスファイル名は違うよ)
fsck -y /dev/ad0s1a
mount -u /
mount -a
とすると、最後の mount -a で文句を言われる。「Device not configured」だそうで。
mount の manpage によると、-a は /etc/fstab に書いてあるものを全部 mount するらしい。 /dev/wd* は /dev/ad* に名前を変えているけれど、/etc/fstab には /dev/wd* と書いてあるままなのが原因か。
/etc/fstab が原因っぽいので、こいつを編集する。編集の前にバックアップをとる。
cd /etc
cp fstab fstab.bak
と、「cp: fstab.bak: Read-only file system」とか言われる。 で、たぶんこれは / が read-only な指定で mount されてるのが原因だろうと推測。
2.3 で出てきた mount の -u オプションが気になるので調べる。 上記 mount の manpage には -u オプションに関する記述なし。 そこで、CCLUB のサーバにログインして jman mount。 でもって /-u で「-u」を検索。n で次候補検索。(man の pager は less)
で、オプション -u は update の意だと判明。既に mount されているモノの、 mount の状態 (readonly とか writable とか)を変更するためのモノらしい。 さらに下へ読み進めると、オプション -w で読み書き可能になるとある。
そこで以下のように実行。
mount -uw /
cd etc
cp fstab fstab.bak
でコピーができるようになった。
さて vi で fstab を編集しようとすると、
# vi fstab
vi: not found
と言った具合。ee も同様に見つからない。 たぶん、/usr が mount されていないのが原因だろうと。
mount /dev/ad0s1f /usr
で、vi が入ってそうな、元 /usr 部分を mount する。
ここで、/usr が /dev/ad0s1? なんかのうちのどれに対応しているか知るには /etc/fstab を見る。/usr に対応する /dev/wd0s1? の「wd」を「ad」に読み替えて mount すればよし。上書きインストール時に、マウントポイントの設定を 3.5.1 のときと(ほぼ)同じにしたので、これで mount できる。
で、これで vi が使えるかというとどうもそうではないっぽい。
なんか言われている。落ちたら編集中の文書はパーだぞ、といったところか。 /var を mount してないのが原因だろう。 とりあえず、ESC, ESC, Shift-;(:), q, ! で vi を終了する。
mount /dev/ad0s1e /var
vi /etc/fstab
とすると、いつも通りの vi の画面になった。 あとは "wd0s1?" を全部 "ad0s1?" に変えて保存し、vi を終了する。
これで /etc/fstab に起因する問題は解消されるはず。あとはリブートするだけ。
shutdown -r now
でリブート。うまく行ったクサい。
前 (3.5.1) の /etc は /usr/tmp/etc に入っているので、/etc を編集する際に参考にする。