雑記帳

ちょっとした文章とかメモ書きとか。

Haskellのパッケージ管理システムCabalでinstallしたものをデリート(in Ubuntu)

Cabalって?

Haskellという関数型言語にはCabalというパッケージ管理システムがあります。
Rubyで言うRubyGemsと同じです。

こいつはパッケージをインストールする際に、依存関係を計算してくれ、インストールの手順の簡略化に役立つのですが、アンインストールは面倒を見てくれないという厄介者でもあります。

Cabalの厄介なところ

cabal installを実行しすぎると依存関係がぐしゃぐしゃになってしまい、まっさらな状態では成功するパッケージのインストールも上手く行かなくなってしまいます。そしてなにより上手く行かない事に対して騒ぐのは隣人に迷惑です。

どうしても上手く行かない時は思い切ってcabal install前に直してしまうのも手です。

ということでやってみましょう。

Cabal installを実行する前の環境に戻すには

ここから先はsudo rootとして操作するので慎重に行なってください。

Ubuntu10.10の場合、
$sudo cabal install PACKAGENAME
とした時、–userオプションを付けるか、デフォルトでは
通常は、
$HOME/.cabal/(lib|bin .. ) -(1)
の中にインストールしたパッケージをインストールします。
–globalオプションを付けた時は
通常は、
/usr/local/(lib|bin .. ) -(2)
にインストールされます。

また、インストールしたパッケージの情報はデフォルトでは、
/var/lib/ghc-6.12.1/package.conf.d -(3)
に記録されます。

なので、この(1)〜(3) をゴミ箱にぽいすればCabal installをしてない状態に戻せます。

どれもsudo rootとしてアクセスしないと権限が得られないので
$sudo nautilus
としてnautilusを起動して削除してください。

これで、
$sudo ghc-pkg list
として、
/$HOME/.ghc/i386-linux-6.12.1/package.conf.d
の項目が消え、通常通りにcabal installが依存関係の問題が出なくなるようになったら成功です。
お疲れ様でした。

余談ですが、
cabal installでインストールするとパッケージが壊れることがあるので、できるだけUbuntuの場合はdebパッケージがある場合それを使うと良いようです。
Synapticパッケージマネージャーを起動して検索すると
libghc6-…
のようなパッケージで提供されています。

  • HGL
  • GLFW
  • GTK
  • OpenAL
  • ALUT
  • Haskore
  • Midi

のような有名?なパッケージはパッケージが提供されています。

新たに登場してきているパッケージはdebパッケージがないことがあるので、その場合はcabal経由でインストールすれば良いでしょう。

追記:Fedora14でも検証してみましたが、Haskellのrpmパッケージは主要なライブラリについては提供されていたので、debパッケージの使えるLinuxと同じスタンスで良いと思います。
cabal経由のライブラリインストールはソースからghcをインストールする猛者では無い限り最終手段と思っていたほうが良いでしょう。
追記:UbuntuにはGentooのportageをPrefixとしてのインストールに成功したのでHackageからパッケージをインストールする必要がある時などはこちらで管理することにしました。インストールもアンインストールも楽ですから。

広告

Haskellのパッケージ管理システムCabalでinstallしたものをデリート(in Ubuntu)」への1件のフィードバック

  1. ピンバック:haskellのweb frameworkであるところのyesodを触ってみた at isnism(いずにすむ)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。