はじめに
2014/1/20 FreeBSD 10-RELEASEが公開されました。10系の初リリースです。
さくらのVPSで使っているFreeBSD 9.2-RELEASEを10.0-RELEASEへアップグレードしてみましたので、その際に実施した手順を記載します。
FreeBSD 9.2-RELEASEを10.0-RELEASEへアップグレード
公式マニュアルの手順を元に、アップデートを実施します。
ただし、利用しているFreeBSDのパッチレベルによってはportupgrade
コマンドの不具合でアップグレード処理を実行できませんのでパッチを適用する必要があります。
また、FreeBSD 10.0-RELEASEからデフォルトのバイナリパッケージ管理ツールが変更になったことで、メジャーバージョンアップ後のソフトウェアの更新が従来通りのやり方ではうまくいきませんでした。この点については以下に記載しているやり方が正しいのかわかりません。
実行環境
実行環境は以下となります。
プラットフォーム | さくらのVPS 512 |
OS | FreeBSD 9.2-RELEASE-p0 (amd64) |
freebsd-updateの個別パッチの適用
セキュリティパッチの当たっていないFreeBSD 9.2-RELEASE-p0を利用しており、freebsd-update
コマンドに不具合があり、freebsd-update
コマンド実行時に以下のエラーが出てアップデートを実行できませんでした。
The update metadata is correctly signed, but failed an integrity check.
Cowardly refusing to proceed any further.
そのため、上記のErrata Noteの内容を参考にfreebsd-update
コマンドにパッチをあてます。
なお、該当の不具合が修正されているセキュリティパッチの適用されたFreeBSDであれば、この手順は不要です。
作業は全てrootで実施しますので、rootにスイッチします。
$ su -
FreeBSD-EN-13:04のパッチ適用
FreeBSD-EN-13:04
のパッチを適用します。
パッチファイル設置用のディレクトリを作成します。
# mkdir /tmp/FreeBSD-EN-13:04
作業用ディレクトリに移動します。
# cd /tmp/FreeBSD-EN-13:04
パッチファイルをダウンロードします。
# fetch http://security.FreeBSD.org/patches/EN-13:04/freebsd-update.patch
以下の通りにダウロードされます。
fetch: http://security.FreeBSD.org/patches/EN-13:04/freebsd-update.patch: size of remote file is not known
freebsd-update.patch 2754 B 3756 kBps 00m00s
gpg
コマンド(GnuPG)がある場合はPGPシグネチャファイルをダウンロードします。
# fetch http://security.FreeBSD.org/patches/EN-13:04/freebsd-update.patch.asc
以下の通りにダウロードされます。
fetch: http://security.FreeBSD.org/patches/EN-13:04/freebsd-update.patch.asc: size of remote file is not known
freebsd-update.patch.asc 801 B 1245 kBps 00m00s
gpg
コマンド(GnuPG)がある場合はPGP署名を確認します。なければ飛ばしても構いません。
# gpg --verify freebsd-update.patch.asc
/usr/src
ディレクトリに移動してます。
# cd /usr/src
ダウンロードしたパッチファイルを使って修正差分を適用します。
# patch < /tmp/FreeBSD-EN-13:04/freebsd-update.patch
以下の通りにパッチが適用されます。
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Index: usr.sbin/freebsd-update/freebsd-update.sh
|===================================================================
|--- usr.sbin/freebsd-update/freebsd-update.sh
|+++ usr.sbin/freebsd-update/freebsd-update.sh
--------------------------
Patching file usr.sbin/freebsd-update/freebsd-update.sh using Plan A...
Hunk #1 succeeded at 1200.
Hunk #2 succeeded at 2814.
Hunk #3 succeeded at 2852.
Hunk #4 succeeded at 2876.
done
/usr/src/usr.sbin/freebsd-update
ディレクトリに移動します。
# cd /usr/src/usr.sbin/freebsd-update
freebsd-update
コマンドのリビルドを実施します。
# make install -DWITHOUT_MAN
install -o root -g wheel -m 555 freebsd-update.sh /usr/sbin/freebsd-update
FreeBSD-EN-13:05のパッチ適用
FreeBSD-EN-13:05
のパッチを適用します。
パッチファイル設置用のディレクトリを作成します。
# mkdir /tmp/FreeBSD-EN-13:05
作業用ディレクトリに移動してます。
# cd /tmp/FreeBSD-EN-13:05
パッチファイルをダウンロードします。
# fetch http://security.FreeBSD.org/patches/EN-13:05/freebsd-update.patch
以下の通りにダウロードされます。
fetch: http://security.FreeBSD.org/patches/EN-13:05/freebsd-update.patch: size of remote file is not known
freebsd-update.patch 653 B 1521 kBps 00m00s
gpg
コマンド(GunPG)がある場合はPGPシグネチャファイルをダウンロードします。
# fetch http://security.FreeBSD.org/patches/EN-13:05/freebsd-update.patch.asc
以下の通りにダウロードされます。
fetch: http://security.FreeBSD.org/patches/EN-13:05/freebsd-update.patch.asc: size of remote file is not known
freebsd-update.patch.asc 801 B 3007 kBps 00m00s
gpg
コマンド(GunPG)コマンドがある場合はPGP署名を確認します。なければ飛ばしても構いません。
# gpg --verify freebsd-update.patch.asc
/usr/src
ディレクトリに移動します。
# cd /usr/src
ダウンロードしたパッチファイルを使って修正差分を適用します。
# patch < /tmp/FreeBSD-EN-13:05/freebsd-update.patch
以下の通りにパッチが適用されます。
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Index: usr.sbin/freebsd-update/freebsd-update.sh
|===================================================================
|--- usr.sbin/freebsd-update/freebsd-update.sh (revision 257878)
|+++ usr.sbin/freebsd-update/freebsd-update.sh (revision 257879)
--------------------------
Patching file usr.sbin/freebsd-update/freebsd-update.sh using Plan A...
Reversed (or previously applied) patch detected! Assume -R? [y] y
Hunk #1 succeeded at 2884.
done
/usr/src/usr.sbin/freebsd-update
ディレクトリに移動します。
# cd /usr/src/usr.sbin/freebsd-update
freebsd-update
コマンドのリビルドを実施します。
# make install -DWITHOUT_MAN
install -o root -g wheel -m 555 freebsd-update.sh /usr/sbin/freebsd-update
FreeBSDのメジャーバージョンアップ
freebsd-update
コマンドを使ってFreeBSD 10.0-RELEASEへのメジャーバージョンアップを実施します。
更新ファイルのダウンロード
10.0-RELEASEへアップデートするために必要なファイルを取得します。
# /usr/sbin/freebsd-update -r 10.0-RELEASE upgrade
更新対象となるファイルに対して、Does this look reasonable (y/n)?
(変更に問題ないか?)といったことを聞かれるのでy
(yes)と入力します。
Looking up update.FreeBSD.org mirrors... 5 mirrors found.
Fetching metadata signature for 9.2-RELEASE from update4.freebsd.org... done.
Fetching metadata index... done.
Inspecting system... done.
The following components of FreeBSD seem to be installed:
kernel/generic src/src world/base
The following components of FreeBSD do not seem to be installed:
world/doc world/games world/lib32
Does this look reasonable (y/n)? y
Fetching metadata signature for 10.0-RELEASE from update4.freebsd.org... done.
Fetching metadata index... done.
Inspecting system... done.
Fetching files from 9.2-RELEASE for merging... done.
Preparing to download files... done.
Fetching 38043 patches.....10....20....30....40....50....60....70....80....90....100....110....120....130....140....150....160....170....180....190....200....210....220....230....240....250....260..
・・・
・・・
・・・
....36060....36070....36080....36090....36100....36110....36120....36130....36140....36150....36160....36170....36180....36190....36200....36210....36220....36230....36240....36250....36260....36270....36280....36290....36300....36310....36320....36330....36340....36350....36360....36370....36380....36390....36400....36410....36420....36430....36440....36450.. done.
Applying patches... done.
Fetching 9673 files...
Attempting to automatically merge changes in files... done.
変更対象の設定ファイルが表示されます。同様にDoes this look reasonable (y/n)?
(変更に問題ないか?)といったことを聞かれるのでy
(yes)と入力します。
he following changes, which occurred between FreeBSD 9.2-RELEASE and
FreeBSD 10.0-RELEASE have been merged into /etc/group:
--- current version
+++ new version
@@ -1,6 +1,6 @@
-# $FreeBSD: release/9.2.0/etc/group 218046 2011-01-28 22:28:12Z pjd $
+# $FreeBSD: release/10.0.0/etc/group 256366 2013-10-12 06:08:18Z rpaulo $
#
wheel:*:0:root,shimizu,vps,zabbix
daemon:*:1:
kmem:*:2:
sys:*:3:
@@ -16,10 +16,11 @@
sshd:*:22:
smmsp:*:25:
mailnull:*:26:
guest:*:31:
bind:*:53:
+unbound:*:59:
proxy:*:62:
authpf:*:63:
_pflogd:*:64:
_dhcp:*:65:
uucp:*:66:
Does this look reasonable (y/n)? y
・・・
・・・
・・・
The following changes, which occurred between FreeBSD 9.2-RELEASE and
FreeBSD 10.0-RELEASE have been merged into /etc/ssh/sshd_config:
--- current version
+++ new version
@@ -1,7 +1,7 @@
-# $OpenBSD: sshd_config,v 1.89 2013/02/06 00:20:42 dtucker Exp $
-# $FreeBSD: release/9.2.0/crypto/openssh/sshd_config 252339 2013-06-28 09:55:00Z des $
+# $OpenBSD: sshd_config,v 1.90 2013/05/16 04:09:14 dtucker Exp $
+# $FreeBSD: release/10.0.0/crypto/openssh/sshd_config 258343 2013-11-19 11:47:30Z des $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
@@ -31,10 +31,13 @@
# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024
+# Ciphers and keying
+#RekeyLimit default none
+
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
#LogLevel INFO
@@ -114,11 +117,11 @@
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
-#VersionAddendum FreeBSD-20130515
+#VersionAddendum FreeBSD-20131111
# no default banner path
#Banner none
# override default of no subsystems
Does this look reasonable (y/n)? y
The following files are affected by updates, but no changes have
been downloaded because the files have been modified locally:
/.cshrc
/root/.cshrc
10.0-RELEASEへのアップデートに伴って削除されるファイル一覧が表示されます。
The following files will be removed as part of updating to 10.0-RELEASE-p0:
/boot/kernel/atadisk.ko
/boot/kernel/atadisk.ko.symbols
/boot/kernel/atapicam.ko
/boot/kernel/atapicam.ko.symbols
/boot/kernel/atapicd.ko
/boot/kernel/atapicd.ko.symbols
/boot/kernel/atapifd.ko
/boot/kernel/atapifd.ko.symbols
/boot/kernel/atapist.ko
/boot/kernel/atapist.ko.symbols
/boot/kernel/ataraid.ko
/boot/kernel/ataraid.ko.symbols
/boot/kernel/coda.ko
・・・
・・・
・・・
/usr/src/usr.sbin/zic/Makefile.inc
/usr/src/usr.sbin/zic/README
/usr/src/usr.sbin/zic/zdump/Makefile
/usr/src/usr.sbin/zic/zic/Makefile
/usr/src/usr.sbin/zzz/Makefile
/usr/src/usr.sbin/zzz/zzz.8
/usr/src/usr.sbin/zzz/zzz.sh
/var/cache
/var/db/mergemaster.mtree
/var/empty
/var/yp/Makefile.dist
To install the downloaded upgrades, run "/usr/sbin/freebsd-update install".
カーネル/カーネルモジュール更新
更新ファイルはまだ反映されていないので、上記freebsd-update
コマンド実行後の最後のメッセージにある通りに、freebsd-update install
コマンドを実行します。
# /usr/sbin/freebsd-update install
更新が反映(ディスクへ書き込み)されます。
Installing updates...
Kernel updates have been installed. Please reboot and run
"/usr/sbin/freebsd-update install" again to finish installing updates.
上記メッセージに表示されているとおり、OS再起動を実施すると新しいカーネル(10.0-RELEASE)で起動するはずです。
# shutdown -r now
起動後、rootへスイッチします。
# su -
OSバージョンが10.0-RELEASE
となっていることを確認します。
# uname -r
10.0-RELEASE
古いライブラリ/ファイル類の削除
再びfreebsd-update
コマンドを実行します。
# /usr/sbin/freebsd-update install
古い共有ライブラリとオブジェクトファイルを削除されます。
Installing updates...
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 "/usr/sbin/freebsd-update install"
again to finish installing updates.
ZFSファイルシステムとストレージプールの更新
利用可能なZFSファイルシステムとストレージプールのバージョンはFreeBSDのバージョンによって異なります。
FreeBSDのアップグレードによってZFSファイルシステムとストレージプールのバージョンはアップグレードされますが、現在動作しているZFSファイルシステムとストレージプールは古いバージョンのままで動作し続けますので、最新バージョンの機能を利用できるように、現在動作しているZFSファイルシステムとストレージプールに対して以下のコマンドを実行してアップグレードを実行します。
※9.2-RELEASEと10.0-RELEASEでZFSファイルシステムとストレージプールのバージョンに違いはありませんが追加機能等が反映されているかわかりませんので念のため実行しています。
# zpool upgrade -a
# zfs upgrade -a
パッケージの更新
最後にパッケージの更新を実施します。
まず、最新portsを取得し、/usr
以下へ展開します。
既存portsを移動させます。
# mv /usr/ports /usr/ports.bak
最新portsを取得します。
# wget http://ftp.jaist.ac.jp/pub/FreeBSD/ports/ports/ports.tar.gz -P /tmp
/usr
以下へ展開します。
# tar -zxvf /tmp/ports.tar.gz -C /usr/
これまではportmaster
コマンドを実行すればアップデートできてましたが、FreeBSD 10.0-RELEASEでこれを実行してもアップデートされませんでした。
# portmaster -af
FreeBSD 10.0-RELEASEからはデフォルトのパッケージ管理システムが従来のpkg_*
からpkgngへと変更になったためかと思い、pkgngを利用するためには従来のパッケージ管理データベースをpkgng形式のフォーマットへ変換する必要する必要があるとのことでしたので、pkgng形式への変更を試みました。
pkgng
pkgng
はFreeBSD 10.0-RELEASE以降デフォルトとなるパッケージ管理システムです。
pkg
コマンドがインストールされていない場合、pkg
コマンドを実行するとブートストラップユーティリティによって自動でインストール処理が実行されます(FreeBSD 9.1 以降)。
# pkg
pkgng
形式を利用する以前からインストールされているパッケージ/アプリケーションがある場合はpkg2ng
コマンドを実行してフォーマットを変更するようにメッセージが出ます。
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg please wait
Installing pkg-1.2.5... done
If you are upgrading from the old package format, first run:
$ pkg2ng
・・・
pkg2ng
コマンドを実行し、パッケージ管理データベースを新しいフォーマットへ変換します。
# pkg2ng
pkg2ng
コマンド実行後、/var/db/pkg
ディレクトリにpkgngのSQLiteデータベースが作成されます。
# ls -lt /var/db/pkg | head -n 5
total 43802
-rw-r--r-- 1 root wheel 8911872 1月 22 10:42 local.sqlite
drwxr-xr-x 2 root wheel 3 1月 22 01:02 gettext-0.18.3.1
drwxr-xr-x 2 root wheel 3 1月 22 01:02 gmake-3.82_1
drwxr-xr-x 2 root wheel 3 1月 22 01:02 libxml2-2.8.0_3
pkg info
コマンドを実行すると、pkgng形式になったパッケージ一覧が表示されます。
# pkg info
最新のバイナリパッケージへアップデートします。
# pkg upgrade -f
ここで、パッケージの依存関係でconflictが発生したりするので、適宜パッケージを削除/インストールして調整しなければならないと思います。
また、細かいコンパイルオプションが必要なものはportsからインストールし直す必要があります。
依存関係が解決できたら、再度最新のバイナリパッケージへアップデートを試みます。
# pkg upgrade -f
おわりに
以上で、FreeBSD 9.2-RELEASEから10.0-RELEASEへの更新が完了しました。
個人的には新しいパッケージ管理システムpkgngがportsやpkg_*
コマンドより手軽な感じが良いなと思いました。
パッケージソフトウェアのアップデートのやり方が上記のような形で正しいのかはわかっていませんが、問題なく動作しているようです。 10-RELEASEのインストーラからインストール時にファイルシステムでZFSを選択できるようになったのも嬉しいです。
参考
- FreeBSD 10.0-RELEASE登場 | マイナビニュース
- 「FreeBSD 10.0-RELEASE」公開、ClangがデフォルトコンパイラになりHyper-V対応も強化 | SourceForge.JP Magazine
- 間もなく登場! FreeBSD 10.0、IT技術者なら知っておくべき11の新機能 (1) 高速圧縮アルゴリズム、圧縮キャッシュ | マイナビニュース 変更する
- 2013年11月5日 次世代パッケージ管理システムpkg(8),バイナリパッケージ提供開始:FreeBSD Daily Topics|gihyo.jp … 技術評論社
- FreeBSD Daily Topics:2012年8月8日 次世代パッケージ管理システムpkgの使い方:従来のパッケージからの移行方法|gihyo.jp … 技術評論社
- FreeBSDのコレ知ってる?(3):次世代パッケージ管理システム、pkg(8) (1/3) - @IT