sysupgradeを使いsets単位でバイナリアップデートをする

NetBSDのユーザランドは最低限必要なバイナリ(base)や設定ファイル(etc)、コンパイラ(comp)、マニュアル(man)……といった分類がされています。ビルド済みのバイナリはこれらの分類にしたがってtarで圧縮され配布されます。

ソースコードをビルドするよりもビルド済みのバイナリを持ってきたほうがアップデートに費やす時間を短縮できます。カーネルを入れ替え、ダウンロードしてきたtarballを/へ展開すればいいだけなのですが、こういった取り返しがきかないような操作はなるべくツールを使って済ませたいものです。

pkgsrcではsysutils/sysupgradeパッケージが提供されています。これはtarballのダウンロードから/への展開、必要なくなったファイルの削除などができるツールです[www.netbsd.org][wiki.netbsd.org2013]。

ここではユーザがNetBSD-currentを追跡していて、システムをFTPサーバにある最新のビルドへアップデートするものとします。


sysupgradeをインストールする

pkgsrcからsysutils/sysupgradeパッケージをインストールしてください。

cd pkgsrc/sysutils/sysupgrade
make install clean clean-depends

sysupgrade.confを編集する

/usr/pkg/etc/sysupgrade.confを編集します。

RELEASEDIR="https://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/latest/$(uname -m)"
SETS="base comp etc games misc text man modules rescue xcomp xfont xserver xbase xetc"
ARCHIVE_EXTENSION=tar.xz

RELEASEDIRには"binary/sets"を末尾に含めないかたちで指定します。SETSにはアップデート対象のtarballをすべて明示しなければなりません。AUTOと指定すると、/etc/mtree/set.*に該当するすべてのtarballをダウンロードして展開してくれますが「debugとgamesは含めなくていい」ような場合はこのように書く必要があります。上の例ではdebugとxdebugを外してあります。ARCHIVE_EXTENSIONはtarball取得先をWebブラウザから確認し、どの圧縮形式で配布されているか把握してから値を決めましょう。

ほか、KERNELをAUTOにしておくとGENERICが自動的に選択されます。カーネルコンフィグを設定しなければならない場合は、カーネルの入れ替えのみ手動でおこないましょう。

アップデートする

root権限でsysupgrade autoを実行するとアップデートが始まります。しかし、この操作はカーネルとユーザランドの更新を同時におこなうことから、再起動するまで新しいバージョンのバイナリを古いカーネルで動かすことになり不具合が発生する可能性もあります[www.uconst.org2014]。

実際にはautoを使わず、fetchでtarballをダウンロードしてからmoduleskernelの順に実行してカーネルとカーネルモジュールを更新し再起動。新しいカーネルでシステムを立ち上げたあとにsetsでユーザランド全体を更新するほうがより安全です。古いカーネルは/onetbsdとしてバックアップされます。もし新しいカーネルで不具合があればonetbsdでブートしシステムを復元しましょう。

sysupgrade fetch
sysupgrade modules
sysupgrade kernel
reboot
...
sysupgrade sets

最後にetcupdate/etcの更新をおこない、postinstallから不要なファイルやライブラリの削除をします。cleanでアップデートに使ったキャッシュディレクトリを削除できます。

etcupdateは他の操作と異なり対話的な操作を求められます。ほとんどがRCS IDのマージでしょうから、メジャーアップデートでなければこの操作は省略して構いません。

sysupgrade etcupdate
sysupgrade postinstall
sysupgrade clean

その他

今回はFTPサーバからtarballを取得しましたが、sysupgrade.confでコメントアウトされている設定にあるようにSSHも使えます。手元のマシンでビルドしたtarballを他のPCやVMのアップデートで使いたいときに便利です。

参考文献

[www.netbsd.org]
Chapter 33. Updating an existing system from sources, https://www.netbsd.org/docs/guide/en/chap-updating.html(2020年3月28日 閲覧)
[wiki.netbsd.org2013]
upgrading, https://wiki.netbsd.org/guide/upgrading/, 最終更新日 2013年3月21日(2020年3月29日 閲覧)
[www.uconst.org2014]
sysupgrade, https://www.uconst.org/blog/archives/414, 2014(2020年3月28日 閲覧)