Vine Linux用にghcおよびhaskell-platformのrpmパッケージを作成

Vine Linux用にghcおよびhaskell-platformのrpmパッケージを作成

久しぶりの記事です。

経緯

以前、 ghc-7.6.3およびhaskell-platform-2013.2.0.0をインストールしたという記事を書きました。その後、rpmパッケージを作成して公式レポジトリにアップロードしました。そもそもはHaskellで書かれた pandoc rpmパッケージ化したいという思いで始めたものです。

その時の思い出のような記事です。

パッケージ化

ghc-7.6.3およびhaskell-2013.2.0.0

野良ビルドに成功していることもあり、このバージョンは比較的楽にパッケージ化できました。前回はghcのバイナリパッケージをそのまま使用していましたが、今回はVine Linux上でビルドしたパッケージを作成する必要があります。そのため、まずghc-bootstrapパッケージを作成しました(バイナリパッケージをダウンロードして configure & make するだけのパッケージ)。

ところがghc-7.6.3はgmp4である必要があるため、 Vine6ではこのままで動作しますが、VineSeedでは動作しません(gmp5のため)。そのため、VineSeed用にgmp4を提供するghc-bootstrap-gmpパッケージを作成しました。ここまでくればghc自身とhaskell-platformのビルドは簡単でした。

しかし、思わぬ所で罠が待っていました。

自分自身でビルドして使用している時には問題はなかったのですが、 rpmパッケージとしてレポジトリにアップロードして数日経った頃に『「Provides: libffi.so.6」を外して頂けませんでしょうか?』との依頼がありました(当該Vine Linux MLアーカイブ)。

パッチを教えてもらったものの、パッチを当てただけではビルド時にエラーが出てしまいかなり思考錯誤しました。ただ、1回のビルドに40分位かかるためなかなか先に進みませんでした。ソースコードを確認したりで大変でした(今さらghc-7.6.3をビルドする人はいないでしょうから細かな内容は省略します)。

ビルド時に「libffiを外部ライブラリとして使用する」ように設定ファイルが作成されるはずが何故かされなかったため、外部ライブラリとして使用するように決め打ちしたパッチを作成することでとりあえず乗り切りました。

ghc-7.10.3およびhaskell-7.10.3

とはいうものの、バージョンが古いのが気にかかっていました。自分自身では使用する気がないのですが、 stack というシステムを使用するにはバージョンが新しい方がいいようでした。

以前からこのバージョンのビルドを試みていたのですが、 ghcはビルドできるのに対して、haskell-platformのビルド時に「ghcの”BINDIST”(バイナリパッケージ)が必要」なため先に進んでいませんでした。公式ホームページでghc-7.10.3のバイナリパッケージをダウンロードして指定しても、 glibcのバージョンが合わないためビルドに失敗しました。

このような時に色々調べていくうち、この ページ で”make binary-dist”コマンドを知り、これでVine Linux上でビルドしたバイナリパッケージを作成できるのではないかと思い試したところ正解でした。そこでghcパッケージの作成時に同時にghc-bindistパッケージを作成するようにして、これを使用してhaskell-platformをビルドしました。これでようやくバージョンアップをする事ができました。

感想

Haskellでプログラミングをするつもりは全くないのですが、 pandocをパッケージ化したいという事だけで ghcおよびhaskell-platformをrpmパッケージ化してしまいました。

Vine Linuxでghcおよびhaskell-platformを必要とする方がどれ位いるか分かりません。それでもお役に立てれば幸いです。ただし当分はバージョンアップする予定はありません。

ついでにHaskellで書かれたタイル型ウインドウマネージャである xmonad および関連パッケージをアップロードしました。 以前 はxmonadを「少し使用してみましたが慣れません。」と書きましたが、今はfluxboxからxmonadに移行しつつあります。

xmobar(メニューバー)で新着メール数(数だけ)を表示させる方法が分かったため完全に移行できそうです。余裕のある時に記事にする予定です。

Toshiaki Ara