なんとなく自宅サーバのFreeBSDをバージョンアップしてみました。初めて挑戦するのにかなりいい加減です。
重要なアプリケーションはインストールされていないとは思うのですがよく覚えていないのでわからず。動かなくなるとちょっと困るのですが、以前から興味があったので思い切ってやってみました。
さて、現在のバージョンは一昔前の4.6.2。取り合えず4-STABLE(安定版)にしてみることにします。いきなり5.x系にするのはちょっと怖いし面倒なので。
作業前
# uname -a
FreeBSD home.teachat.org 4.6.2-RELEASE FreeBSD 4.6.2-RELEASE #0: Wed Aug 14 21:23:26 GMT 2002 murray@builder.freebsdmall.com:/usr/src/sys/compile/GENERIC i386
作業後 ( ̄ー ̄)
# uname -a
FreeBSD home.teachat.org 4.11-STABLE FreeBSD 4.11-STABLE #1: Tue Feb 22 09:52:51 JST 2005 root@:/usr/obj/usr/src/sys/GENERIC i386
作業にあたっては、
FreeBSD ハンドブック Chapter 20. 開発の最前線がとても参考になりました。わかりやすいドキュメントです。
cvsサーバに接続してソースツリーを最新に更新にするために、まずCVSupをインストールします。
CVSup のインストール
# cd /usr/ports/net/cvsup
# make install
バージョンの確認。SNAP_16_1eよりも新しくないとダメらしい。
# cvsup -v
CVSup client, non-GUI version
Copyright 1996-2003 John D. Polstra
Software version: SNAP_16_1h
Protocol version: 17.0
Operating system: FreeBSD4
http://www.cvsup.org/
Report problems to cvsup-bugs@polstra.com
CVSup is a registered trademark of John D. Polstra
既存のソースをバックアップ
# mv /usr/src /usr/src.old
# mkdir -p /usr/src
CVSup の実行
オプションでソースを取ってくるホストを指定して、CVSupを実行します。MMX200/64MB/USEN100MB環境で13分ほどかかりました。
# /usr/bin/time /usr/local/bin/cvsup -g -L 2 -h cvsup.jp.freebsd.org -z /usr/share/examples/cvsup/stable-supfile
(中略)
Shutting down connection to server
Finished successfully
796.91 real 362.06 user 80.75 sys
各オプションの意味は下記です。
こちらを参考にさせていただきました。
- -g : GUI を使わない
- -L 2 : 詳細情報をプリントアウト
- -z : compression を有効に
- -h : ソースを持ってくるサーバ名を指定。この中から適当に選択。
ソースを取得したら、まず/usr/src/UPDATINGを読まなくてはいけないそうです。
# less /usr/src/UPDATING
ふむふむふむふむふむふむふむふむ。( ´_ゝ`)
全部英語なので取り合えず読んでみてもよくわかりませんが、なんとなくわかったような気になって次に進むとします。(爆)
※カスタムカーネルにする場合はこの辺で設定するみたいですが、今回はGENERICでいいのでパス。
/etc/make.confの設定
次に/etc/make.confを設定します。無かったのでコピーしました。
# cp /etc/defaults/make.conf /etc/make.conf
※qmailの処置についてコメントを頂きました。
/etc/make.confに
NO_SENDMAIL= true
と記述することでsendmailが入るのを防げるようです。
/etc/groupの確認
新しいバージョンで必要とするgroupがあれば追加するため。
# diff /etc/group /usr/src/etc/group
シングルユーザモードに移行
「# shutdown now」でシングルユーザモードになるそうなのですがうまくいかなかったので、再起動してから起動中の
Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [/boot/kernel/kernel] in 7 seconds...
というような表示の際に
スペースバーを叩いて autoboot を停止させ、コマンドプロンプトから `boot -s' とタイプしてシングルユーザで立ち上げました。不要なプロセスを落とせばマルチユーザモードでもいいみたいですが、ここは作法に従って。
「ファイルシステムをチェックした後、 / を読み書き可能にして再マウント、 /etc/fstab に指定されている、 それ以外の UFS ファイルシステムをすべてマウントしてから スワップを有効にします。」
(
ハンドブックより。)
# fsck -p
# mount -u /
# mount -a -t ufs
# swapon -a
/usr/objを削除
# cd /usr/obj
# chflags -R noschg *
# rm -rf *
buildworld
更新されたソースツリーを使ってbuildworld。ソースを再構築します。4時間近くかかりました・・・( ´Д`)
# cd /usr/src
# make cleandir; make cleandir
# script /var/tmp/mw.out
# /usr/bin/time make -DNOPROFILE=true buildworld
(中略)
13018.96 real 10965.98 user 1640.16 sys
# exit
Script done, output file is /var/tmp/mw.out
※script〜の実行により、「exit」までのログが /var/tmp/mw.out に記録されます。
※「make -j4 buildworld」とかすると同時実行プロセス数を指定できるらしいですが、このマシンはスペックが低すぎるので指定しませんでした。
カーネルのコンパイルとインストール
# cd /usr/src
# /usr/bin/time make buildkernel
(中略)
--------------------------------------------------------------
>>> Kernel build for GENERIC completed on Tue Feb 22 10:12:36 JST 2005
--------------------------------------------------------------
2692.77 real 2379.69 user 246.08 sys
# /usr/bin/time make installkernel
(中略)
54.47 real 23.65 user 8.63 sys
シングルユーザモードで再起動。
# shutdown -r now
installworld
# fsck -p
# mount -u /
# mount -a -t ufs
# swapon -a
# cd /usr/src
# /usr/bin/time make -DNOPROFILE=true installworld
(中略)
--------------------------------------------------------------
>>> Rebuilding man page indices
--------------------------------------------------------------
cd /usr/src/share/man; make makedb
makewhatis /usr/share/man
makewhatis /usr/share/openssl/man
makewhatis /usr/share/perl/man
rm -rf /tmp/install.34
548.24 real 219.93 user 102.85 sys
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
# uname -a
FreeBSD home.teachat.org 4.11-STABLE FreeBSD 4.11-STABLE #1: Tue Feb 22 09:52:51 JST 2005 root@:/usr/obj/usr/src/sys/GENERIC i386
make world で更新されないファイルの更新
mergemasterを実行して、/etc、/devの更新を行います。
mergemasterの実行により /etc、/dev のファイルが新しいファイルに入れ替わってしまうので
/etcをバックアップします。
# cp -Rp /etc /etc.org
# /usr/sbin/mergemaster -a -i
最後の再起動。これにてバージョンアップは終了。
# shutdown -r now
qmailの処置
qmailを使っている場合、/usr/sbin/sendmailが元のsendmailに戻っているので処置する必要があります。
# chmod 0 /usr/sbin/sendmail
# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
※/etc/make.confでNO_SENDMAIL= true設定している場合には必要ないようです。
※2005/9/24 追記
/etc/make.confの設定がない場合、
/etc/mail/mailer.confが
sendmail /usr/libexec/sendmail/sendmail
send-mail /usr/libexec/sendmail/sendmail
mailq /usr/libexec/sendmail/sendmail
newaliases /usr/libexec/sendmail/sendmail
hoststat /usr/libexec/sendmail/sendmail
purgestat /usr/libexec/sendmail/sendmail
このようになってしまっていて、/var/log/maillogでこのように怒られます。
gethostbyaddr(IPv6:::1) failed: 1
このため、/etc/mail/mailer.confも下記のように修正する必要があります。/etc/make.confにNO_SENDMAIL= true設定してある場合にはおそらくこのようなことにはならないと思われます。(未検証)
sendmail /var/qmail/bin/sendmail
send-mail /var/qmail/bin/sendmail
mailq /var/qmail/bin/qmail-qread
newaliases /var/qmail/bin/newaliases
hoststat /var/qmail/bin/sendmail
purgestat /var/qmail/bin/sendmail
csvupを実行するとアプリケーションが動かなくなることがあるらしいですが、ざっと確認したところ特に問題はありませんでした。
これでOSも最新の状態に。すっきり♪。
参考サイト
http://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/makeworld.html
http://yang.amp.i.kyoto-u.ac.jp/~yyama/FreeBSD/makeworld/cvsup-j.html
http://cady.moon.st/freebsd/cvsup.html
http://www.f-bell.net/FreeBSD/make_world.html
http://www.infobb.com/pc/bsd-stable.html
http://www.mvs.co.jp/tech/cvsup.html
http://telecom0.eng.niigata-u.ac.jp/index.php?FreeBSD#content_1_1