FreeBSD 13.4 : /usr/ports 下で make package したオブジェクトはどこに?

FreeBSD サーバーで使っている ports コレクションですが、普段はバイナリーパッケージを使っているので、portsのソースからビルドすることはありません。稀に、バイナリーインストールしているパッケージに深刻な脆弱性が見つかり、緊急性を要する場合、先に公開されるソースを /usr/ports 以下で make して、make install で更新することがあります。

また、ports コレクションは必須ではありませんから、複数台のFreeBSDを稼働させている場合、ディスク容量節約のため、必要な時だけ /usr/ports 下でビルドして出来たパッケージをftpで他のホストに転送することもあります。今回、ずいぶんと久しぶりにこのケースに遭遇して大ハマり。

以前、ports 下でビルドして他のサーバーに転送したのは、2012年末。その時も make したファイルがどこに出来上がるのか、探し回りました。2012年に ports 下で make package した時は、/usr/ports/packages 下に出来上がったとメモしていました。

今回は DNS じゃなく、カスタマイズした boinc-client なんですが、make package した後、/usr/ports/packages 下を見ようとしたら packages ディレクトリが無い!一体どこに出来ている?探し回りました。
当てずっぽうに、探し回っても見つからず、ports 用の Makefile のコメントを読む羽目に。

恐らくこの記述じゃない?と思った箇所が以下。

# PKGDIR - A directory containing any package creation files.
# Default: ${MASTERDIR}

じゃあ、MASTERDIR ってどこよ?

どうも、ビルドしたディレクトリ(=パッケージ名)/work/pkg 下らしい。

確認してみたら、拡張子が pkg のファイルが出来ていました。ビルド規則、変わってんじゃん!まあ、10年以上経過しているからね。

これを、ftp でターゲットサーバーにアップロードして、

#pkg add boinc-client

でインストール。
余談ですが、boinc-client を ports 下でビルドする理由は、Linuxエミュレーション機能を組み込むため。バイナリーメンテナンスで入手できるパッケージでは、Linux用プログラムは走らないのですよ。

ということで、ここにメモ。

コメントを残す