DarwinPorts: port outdated/upgrade

今日、DarwinPorts の port コマンドの man を何気なく見たら、outdated とか upgrade とか見慣れない target が増えていることに気づいた。いつのまにか開発枝の一部が幹に merge されていたみたい。

さっそく port outdated してみると、CVS ツリーより古い port がリストアップされた。ようやく管理システムらしくなってきたぞ。じゃあ次は upgrade だと、port -a upgrade してみると、image モード に移行する前の direct モード時代の port が残っていて、エラー。今回は自動で upgrade というわけにはいかなかった。ひたすら、

$ sudo port -df uninstall PORTNAME
$ sudo port -df install PORTNAME

として、direct モードの port を uninstall して、image モードで入れ直し。モードが混在していたせいか、中には uninstall に失敗するものもあったけれど、個々のファイルはどうせ新しいので上書きされる (-f オプション) だろうと、 /opt/var/db/dports/receipts 内の port の receipt をよそへ移した。これは希望的観測に基づく乱暴な方法なので、実行するなら自己責任で。
全部 image モードになったところで、改めて port -a upgrade を実行。せっかく -a オプションをつけたけど、既にほとんどが最新になってしまい、image モードで outdated なのは PyBlosxom だけになっていた。upgrade は古い port を deactivate して、新しいのを install/activate する。しばらく様子を見て古いのが要らなくなれば、uninstall すればよい。また、upgrade 時に古い方を即 uninstall するなら、-u オプションを使えばよい。新旧 port を手軽に共存させられるのは、なかなか便利だな。

更新の際には、依存 port を更新しない -n オプションを必要に応じて指定して、様子見するのがいいかも。ライブラリはその一例かな。