インストールしたportsのpkgを作るには

こんなことがあったので、やはり曲がりなりにもサーバたるもの、吊るしのpkgをインストールすることはやめようと思ったのだが、やっぱり時間がかかる。
そこでメインマシンのVMFreeBSDでビルドしたものをサーバマシンに移すことにした。

ビルドするときにパッケージも作っておく方法はいくらでもあるが、すでにビルド済みのマシンでパッケージを作るのはあまり経験が無かったのでメモ。

# pkg_create -Rvb php5-5.2.6_2

このように、バージョン名も含めてターゲットを指定すると、カレントディレクトリにpkgが作成されるので、それを移す。
ただしmeta-portは指定出来ない。

なお、Rオプションは、ターゲットのportsビルドに必要な別のportsのパッケージも作る指示。
移動先マシンへのインストールが、ターゲットのportsだけでよいことがはっきりしている場合には、付けなくても可。

以下が実行例。

$ pkg_create -Rvb php5-5.2.6_2
Creating package php5-5.2.6_2
Creating bzip'd tar ball in '/usr/home/flageo/php5-5.2.6_2.tbz'
Creating package expat-2.0.1
Creating bzip'd tar ball in '/usr/home/flageo/expat-2.0.1.tbz'
Creating package perl-5.8.8_1
Creating bzip'd tar ball in '/usr/home/flageo/perl-5.8.8_1.tbz'
Creating package pkg-config-0.23_1
Creating bzip'd tar ball in '/usr/home/flageo/pkg-config-0.23_1.tbz'
Creating package sqlite3-3.6.4
Creating bzip'd tar ball in '/usr/home/flageo/sqlite3-3.6.4.tbz'
Creating package db41-4.1.25_4
Creating bzip'd tar ball in '/usr/home/flageo/db41-4.1.25_4.tbz'
Creating package libiconv-1.11_1
Creating bzip'd tar ball in '/usr/home/flageo/libiconv-1.11_1.tbz'
Creating package apache-2.2.9_5
Creating bzip'd tar ball in '/usr/home/flageo/apache-2.2.9_5.tbz'
Creating package libxml2-2.6.32_1
Creating bzip'd tar ball in '/usr/home/flageo/libxml2-2.6.32_1.tbz'


ところで、php5の場合はphp5-extensionsでインストールしたphp拡張機能も作っておく必要がある。
冒頭で述べたように、pkg_createではphp5-extensionsのようなmeta-portは指定出来ない。
そこでpkg_info -Ix php5として得られる一覧をpkg_createに渡すことを考えるが、pkg_createが取ることのできる引数は一つだけ。
なのでxargsを使う。xargsで-n 1とすれば、引数を一つずつ渡してくれる。
下記が実行例。-Rオプションはここでは外している。

$ pkg_info -Ix php5|cut -d" " -f 1 |xargs -n 1 pkg_create -vb
Creating package php5-5.2.6_2
Creating bzip'd tar ball in '/usr/home/flageo/php5-5.2.6_2.tbz'
Creating package php5-bz2-5.2.6_2
Creating bzip'd tar ball in '/usr/home/flageo/php5-bz2-5.2.6_2.tbz'
(略)
Creating package php5-zlib-5.2.6_2
Creating bzip'd tar ball in '/usr/home/flageo/php5-zlib-5.2.6_2.tbz'


こういうまだるっこしいことをせず、インストールされているportsのすべてをpkgにするには、pkg_infoにEaオプションを与えてpkg_createに渡す。

$ pkg_info -Ea|xargs -n 1 pkg_create -vb
Creating package ORBit2-2.14.14
Creating bzip'd tar ball in '/usr/home/flageo/ORBit2-2.14.14.tbz'
Creating package aalib-1.4.r5_4
Creating bzip'd tar ball in '/usr/home/flageo/aalib-1.4.r5_4.tbz'
Creating package alacarte-0.11.5_1
(略)