FreeBSD: csup から portsnap へ移行

先日メモに残した FreeBSDの/usr/ports をcsup コマンドでメンテナンスしようとすると、こんな感じで、ports がメンテナンスされない問題、

Server message: Unknown collection "ports-base"
Server message: Unknown collection "ports-accessibility"
Server message: Unknown collection "ports-archivers"
Server message: Unknown collection "ports-astro"
Server message: Unknown collection "ports-audio"

どうやら、cvs による ports のメンテナンスは、2月末に廃止されるようで、その影響かもしれないと考え始めました。
推測の背景は、portsメンテナンスがこんなにも長く停止されるのはおかしいと気になり、何度かキーワードを替えて検索してみた結果、freebsd.org のニュースページにたどり着くことが出来ました。
これによると、2013年2月末にて廃止されるので、portsnap で管理せよ ということのようです。

この情報が、期限前の現時点でサーバーから最新portsを取れない現象と結びつくかどうかは不明ですが、portsnap コマンド(今まで使ったことがない)で更新出来るなら、dropbox-api コマンドをすぐにでも更新したいため、portsnap に素直に移行したいところです。

オンラインマニュアルと FreeBSDハンドブックを参照すると、単純に

# portsnap fetch
# portsnap update

で、いけるように見えます。
で、やってみたが、

lifewithunix # portsnap update
 No snapshot available. Try running
 # portsnap fetch
lifewithunix # portsnap fetch
 Looking up portsnap.FreeBSD.org mirrors... 6 mirrors found.
 Fetching public key from ec2-ap-northeast-1.portsnap.freebsd.org... done.
 Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
 Fetching snapshot metadata... done.
 Fetching snapshot generated at Mon Jan 14 09:12:30 JST 2013:
 c8fa8c81dd81038915ffc5687a3e08d0f5bddf566  100% of 67 MB 466 kBps 00m00s
 Extracting snapshot... done.
 Verifying snapshot integrity... done.
 Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
 Fetching snapshot metadata... done.
 Updating from Mon Jan 14 09:12:30 JST 2013 to Tue Jan 15 01:42:29 JST 2013.
 Fetching 4 metadata patches... done.
 Applying metadata patches... done.
 Fetching 0 metadata files... done.
 Fetching 37 patches.....10....20....30... done.
 Applying patches... done.
 Fetching 7 new ports or files... done.
lifewithunix # portsnap update
 /usr/ports was not created by portsnap.
 You must run 'portsnap extract' before running 'portsnap update'.

という結果になり、初回は、

# portsnap fetch
# portsnap extract
# portsnap update

という手順が必要なようです。 portsnap update に関しては、それまでの工程で最新になっているため、初回は不要みたいです。
さてこれで、/usr/local/ports が更新されているかどうか?

pkg_version -v で、チェックしてみると

~> pkg_version -v | grep -v "="
apache22-2.2.23_3 < needs updating (port has 2.2.23_4)
ca_root_nss-3.14 < needs updating (port has 3.14.1)
docproj-nojadetex-1.17_6 < needs updating (port has 1.17_7)
elm+ME-2.4.125 < needs updating (port has 2.4.126)
ja-freebsd-doc-40385,1 < needs updating (port has 40385_1,1)

とportsが更新されていることが確認出来ました。

あとはports更新作業を深夜にcronに行わせるだけ。man portsnap を見ると、

TIPS
 · If your clock is set to local time, adding the line
0 3 * * * root /usr/sbin/portsnap cron

と自動更新する設定が書いてあったので、素直に crontab に登録しておくことにしました。明日の朝、portsが自動更新されているかな?(この記述は、/etc/crontab に記述する場合)

root 専用の crontab へ追加する場合は、ユーザー名が不要なので、

0 3 * * * /usr/sbin/portsnap cron

だそうです。
更に、ドキュメントをチェックして行くと、cron コマンドは、update を行ってくれないということなので、その後 portsnap update を実行する必要があるようです。手動でupdateを発行するのは面倒なので、それも一緒に書いておきます。
ついでに、どのパッケージがが更新されたのかをレポートしてくれるらしいため、その記述もしておきました。

0 3 * * * /usr/sbin/portsnap cron && /usr/sbin/portsnap update && /usr/local/sbin/portversion -vL=

なんか、とても長い。

コメントを残す