syspkg開発メモ
2023年2月10日 初稿
パッケージをビルドする
はじめにbuild.sh
はdistribution
までビルドしておきます。
例:
./build.sh -u -m amd64 \
-D /opt/builds/trunk/amd64/102-dest \
-M /opt/builds/trunk/amd64/102-obj \
-R /opt/builds/trunk/amd64/102-release \
-T /opt/builds/trunk/amd64/102-tools \
-X /usr/xsrc -x -N0 -j6 syspkgs
デフォルトではNetBSDのベースシステムのセット(baseやcomp、etcなど)すべてのパッケージがビルドされます。開発中の場合だとこの設定は時間がかかり煩わしいだけです。そこでビルドするパッケージのセットをSYSPKGSETS
変数から指定することで時間短縮が可能です。
たとえばbaseセットのパッケージのみをビルドする場合、build.sh
の-V
オプションを使ってコマンドラインから変数定義します。
./build.sh -u -m amd64 \
...
-V SYSPKGSETS=base syspkgs
パッケージインストール時にルートディレクトリを変更する
pkg_add
コマンドでパッケージをインストールするとき、なにもオプションを付けずにこのコマンドを実行してしまうと/
以下のファイルやディレクトリが上書きされたり削除される可能性があります。
インストール先のルートディレクトリを/
から変更するにはpkg_add
の
-p
オプションを使います。またシステムデフォルトのパッケージデータベースを汚さないために-K
オプションでsyspkg用のデータベースを別途渡すといいでしょう。
pkg_add -p ./pkgtest -K ./pkgtest/usr/pkg/pkgdb base-sys-root-9.99.96.0.20220429.tgz
一度ビルドしたあとでもregpkgなどへの変更をビルドに反映させる
現在build.sh syspkgs
を実行したあとdistrib/sets
以下のsyspkgビルド用スクリプトを更新し再度パッケージビルドをしてもその変更はパッケージの中身には反映されません。おそらく古いキャッシュかなにかを参照したままなのだと思われます。
build.sh syspkgs
の処理では、Makefileから最終的にdistrib/sets/regpkgset
というスクリプトが実行されパッケージが作成されます。ここで、このスクリプトの引数に-f
を渡してあげるとビルドスクリプトへの変更が反映されるようになります。
distrib/sets/Makefile
では変数REGPKG.force
を参照してこの-f
オプションをつけるか否かを処理しているようです。ただしbuild.sh -V REGPKG.force=-f
のようにしてもエラーになるだけですのでMakefileを直接編集して変えてしまったほうがいっそ楽です。
ここではregpkgset
に-f
オプションを渡すようにし、キャッシュを使わないよう-c
オプションを削除しています。
--- a/distrib/sets/Makefile Tue Feb 07 14:27:59 2023 +0000
+++ b/distrib/sets/Makefile Fri Feb 10 22:28:44 2023 +0900
@@ -286,8 +286,8 @@
.else # MAKEVERBOSE >= 2
REGPKG.verbose?= -v
.endif
-REGPKG.force?= # -f, or empty
-REGPKG.cache?= -c # -c, or empty
+REGPKG.force?= -f # -f, or empty
+REGPKG.cache?= # -c, or empty
REGPKG.update:= ${MKUPDATE:tl:Nno:C/..*/-u/}
SYSPKGSETS?= all
makesyspkgs: .PHONY check_DESTDIR check_RELEASEDIR \