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をダウンロードしてからmodules
・kernel
の順に実行してカーネルとカーネルモジュールを更新し再起動。新しいカーネルでシステムを立ち上げたあとに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日 閲覧)