来月、
7/16 に FreeBSD 9.3 リリースは予定されており、Extended Supportでリリース後2年と思われるため、FreeBSD9.3をまとうか悩んでいたが、すでに、
FreeBSD9.0 RELEASE は 2013年3月31日 に EoL を迎えている。今回SSLは使用していなかったため、特に問題はなく、様子を見ていたが、ports のバージョンアップがあったのか、既存環境では利用出来なくなっていたことから、FreeBSD9.1へあげることにした。
今回、構成として、virtioの有効及び、さくらの6rd を利用していることから、事前検証及び、アップグレードを行った。virtio を使用しているため、virtio 用 kernel module が入っているため、最悪の場合、diskのmountが出来ないなど、リスクがあり、virtio を無効にして、upgrade し、改めてモジュールを入れるか悩んでいたが、特に考慮せずとも動いたようだ。しかし、6rd に関しては、標準で 6to4 のモジュールを提供されていることから、上書きされ、使用出来なくなるので別途 kernel module を作り直す必要があるので、注意が必要だ。
手順については、
FreeBSD ハンドブック 第18章 FreeBSD のアップデートとアップグレード 18.2.3. メジャーおよびマイナーバージョンのアップグレードを行うに記載が有るとおり進めればよい。念のため、/etc のバックアップをすべて取っておく。途中マージなどがあるとき、うっかり失敗すると、差分などが設定ファイルに記載されてしまい、起動しない場合など有るので注意が必要だ。参考に書いておくと、
FreeBSD 9.2 RELEASEでは、
virtioに標準で対応した。
★ freebsd-update 9.0R -> 9.1R:
# tar cvfz /root/backup-etc.tgz /etc # freebsd-update -r 9.1-RELEASE upgrade
margeなどの確認があるので、確認しながらmargeする。すべて終わると次のようなメッセージがでてきて、プロンプトに戻る。
install the downloaded upgrades, run "/usr/sbin/freebsd-update install".
# freebsd-update install --- Kernel updates have been installed. Please reboot and run "/usr/sbin/freebsd-update install" again to finish installing updates.
# shutdown -r now
起動の確認 (6rdの設定をしている場合、stf0 には、ipv6アドレスの付与はなく、接続出来ません)
# freebsd-update install (20分ぐらいかかる)
次に、virtio及びstf-6rd-kmodの更新を行う。
念のため、バックアップ
# cp -pR /boot/modules /boot/modules.bak # mv /boot/kernel/if_stf.ko /boot/kernel/if_stf.ko.orig
★ virtio インストール:
# cd /usr/ports/emulators/virtio-kmod/ # make clean && make all # make reinstall
===> Building package for virtio-kmod-9.1-0.250249 Creating package /usr/ports/emulators/virtio-kmod/work/pkg/virtio-kmod-9.1-0.250249.tbz Registering depends:. Creating bzip'd tar ball in '/usr/ports/emulators/virtio-kmod/work/pkg/virtio-kmod-9.1-0.250249.tbz' ===> Installing for virtio-kmod-9.1-0.250249 pkg_install EOL is scheduled for 2014-09-01. Please consider migrating to pkgng http://blogs.freebsdish.org/portmgr/2014/02/03/time-to-bid-farewell-to-the-old-pkg_-tools/ To use these modules, add loading lines in /boot/loader.conf: virtio_load="YES" virtio_pci_load="YES" virtio_blk_load="YES" if_vtnet_load="YES" virtio_balloon_load="YES" and edit fstab and interface config in rc.conf: # sed -i.bak -Ee 's|/dev/ada?|/dev/vtbd|' /etc/fstab # echo 'ifconfig_vtnet0_name="em0"' >> /etc/rc.conf
※ virtio binary packages for FreeBSDから手で入れていた場合と、ports から入れていた場合で若干異なります。
私が入れていた古いバージョンでは、vtnet0 が無かったので、そのままem0になっていたが、メッセージにはちゃんと次のように有るので、/etc/rc.conf 次の行を追加しておいた。
# echo 'ifconfig_vtnet0_name="em0"' >> /etc/rc.conf
もちろん、手動で http://people.freebsd.org/~kuriyama/virtio/9.1/virtio-kmod-9.1-0.250249.tbzを入れても構い。
★ stf-6rd-kmod:
こちらは、
6rdによるIPv6接続(FreeBSD編)というドキュメントが公開されているが、東工大の佐藤さんが公開されている
リンク先のパッチは、古く、そのままでは、FreeBSD9.1では使用出来ない。
現在は、ports に入っているので、ports から入れる。
# cd /usr/ports/net/stf-6rd-kmod # make all ---- ===> Patching for stf-6rd-kmod-0.239080 /usr/bin/sed -i.bak -e 's|\.Dd July 23, 2011|.Dd April 27, 2001|' /usr/ports/net/stf-6rd-kmod/work/share/man/man4/stf.4 ===> Applying FreeBSD patches for stf-6rd-kmod-0.239080 Ignoring previously applied (or reversed) patch. 28 out of 28 hunks ignored--saving rejects to sys/net/if_stf.c.rej Ignoring previously applied (or reversed) patch. 7 out of 7 hunks ignored--saving rejects to share/man/man4/stf.4.rej => Patch patch-stf_6rd_20100923-1.diff failed to apply cleanly. *** [do-patch] Error code 1 Stop in /usr/ports/net/stf-6rd-kmod.
make中に失敗するが、rejectされているのは、man なので、そのまま無視。
# make do-build --- cd /usr/ports/net/stf-6rd-kmod/work/sys/modules/if_stf; make DEBUG_FLAGS=-g Warning: Object directory not changed from original /usr/ports/net/stf-6rd-kmod/work/sys/modules/if_stf ld -d -warn-common -r -d -o if_stf.ko.debug if_stf.o :> export_syms awk -f /usr/ports/net/stf-6rd-kmod/work/sys/modules/if_stf/../../conf/kmod_syms.awk if_stf.ko.debug export_syms | xargs -J% objcopy % if_stf.ko.debug objcopy --only-keep-debug if_stf.ko.debug if_stf.ko.symbols objcopy --strip-debug --add-gnu-debuglink=if_stf.ko.symbols if_stf.ko.debug if_stf.ko # cd /usr/ports/net/stf-6rd-kmod/work/sys/modules/if_stf # make install
若しくは
# cd /usr/ports/net/stf-6rd-kmod/work/sys/modules/if_stf # make && make install
タイムスタンプが更新されていれば、OKだ。
# ls -al /boot/kernel/if_stf.ko
後は再起動して問題がないか様子を見ておこう。
★ pkg_install から pkg へパッケージシステムの移行:
お気づきかもしれないが、先ほどのportsからのkernel module のインストールの際、次のようなメッセージが出ている。
pkg_install EOL is scheduled for 2014-09-01. Please consider migrating to pkgng http://blogs.freebsdish.org/portmgr/2014/02/03/time-to-bid-farewell-to-the-old-pkg_-tools/
pkg_install は、 2014-09-01 に EOLを迎えるので、新しい pkgng へ移行せよというメッセージだ。
てことで、さくっと、移行することにする。
詳細は、
はんかくさい日報: FreeBSD 9.1/9.2 における ports/packages 管理に異変という記事があるので、さくっと、変更。詳しくは、おきまりのハンドブック
5.4. pkgng によるバイナリ package の管理を参考に。
すべての工程が完了したら、不要なバックアップファイルを削除して完了だ。