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" に置き換える.