2005年5月3日火曜日

FreeBSDのアップデート

CDもフロッピーディスクも作らずに、ネットブートもせずPC1台だけで、手軽?に、FreeBSDを最新版にアップデートする方法。


cvsup & make buildworldするにはCPUパワーが足りない、てゆーかサーバーなので、CDドライブもフロッピーもつけてないよ、というなんだかな~なパソコンは、こんなかんじで、手軽にOSを、無理やりアップデートできる。



まず、フロッピーディスクのイメージファイルをダウンロードしてくる。snapshots.jp.freebsd.orgという、毎日ビルドしているところがあるので、そこからいただく。

http://snapshots.jp.freebsd.org:8021/pub/FreeBSD/snapshots/i386/5.4-STABLE-20050501-JPSNAP/floppies/


ダウンロードするのは、boot.flp、kern1.flp、kern2.flpの3つ。



イメージファイルをmdconfigして、mountする。

# mdconfig -a -t vnode -f /home/hoge/boot.flp

md0

# mount /dev/md0 /mnt

# ls /mnt


.snap boot kernel.gz.split
acpi.ko.gz kernel.gz.boot mfsroot.gz



ふーん、最近は、こんな風になってるんですねぇ。フロッピーが3枚に分かれてから、こうなったんですかね。



カーネルなどのファイルを、ハードディスクにコピーする。コピー先どうでもいいから、/boot.flpというディレクトリにでもしてみた。

# mkdir /boot.flp

# cp /mnt/* /boot.flp/

cp: /mnt/boot is a directory (not copied).

このエラーは、どうでもいい↑



コピーしおわったら、後始末する。

# umount /mnt

# mdconfig -d -u 0




あとは、kern1.flp、kern2.flpについて、同様の作業を2回繰り返す。
# mdconfig -a -t vnode -f /home/hoge/kern1.flp


md0

# mount /dev/md0 /mnt

# ls /mnt


.snap kernel.gz.aa

# cp /mnt/* /boot.flp/

# umount /mnt

# mdconfig -d -u 0

# mdconfig -a -t vnode -f /home/hoge/kern2.flp



md0


# mount /dev/md0 /mnt

# ls /mnt



.snap kernel.gz.ab

# cp /mnt/* /boot.flp/

# umount /mnt

# mdconfig -d -u 0



というわけで、こんな風にファイルがコピーされた。

# ls -la /boot.flp/


total 3646
drwxr-xr-x 2 root wheel 512 May 2 09:13 .
drwxr-xr-x 31 root wheel 1024 May 2 09:10 ..
-rw-r--r-- 1 root wheel 139064 May 2 09:10 acpi.ko.gz
-rw-r--r-- 1 root wheel 1425408 May 2 09:13 kernel.gz.aa
-rw-r--r-- 1 root wheel 1064236 May 2 09:13 kernel.gz.ab
-rw-r--r-- 1 root wheel 16384 May 2 09:10 kernel.gz.boot
-rw-r--r-- 1 root wheel 91 May 2 09:10 kernel.gz.split
-rw-r--r-- 1 root wheel 1015943 May 2 09:10 mfsroot.gz





分割されている(らしい)ファイルを、1個につなぐ。


# cat kernel.gz.boot kernel.gz.aa kernel.gz.ab > kernel.gz

# rm kernel.gz.*

# ls


acpi.ko.gz kernel.gz mfsroot.gz


再起動する。



デーモンくんのAAが表示されるブートローダーでは、「6. Escape to loader prompt」を選ぶ。



カーネルをロードする。


OK unload

OK load /boot.flp/kernel



/boot.flp/kernel text=0x444b18 data=0x7d6c4+0x4fbdc syms=[0x4+0x5b570+0x4+0x70968]

ファイル名に.gzはいれなくていい。



mfsrootをロードする。


OK load -t mfs_root /boot.flp/mfsroot




そのままだと、もともとあるacpiモジュールが/boot/kernel/acpi.koあたりからロードされてしまうので、それを防ぐために

OK set module_path


とする。ちゃんと設定できたかどうかは、showで確認できる。



ブートする。-aオプションをつけて、ルートパーティションを選択できるようにする(変数をセットしてもいいんだけど、変数名を忘れた)。

OK boot -a



mountroot> ?

というプロンプトが表示されるので、「ufs:md0a」と入力する(?かなんかでヘルプがでる)。


あとは、upgrade installを実行すればよい。snapshots.jp.freebsd.orgからネットワークインストールしてもいいし、事前に、snapshots.jp.freebsd.orgからローカルディスクにダウンロードしておくのもよい。


1 件のコメント:

  1. ACPIモジュールをロードしないと、ブート中にハングするマシンをみつけた。
    だから、この例では「set module_path=/boot.flp」のようにして、もともとフロッピーに入っていたACPIモジュールをロードできるようにすべき。

    返信削除