pkgngはpkg_*に変わるFreeBSDの簡単で手軽なバイナリパッケージ管理ツール。

FreeBSDでサードパーティのソフトウェアをインストールする場合、コンパイル済みのpackageか、ソースからコンパイルするportsの2つの手段がある。

このうち、前者を扱うには「pkg_」を接頭辞に持つコマンド群を使いこなす必要があり、Linuxのapt-getなどと比べるとイケてない感は否めなかった。
それでも、FreeBSDには「ベースシステムにないものはportsでインストールしようぜ自分で好きなコンパイルオプションも設定できるしさあ」とか「pkg_*なんて女子供に使わせとけや」という空気があって(感じるのは私だけかもしれないが)、この点にはあまりリソースを割かれていないようだった。

じっさい、後述するように、いまpkgngは公式には使えない状況になっているのだが、あんまり騒がれてなくて、やっぱりみんな興味がないのかなあと感じる。

とはいえ、pkg_*を不便に感じる人はやっぱりいるもので、Baptiste Daroussinという偉い人が作ってくれたのがpkgngである。
前置きが長くなったが、このpkgngがとてもとても便利なので、使ってみた内容をここに記す。

pkgngとは。

wikiFreeBSD Handbookがあるのでそちらを参照。
portmasterやportupgradeの代替ではないことに注意。
portmasterやportupgradeはバイナリパッケージとports双方を扱えるが、pkgngはバイナリパッケージのみ。
代替するのはpkg_*。
9.1-RELEASE以降であればベースシステムにある。

$ uname -r
9.1-RELEASE
$ which pkg
/usr/sbin/pkg

それ以前のシステムであればports/ports-mgmt/pkgにあるが、7.xと8.0では対応していない。

初めてpkgngを使うとインストールされる。

# pkg help install
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.0.2... done
If you are upgrading from the old package format, first run:

# pkg2ng

もし、いくつかバイナリパッケージやportsからインストールしていたなら、pkg_dbの変換が必要でpkg2ngを実行しろ、と出てますな。

もうportsやpkgをインストールしていたら。

root権限でpkg2ngを叩けばよい。

# pkg2ng
Conversion has been successfully finished
Your old packages database has been moved to: /var/db/pkg.bak.

make.confに追加

FreeBSD 10.0より前のシステムであれば、handbookの通りに。

WITH_PKGNG=	yes

To ensure the FreeBSD Ports Collection registers new software with pkgng, and not pkg_install, FreeBSD versions earlier than 10.X require this line in /etc/make.conf

これで準備万端!…ではないのであった。

2012年11月、FreeBSD.orgへ何者かが侵入する事件があり、pkgngの公式サイトもしばらく閉鎖…。
「もう三ヶ月も経つじゃねーか何してやがんだこのxxxx」と言いたくなるが、こればかりはどうにもならない。

と、ここでPC-BSDの皆様が「俺んとこのを使えよ」と言ってくださったそうなので、ありがたく使おう。

(追記:2013/11/7)
公式のpkgngが公開されている。詳しくは以下を。
../../../?p=2357
(追記ここまで)

pkgngの取得先をPC-BSDサイトへ振り向ける

pkg.confを書き換える。
packagesiteはオリジナルのサイトではなく、日本のミラーにすること。
日本のミラーは下記の2つ。いずれも有名どころですな。
もちろん、RELEASEバージョン、アーキテクチャは自分のシステムに合わせること。

ftp://pub.allbsd.org/pub/pcbsd/packages/9.1-RELEASE/i386/
http://ftp.jaist.ac.jp/pub/PC-BSD/packages/9.1-RELEASE/i386/

このあと、PC-BSDミラーからpkgngのデータベースをダウンロードする。

# pkg update -f

Updating repository catalogue
repo.txz                            100% 7201KB   1.4MB/s 861.0KB/s   00:05

PC-BSDサイト向けの設定はこれでおしまい。

使ってみようぜ

使い方はhandbookを。
sudoをインストールするので、まず探してみる。

# pkg search sudo
sudoscript-2.1.2               Audited shells in Perl with sudo(8) and script(1)
sudoku-1.0.2                   Console based Sudoku games
sudosh2-1.0.4                  Second version of the sudo shell
sudo-1.8.6.p5                  Allow others to run commands as root
sudoku_solver-1.20             A Sudoku Solver in C
sudosh-1.8.2_5                 A sudo shell
sshsudo-1.0                    A bash script to run sudo command on multiple remote computers

そしてインストール、しようと思ったら「お前のpkgは古い。まず1.0.8にしろよ」とのお達し。FreeBSDにおいてこれは新鮮である。正直驚いた。

# pkg install sudo
Updating repository catalogue
Repository catalogue is up-to-date, no need to fetch fresh copy
New version of pkg detected; it needs to be installed first.
After this upgrade it is recommended that you do a full upgrade using: 'pkg upgrade'

The following packages will be installed:

Upgrading pkg: 1.0.2 -> 1.0.8

The installation will free 10 MB

1 MB to be downloaded

Proceed with installing packages [y/N]: y
pkg-1.0.8.txz                       100% 1397KB   1.4MB/s 856.9KB/s   00:01
Checking integrity... done
Upgrading pkg from 1.0.2 to 1.0.8... done

pkg upgradeしろよ、と言うので素直に。

# pkg upgrade
Updating repository catalogue
repo.txz                            100% 7201KB   1.8MB/s 231.0KB/s   00:04
Nothing to do

改めてsudoをインストール。

# pkg install sudo
Updating repository catalogue
Repository catalogue is up-to-date, no need to fetch fresh copy
The following packages will be installed:

Installing libiconv: 1.14
Installing gettext: 0.18.1.1
Installing openldap-client: 2.4.33_1
Installing sudo: 1.8.6.p5

The installation will require 22 MB more space

7 MB to be downloaded

Proceed with installing packages [y/N]: y
libiconv-1.14.txz                   100%  595KB 595.4KB/s 595.4KB/s   00:00
gettext-0.18.1.1.txz                100% 4958KB   1.6MB/s 727.7KB/s   00:03
openldap-client-2.4.33_1.txz        100% 1188KB   1.2MB/s   1.2MB/s   00:00
sudo-1.8.6.p5.txz                   100%  609KB 609.2KB/s 609.2KB/s   00:00
Checking integrity... done
Installing libiconv-1.14... done
Installing gettext-0.18.1.1... done
Installing openldap-client-2.4.33_1... done
Installing sudo-1.8.6.p5... done

使ってみて感じたこと

pkgngの第一印象はすごくいい。
検索が出来るだけでかなり違う。
また、ここにはログを上げなかったけれど、インストール済みのパッケージに更新があったら、驚くくらいさっさとやってくれる。
それにpkgngは依存関係を担保してくれてるようなのも安心。

ただ、まだ使い始めたばかりなので、実はいろいろと不便なところがあるのかもしれない。まあ、そこはおいおいと。

(追記)しばらく使った結果はこちらこちら