サマリ

pkg -jを使うと、ホストからjail内のpkgを操作できる。
しかし、あらかじめjail内にpkgのインストールが必要。

pkg -j

pkgのmanを見ると以下の記載が。

-j <jail name or id>
             pkg will execute in the given <jail name or id>, where name
             matches ``jls name'' and id matches ``jls jid''.  See jail(8) and
             jls(8).

つまり、-jに続けてjail名あるいはjail idを指定すれば、ホストから当該jail内のpkgを操作できる、ということである。
これはさっそく試さねばなるまい。
qjailを使ってexmaple02というjailを作った。

$ sudo qjail create -n em0 -4 192.168.100.241 example02
Successfully created  example02
[vanilla@yaryka ~]$ sudo qjail start example02
Jail successfully started  example02
[vanilla@yaryka ~]$ sudo qjail list

STA JID  NIC IP              Jailname
--- ---- --- --------------- --------------------------------------------------
DR  1    em0 192.168.100.240 example01
DR  2    em0 192.168.100.241 example02

さっそく試してみるが…?

$ sudo pkg -j example02 info
$ sudo pkg -j example02 update
Updating repository catalogue
$ sudo pkg -j example02 install bash
Updating repository catalogue
$

まったく反応がない。

いろいろ試した結果、jailにはpkgがあらかじめインストールされていなければならないのであった。

jailでpkgのインストール

仕方なくjailのコンソールに接続し、pkgをインストール。
現時点ではpkgの公式リポジトリがないので、こちらの通りに進める。

$ sudo qjail console example02
FreeBSD 10.0-BETA1 (GENERIC) #0 r256420: Sun Oct 13 01:43:07 UTC 2013

Welcome to your FreeBSD jail.
example02 /root >sh
# PACKAGESITE="http://96.47.72.120/pkg-test-freebsd:10:x86:64/latest" pkg
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg please wait
Installing pkg-1.1.4_6... done
If you are upgrading from the old package format, first run:
(略)

もう一度ホストからpkgを実行。
今度は問題なく進んだ。

$ sudo pkg -j example02 update
Updating repository catalogue
digests.txz                         100%  955KB 191.0KB/s 214.8KB/s   00:05
packagesite.txz                     100% 5209KB 226.5KB/s  28.6KB/s   00:23
Incremental update completed, 0 packages processed:
0 packages updated, 0 removed and 21607 added.
$

jailの外からpkg -jでpkg操作

ではjailの外からインストールを。

$ sudo pkg -j example02 install bash
Updating repository catalogue
The following 2 packages will be installed:

        Installing gettext: 0.18.3
        Installing bash: 4.2.45

The installation will require 14 MB more space

3 MB to be downloaded

Proceed with installing packages [y/N]: y
gettext-0.18.3.txz                  100% 2086KB 231.8KB/s  85.9KB/s   00:09
bash-4.2.45.txz                     100%  890KB 222.6KB/s 410.2KB/s   00:04
Checking integrity... done
[1/2] Installing gettext-0.18.3... done
[2/2] Installing bash-4.2.45... done
$

-jオプションを付けるだけで、まったく同じように使える。
infoで一覧も得られるし、auditでセキュリティチェックもできる。upgradeもできそうだ。

$ sudo pkg -j example02 audit -F
auditfile.tbz                       100%   90KB  90.3KB/s  90.3KB/s   00:00
0 problem(s) in your installed packages found.
$ sudo pkg -j example02 info
Password:
bash-4.2.45                    The GNU Project's Bourne Again SHell
gettext-0.18.3                 GNU gettext package
pkg-1.1.4_6                    New generation package manager
$ sudo pkg -j example02 upgrade
Updating repository catalogue
Nothing to do
$

こいつは便利でございますな。