cabal のインストール問題を解決する良い方法は何ですか?

cabal のインストール問題を解決する良い方法は何ですか?

私は、Haskell プログラム用の cabal パッケージ マネージャーを使用して、いくつかのリポジトリからクローンしたライブラリや新しいプロジェクトをインストールしました。多くの場合、問題に遭遇し続けます。ほとんどのプロジェクトではインストールが非常に簡単に思えますが、私の場合は必ずしもそうではありません。実行するのが大変難しい場合もあります。実際、インストールできないという理由だけでプロジェクトへの興味を失ってしまうほど難しいものもあります。

ですから、文句を言う代わりに、この状況を改善するために何をすべきかを尋ねたいと思います。最近の問題を例に挙げたいと思います。

私は試してみることに興味がありますGitit プロジェクトさまざまなバージョン管理システムで実行される、将来有望な個人用 wiki です。

そこで私がやったことは次のとおりです:

  • クローン元ギットハブ
  • cabal installプロジェクトのインストール ページで説明されているように、プロジェクト ディレクトリで実行します。

    mika@eka:~/git/gitit$ ls
    BLUETRIP-LICENSE  CHANGES  HCAR-gitit.tex  LICENSE  Network  README.markdown  RELANN-0.6.1  Setup.lhs  TANGOICONS  YUI-LICENSE  data  expireGititCache.hs  gitit.cabal  gitit.hs  plugins
    mika@eka:~/git/gitit$ cabal install
    Resolving dependencies...
    cabal: cannot configure happstack-server-7.0.7. It requires base64-bytestring
    ==1.0.*
    For the dependency on base64-bytestring ==1.0.* there are these packages:
    base64-bytestring-1.0.0.0. However none of them are available.
    base64-bytestring-1.0.0.0 was excluded because gitit-0.10 requires
    base64-bytestring ==0.1.*
    mika@eka:~/git/gitit$ 
    
  • だから今私はこう考えています: まあ、happstack-server を単独でインストールすれば、うまくいくかもしれません:

    mika@eka:~/git/gitit$ cabal install happstack-server
    Resolving dependencies...
    Warning: happstack-server.cabal: Ignoring unknown section type: test-suite
    Configuring happstack-server-7.0.7...
    cabal: At least the following dependencies are missing:
    blaze-html ==0.5.*,
    hslogger >=1.0.2,
    monad-control ==0.3.*,
    network >=2.2.3,
    sendfile >=0.7.1 && <0.8,
    system-filepath >=0.3.1,
    text >=0.10 && <0.12,
    threads >=0.5,
    transformers-base ==0.4.*
    cabal: Error: some packages failed to install:
    happstack-server-7.0.7 failed during the configure step. The exception was:
    ExitFailure 1
    
  • いくつかの依存関係が欠落しているようです。しかし、そもそもこれらの依存関係をインストールすることが cabal を使用する目的ではないのでしょうか?

どうすればいいでしょうか? バグレポートを提出する (どのプロジェクトに?)、依存関係を手動でインストールする、あるいは他の方法を取る? このような問題の原因を説明していただければボーナスポイントです。

答え1

複雑な依存関係を持つプロジェクト(Webサーバーを含むプロジェクトはこのクラスに当てはまる可能性が高い)は、多くの場合、カバール開発cabal の代わりに。前者はすべてをサンドボックスにインストールし、他のインストールに干渉しません。

まず最初に新しいHaskell プラットフォーム、リポジトリをフォークし、最後に cabal-dev を使用してビルドします。もちろん、cabal-dev install gititソースで作業したくない場合は、gitit をインストールすることもできます。

複雑なプロジェクトのグローバルインストールは避けてください。

答え2

これを偶然見つけた人のために、私は、陰謀をはるかに苦痛から解放する 2 つの重要なことを発見しました。

まず、サンドボックスは cabal-install 1.18 以降に組み込まれています (cabal-dev はもう必要ありません)。 でアップグレードしてcabal install cabal-install、すべてに使用してください。私は~/.cabal/sandboxesビルドごとに 1 つのサンドボックスを作成して配置します。次に、完成したバイナリを でリンクし~/.cabal/binますln

2 番目に、ディストリビューション (たとえば Debian) が/tmp実行権限を付与しない場合は、一見無関係に見えるさまざまなエラーが発生します。 などのエラーは、configure: error: cannot run C compiled programsで簡単に修正できますalias cabal="TMPDIR=/somewhere/with/permission cabal"

関連情報