NetBSD Advent Calendar 2023 3日目の記事です。今日はNetBSD-currentのインストールを少しだけ楽にする方法を紹介しようと思います。
NetBSD-currentのインストール
昨日の記事ではNetBSD-currentのインストール手順を紹介していました。基本的にはNetBSD-currentの配布物のダウンロードと展開ののち、 /etc
を更新するというシンプルな手順ですが、手動で行おうとすると思いのほか煩雑です。加えて、NetBSD-currentは頻繁(2,3日間隔くらい)にビルドされ、成果物がアップロードされるため、できるだけ楽な手順でNetBSD-currentのインストールを行えるようにしておきたいところです。
スクリプト化して楽をする
楽な手順にするアプローチは単純な話で、同じような手順を流す個所はスクリプト化してしまうというものです。今回のケースだと、NetBSD-currnetの配布物ダウンロードと展開部分をスクリプト化する形になります。
NetBSD-current配布物のダウンロードスクリプト
NetBSD-current配布物のダウンロードスクリプトは以下になります。スクリプト実行時点での最新ビルドを判別して配布物をダウンロードします。
以下のような感じで実行します。この例では12/2にビルドされた成果物をダウンロードしています。
# ./download-current-release.sh
[Sun Dec 3 17:14:58 JST 2023] download directory: 02-Dec-2023_1429
[Sun Dec 3 17:14:58 JST 2023] download kern-GENERIC.tar.xz...
[Sun Dec 3 17:15:09 JST 2023] download base.tar.xz...
[Sun Dec 3 17:16:01 JST 2023] download comp.tar.xz...
[Sun Dec 3 17:17:36 JST 2023] download etc.tar.xz...
[Sun Dec 3 17:17:40 JST 2023] download man.tar.xz...
[Sun Dec 3 17:17:51 JST 2023] download modules.tar.xz...
[Sun Dec 3 17:18:03 JST 2023] download misc.tar.xz...
[Sun Dec 3 17:18:11 JST 2023] download MD5...
NetBSD-current配布物の展開スクリプト
NetBSD-current配布物を展開するスクリプトは以下になります。配布物を含んだディレクトリを指定し、その中にあるファイルを順次展開するという動作になっています。
以下のような感じで実行します。スクリプトで展開されるのはユーザランドの配布物であり、配布物にふくまれるカーネルはあらかじめ手動で展開・カーネルの置き換えと再起動を行っておく必要があります。
# cd 02-Dec-2023_1429
# ls -l
total 152386
-rw-r--r-- 1 root wheel 1223 Dec 3 17:18 MD5
-rw-r--r-- 1 root wheel 49279876 Dec 3 17:16 base.tar.xz
-rw-r--r-- 1 root wheel 75252784 Dec 3 17:17 comp.tar.xz
-rw-r--r-- 1 root wheel 508248 Dec 3 17:17 etc.tar.xz
-rw-r--r-- 1 root wheel 8870808 Dec 3 17:15 kern-GENERIC.tar.xz
-rw-r--r-- 1 root wheel 7849744 Dec 3 17:17 man.tar.xz
-rw-r--r-- 1 root wheel 4150676 Dec 3 17:18 misc.tar.xz
-rw-r--r-- 1 root wheel 9856792 Dec 3 17:18 modules.tar.xz
#
# # 配布物に含まれるカーネルは手動で展開・ファイルコピーしておく。
# tar Jxvf kern-GENERIC.tar.xz
x ./netbsd
# ls -lh netbsd
-rwxr-xr-x 1 root wheel 28M Dec 2 08:56 netbsd
#
# cp /netbsd /netbsd.old
# cp netbsd /netbsd # カーネルの置き換え。
#
# # 置き換えたカーネルに切り替えるため、いったん再起動する。
# shutdown -r now
再起動後に上記のスクリプトを実行します。ユーザランドの配布物の展開・インストールと /etc
のチェック・自動更新が行われます。
# time ./install-current-release.sh -d 02-Dec-2023_1429
[Sun Dec 3 17:39:31 JST 2023] extract base.tar.xz...
[Sun Dec 3 17:39:54 JST 2023] extract comp.tar.xz...
[Sun Dec 3 17:41:00 JST 2023] extract man.tar.xz...
[Sun Dec 3 17:41:08 JST 2023] extract misc.tar.xz...
[Sun Dec 3 17:41:09 JST 2023] extract modules.tar.xz...
[Sun Dec 3 17:41:11 JST 2023] /usr/sbin/postinstall -s etc.tar.xz check
...
[Sun Dec 3 17:41:24 JST 2023] /usr/sbin/postinstall -s etc.tar.xz fix
...
Please execute 'etcupdate' and reboot.
# # /usr/sbin/etcupdate -s ~/etc.tgz
# # shutdown -r now
etcupdate
は対話的に実行する必要があるため、この部分は手動で実行します。 /etc
の更新手順については昨日の記事にて解説しています。
# /usr/sbin/etcupdate -s 02-Dec-2023_1429/etc.tar.xz
/etc
の更新が完了したら再起動し、NetBSD-currentのインストールは完了です。
# shutdown -r now
まとめ
NetBSD-currentのインストールをスクリプトで少しだけ楽にしてみました。 /etc
の更新まではスクリプト化できませんでしたが、NetBSD-currentを頻繁にインストールする際の手間をだいぶ減らすことができました。