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用プログラムは走らないのですよ。
ということで、ここにメモ。