- freebsd-update を使うと major version をまたいでバージョンアップができるらしい!
- ezjail なら ezjail-admin update でユーザランドを更新して ports を再コンパイルするだけでいいのかも!?
というわけでやってみました。
参照:
http://www.daemonology.net/blog/2007-11-11-freebsd-major-version-upgrade.html
[FreeBSD] ezjail ホストの freebsd-update
こちらは通常の作業通り。
まずは GENERIC カーネルに戻すために /etc/make.conf の KERNCONF をコメントアウト。
そしていつも通りに
# make buildkernel # make installkernel # reboot
あと作業中邪魔にならないように /etc/rc.conf で各種デーモンを一時的に無効化。
ezjail も止めるために ezjail_enable="YES" をコメントアウトしておきます。
そのあとはおもむろに
# freebsd-update upgrade -r 7.2-RELEASE
と叩くとメタファイルやパッチを落として1時間ほどかかりました。
さらに自動でマージできないファイルをどうするか聞かれたり。
基本的に問題なかったので y にしておいて後から再編集しました。
最後は追加・削除・変更するファイルの一覧を出してそのまま終わります。
何かメッセージが出ると思ってやり直しちゃったよ...
さて、終わったらインストール。
# freebsd-update install Installing updates... Kernel updates have been installed. Please reboot and run "freebsd-update.sh install" again to finish installing updates. # reboot
カーネルだけインストールしましたよ。
再起動してから続きをやりましょう。
# freebsd-update install Installing updates... done. Completing this upgrade requires removing old shared object files. Please rebuild all installed 3rd party software (e.g., programs installed from the ports tree) and then run "freebsd-update.sh install" again to finish installing updates.
古いライブラリを削除したら完了です。その前に ports を更新してね!
ということで、*ruby などが正しく走らないため* 今回は portmaster を使います。
# portmaster -af
再コンパイルが終わったら続きをやります。
# freebsd-update install Installing updates... done. # reboot
これでホストのアップグレードは完了。
作業ファイルが400MBくらいあるので消しておきます。
# rm -fr /var/db/freebsd-update/files
最後にカスタムカーネルに戻します。
supfile のタグを RELENG_7_2 にするのを忘れないように。
# vi standard-supfile # csup standard-supfile # make buildworld # make buildkernel # make installkernel # make instalworld # reboot
これでOK。
[FreeBSD] ezjail のバージョン追従
こっちも freebsd-update を使う方法があるそうですが、
さっきついでに buildworld したのでそれを利用します。
まずはホスト側で下準備。
# ezjail-admin update -i # mergemaster -siva -D /usr/jails/JAILNAME -t /usr/jails/JAILNAME/var/tmp/temproot # mergemaster -sivr -D /usr/jails/JAILNAME -t /usr/jails/JAILNAME/var/tmp/temproot
JAIL マシンの数だけ mergemaster を行います。
# vi /usr/jails/JAILNAME/etc/rc.conf /* デーモンの無効化 */ # /usr/local/etc/rc.d/ezjail.sh forcestart JAILNAME # jls # jexec N su - jail# portmaster -af jail# exit # /usr/local/etc/rc.d/ezjail.sh forcestop JAILNAME # vi /usr/jails/JAILNAME/etc/rc.conf /* デーモンを再び有効化 */ # /usr/local/etc/rc.d/ezjail.sh forcestart JAILNAME
マシンの数だけ portmaster -af を行います。
あとは、ホストの /etc/rc.conf で ezjail を有効にして再起動すれば作業完了。
ここまで丸二日かかった。。。(実際の作業時間は1日程度)