FreeBSD 8.3 上のports コレクションのメンテナンスで unknown modifier ‘t’ などのエラーが発生する問題ですが、回避策を見つけるよりも根本的な対策を行った方がメンテナンス時間節約になると判断しました。
私が管理している FreeBSD 8.3 のうち、まず、ダウンした場合の影響が最も低いと思われる方のサーバーを freebsd-update コマンドで 8.4 に上げてみることにしました。
基本的な作業内容は、前回、別のサーバーを 7.3 から8.3に上げた時と同じですが、今回はマイナーアップデートなので、パッケージのリビルドは行わない予定です。
バックアップ
まずは、ファイルシステムのバックアップを行いました。手順は、以前のメモのとおりdumpで実行。
バックアップしたファイルは別のホストにftpで転送し、最低限の準備完了。
作業開始
リモートサーバーにログインして、root にて freebsd-update コマンドを発行。
あとはコマンドの指示通りに進めるだけ。Y/Nの質問には全てYと答えること。さもないと作業が終了し、最初からやり直しになります。
# freebsd-update -r 8.4-RELEASE upgrade Looking up update.FreeBSD.org mirrors... 5 mirrors found. Fetching metadata signature for 8.3-RELEASE from update4.freebsd.org... done. Fetching metadata index... done. Fetching 1 metadata files... done. Inspecting system... done. The following components of FreeBSD seem to be installed: kernel/generic src/sys world/base world/dict world/doc world/manpages The following components of FreeBSD do not seem to be installed: src/base src/bin src/cddl src/contrib src/crypto src/etc src/games src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue src/sbin src/secure src/share src/tools src/ubin src/usbin world/catpages world/games world/info world/proflibs Does this look reasonable (y/n)? Fetching metadata signature for 8.4-RELEASE from update4.freebsd.org... done. Fetching metadata index... done. Fetching 1 metadata patches. done. Applying metadata patches... done. Fetching 1 metadata files... 略 ....17890....17900....17910....17920....17930....17940....17950....17960....17970. done. Applying patches... done. Fetching 236 files... done. Attempting to automatically merge changes in files... done. The following file could not be merged automatically: /etc/hosts.allow Press Enter to edit this file in vi and resolve the conflicts manually...
このあとで /etc 以下の編集済みファイル、hosts.allow や group ファイルなど手作業で10ファイル程度マージする作業があります。その後、確認メッセージに y, y と入力して、一発目の freebsd-update コマンドは終了。約1時間45分の作業でした。
このあとで、freebsd-update instal を実行。
# freebsd-update install Installing updates... Kernel updates have been installed. Please reboot and run "/usr/sbin/freebsd-update install" again to finish installing updates.
そして、リブートし、リブート後、再度 freebsd-update install を実行。
OSは無事に、8.4 に更新されました。
FreeBSD host_name 8.4-RELEASE-p9 FreeBSD 8.4-RELEASE-p9 #0
OSのアップグレードを確認できたので、 /var/db/freebsd-update/ ディレクトリ以下に保存されているワークファイルを消去。
真面目に作業するなら、このあとで FreeBSD 8.3 でビルドしたパッケージを 8.4 でビルドし直すという作業をすることになりますが、8.3→8.4 とマイナーアップデートであることから、OS更新作業はここで終了することにし、OSアップグレードのきっかけとなった /usr/ports 以下でのビルド作業の問題が解決されているかどうかを確認することにしました。
更新が必要なパッケージの一つに対して portupgrade コマンドを発行したところ、エラー無く完了。OSを更新して解決という方法は好きではないのですが、調査時間を考えるとやむなし。これで更新しなくちゃいけないホストがあと2台あることになりました。