FreeBSD で RecursiveDependencyError が出たときの対処法

RecursiveDependencyError とは

RecursiveDependencyError は,ports 管理ツールである portupgrade が出力するエラーである.portupgrade は,対象の port が必要とする依存パッケージを再帰的にたどって更新の順序を決める.このとき,依存関係に循環があったり,パッケージデータベースに不整合があったりすると,依存関係の探索が終わらず,このエラーで処理が中断する.

対処の方針は 3 つある.第 1 は,pkg のバイナリパッケージでインストールし,portupgrade を経由しないことである.第 2 は,portupgrade を経由せずに ports から直接ビルドしてインストールすることである.第 3 は,パッケージデータベースと port のオプション設定を修復することである.以下では,例として emacs のかな漢字変換用の tamago(Egg V4)を用いて手順を示す.

インストール(管理者が行う)

方法1: pkg でインストールする

現在の FreeBSD では,バイナリパッケージ管理ツール pkg の使用が標準である.コマンドプロンプトで次のコマンドを管理者権限で実行する.依存関係の解決は pkg が行うため,portupgrade は使用しない.

pkg install tamago

方法2: ports から直接ビルドしてインストールする

ports からビルドする場合には,portupgrade を経由せず,port のディレクトリで直接 make を実行する.コマンドプロンプトで次のコマンドを管理者権限で実行する.

cd /usr/ports/editors/tamago
make install clean

インストールされたことを確認するために,コマンドプロンプトで次のコマンドを実行する.

pkg info tamago
インストール結果の確認

方法3: データベースとオプション設定を修復する

portupgrade を使い続ける場合には,パッケージデータベースの不整合を修復するために,コマンドプロンプトで次のコマンドを管理者権限で実行する.

pkgdb -F

過去のバージョンの port で保存されたオプション設定(/var/db/ports 以下)が残っていることが原因の場合もある.該当する port のオプション設定を消去するために,コマンドプロンプトで次のコマンドを管理者権限で実行する.

cd /usr/ports/editors/tamago
make rmconfig

設定(一般ユーザが行う)

tamago を有効にするために,各ユーザのホームディレクトリの .emacs に次の行を追加する.

(set-language-environment "Japanese")

日本語以外を使用する場合には,"Japanese" の部分を,韓国語では "Korean",中国語では "Chinese-GB" または "Chinese-CNS" に置き換える.