port がアンインストールできない
きっかけは、Ruby 1.9.2p0 のインストール(とアンインストール)。ターゲットマシンは Mac mini と iMac だ。
どちらの Mac でも ports を使ったインストールには問題なかった。ちょっと試したいことがあったため、mini の方から一度アンインストールすることにした。ところが、ここでつまづいた。アンインストールが失敗したのだ(↓)。
[mini] mnbiwa% sudo port uninstall ruby19 [~] ---> Deactivating ruby19 @1.9.2-p0_1+mactk ---> Uninstalling ruby19 @1.9.2-p0_1+mactk Error: port uninstall failed: list element in braces followed by \ "/cdesc-dig" instead of space
同じことを iMac でやってみると、不思議なことにこちらは成功する。Mac mini と iMac になんの違いがあるのか? どちらも、Snow Leopard だし、ports のバージョンも同じ 1.9.1 だ。違いと言えば、iMac は最近使い始めたマシンだということぐらい。
実は、そこに答えが隠れていた。
原因は MacPorts のアップグレードが完全じゃなかったため
あれこれと試すうち、/opt/local/var/macports/receipts に違いがありそうだとわかってきた。というのも、mini ではこのディレクトリにはインストールずみの port の情報が記録されているのだが、iMac ではディレクトリが空なのだ。
このディレクトリを頼りにググってみたところ、答え(↓)を見つけた。
(談話室 - MacPorts-JP にある「1.9.0 リリース時のChangeLog の抄訳」より)
sqlite ベースの registry2.0 コードが統合されました。macports.conf 中の portdbformat 変数を 'sqlite' に設定することで有効になります。既存のフラットな レシートは、充分な権限下にて初回 port(1) が実行された際に変換されます。 オリジナルのコードは sfiera によるもので、r63398 以降 jmr によって修正・統合 されました。#13054 (dependencies from old port versions stick around across upgrades) や #14123 (files whose paths differ only in case are left behind when uninstalling) といった、古いフォーマットで悩まされていた問題の多くは、 新しいフォーマットでは発生しません。
同じ場所に、この抄訳の訳者による注意書きもあった。曰く、selfupdate しただけでは registry 2.0 の恩恵を受けられないため手動で macports.conf を更新すると良い、と。まったく、その通りだった。「たちゃな」さん(ChangeLog の訳者の人)、感謝します。