pkgngをインターネット接続していないマシンでも使いたい。
そういう場合には、他のマシンでpkgを作って持っていくというのが一番簡単な方法。

自前のPKGSITEを作る方法もあるようだが、軽く調べたところ根こそぎすべてのpkgを作る方法のようだ。
それはきつい。
また、pkgを作ったうえで、自前のrepo.txzを作ってもいいけど、やっぱり手間。
やっぱり必要なものだけ作って持っていくのが良いと思う。

私がよくやるのは以下の方法。

  1. インターネット接続できるマシン上で、仮想マシンに構築する。
  2. 仮想マシンでターゲットとなるマシンと同じ環境を作る。
  3. 仮想マシンで使ったpkgを全部ターゲットマシンに持っていく。

pkgの持ち運びには、pkg createを使う。

pkg createの使い方。

pkg help createでだいたい分かるけれども;
-oオプションで作成場所を選べる。
-aオプションだとそのマシンにインストール済みのpkgを全部作る。
-nオプションを付けるとすでにあるものは作らない。

以下、コマンド例。
ああそうそう、pkg createはroot権限でやること。スーパーユーザでないとアクセスできないファイルもあるので。

# pkg create -o ./ bash
Creating package for bash-4.2.42

# pkg create -n -o ./ bash
bash-4.2.42 already packaged, skipping...

# pkg create -a -o ./pkg
Loading package list...
Creating package for GentiumBasic-110
Creating package for GeoIP-1.4.8_3
Creating package for ORBit2-2.14.19

そして出来上がったpkgをターゲットマシンに持っていく。
ターゲットマシンでpkgをインストールするには、pkg addを使う。pkg installではダメなことに注意。

pkg add

なんにも難しいことはない。
以下のようにすればOK。

pkg add ./xorg-7.5.2.txz

なお、pkg addで追加するpkgはローカルにある必要はなくて、ftp, http, https経由でアクセスできる場所にあればよい。
pkg help addで出てくるように、pkg add ftp://somewhere/some/dir/pkg-nameとかすればよい。

pkg createが遅え。

ところでpkg createは遅い。すごく遅い。
これはファイルをxzで圧縮しているから。
今回の用途では、スピードの方が大事なので、わざわざxzを使ってもらわなくてよい。

pkg createは-fオプションで圧縮方法を決定できる。
txz(デフォルト), tgz, tbzから選ぶ。

tgzとtxzだと、bash程度でもtgz: 1.5秒、txz: 5秒と、時間に結構な差がでる。
もちろんそのぶん、サイズもtgz: 1.5MB、txz: 900KBとxz形式の面目躍如。

# time pkg create -f tgz -o ./ bash
Creating package for bash-4.2.42

real    0m1.526s
user    0m1.415s
sys     0m0.098s
# time pkg create  -o ./ bash
Creating package for bash-4.2.42

real    0m4.985s
user    0m1.070s
sys     0m3.861s

$ du -sh ./bash*
1.5M    ./bash-4.2.42.tgz
896k    ./bash-4.2.42.txz```