2004年10月16日

FreeBSDのシステムのメンテナンス

OSの更新作業とportsの更新作業の手順をまとめる。cvsup, make, portupgradeなどの手順をまとめる。たまに、これを実行する。

■ OS の更新作業

更新差分をダウンロード
# cvsup -g -L 2 /etc/supfile
このとき、cvsupの実施日時を記録しておくと、変更留意点の確認で便利
# touch /root/cvsup_timestamp

OSの変更留意点を確認
# less /usr/src/UPDATING

(COMMOORE.origは前回更新時に最新のGENERICと同じものとすると)
GENERICにどのような変更ができたかを観察
# cd /usr/src/sys/i386/conf
# diff -u COMMOORE.orig GENERIC
あれば,現在のカーネルコンフィグファイルのバックアップを取り,
パッチを使って最新のものを作る
# mv COMMOORE COMMOORE.20040622
# cp -p GENERIC COMMOORE
# patch < GENERIC2COMMOORE.20040622.patch
次の機会に使うためのパッチを取っておく
(COMMOORE.origは最新のGENERICと同じもの)
# diff -u COMMOORE.orig COMMOORE > GENERIC2COMMOORE.20040906.patch

新しいシステムをコンパイルする
# cd /usr/src
# make buildworld
# make buildkernel

新しいシステムをインストールする
(安全に行うには,シングルユーザモードで行うべき)
# make installkernel
# reboot
# mergemaster -p
# make installworld
# mergemaster
# reboot
私がいつも行う手抜き法は,マルチユーザモードのままで,
(# mergemaster -p :これもよく省く)
# make installkernel
# make installworld
# mergemaster
# shutdown -r now

システムのコンパイルとインストールの処理は時間がかかるので,
次のようなログを取りながらまとめて行うスクリプトを準備して利用する。
# mkdir /root/usr_src_manage
# cat build.sh
#!/bin/sh
((cd /usr/src && make buildworld && make buildkernel) > build.log 2>&1) &&\
(echo "Don't forget to run mergemaster -p before install" | tee -a build.log) &
# cat install.sh
#!/bin/sh
((cd /usr/src && make installkernel && make installworld) > install.log 2>&1) &&\
(echo "Don't forget to run mergemaster before reboot" | tee -a install.log) &

最後に次回比較のため、反映済み分となるcvsupの実施日時も記録しておく
# cp -p /root/cvsup_timestamp /root/cvsup_timestamp.src_done

■ ports の更新作業

更新差分をダウンロード
# cvsup -g -L 2 /etc/supfile

ports の変更留意点を確認
# less /usr/ports/UPDATING

処理時間短縮のため,portsのINDEXファイルをダウンロード
詳細は,UPDATINGの20041115を参照(この項目は2004年12月3日追記)
# cd /usr/ports
# make fetchindex

アップデートの必要なportsを確認する.
データベースの更新と検証.
# portsdb -Uu (このコマンドには長い時間がかかる)
# portversion -v
# portversion -v -L = (バージョンの異なるものだけ表示する)
パッケージを指定して更新する.
# portupgrade -r

入っているパッケージを管理する。
# mkdir /root/ports_manage
# cd /root/ports_manage
入っているパッケージのリストを作っておくと、後々便利。
# portupgrade -an > 20040918.upgrade
# sort 20040918.upgrade > 20040918.upgrade.sort
# diff -wu prev.log.sort current.log.sort

最後に次回比較のため、srcと同様に反映済み分となるcvsupの実施日時も記録しておく
# cp -p /root/cvsup_timestamp /root/cvsup_timestamp.ports_done