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

Haskell環境およびpandocをVine Linux 6.3(64-bit)に導入する

追記(2016.2.21)

Vine Linux 6 およびVineSeedにrpmパッケージをアップロードしました。したがって以下の記事は過去の記録程度の意味となりました。

現時点では

  • ghc-7.10.3(現時点での最新版)
  • haskell-platform-2015.7.10.3(公式のバージョンは7.10.3)
    • alex, cabal-install, happy, hscolour
  • pandoc, pandoc-citeproc, pandoc-crossref

のパッケージをアップロードしています(ここに至るまでの試行錯誤が大変でした)。

経緯

個人的な興味から pandocをインストールした際のメモです。

pandocについてはこの スライド (73ページ以降)で知りました。

また、るびきち様のこのページ にもpandocを使用した例が載っています。

pandocはHaskell言語で書かれているためまずHaskell処理系のインストールから始めました。 Haskell処理系のインストールは こちらのページ を参考にしました。

インストール手順

今回はバージョンは古いですが、

をインストールしました(私の環境では最新版をインストールしようとすると失敗しました)。

ghcのインストール

tar xzf ghc-7.6.3-x86_64-unknown-linux.tar.bz2
cd ghc-7.6.3
./configure
sudo make install

で /usr/local 以下にインストールされます。 ghc-7.6.3では make は行なわず、いきなり sudo make install を行います。

haskell-platformのインストール

まずhaskell-platformのビルドに必要な gmp-devel、zlib-devel、freeglut-devel をインストールしておきます。

sudo apt-get install gmp-devel zlib-devel freeglut-devel

次に

tar xzf haskell-platform-2013.2.0.0.tar.gz
cd haskell-platform-2013.2.0.0

で展開および移動します。

このままではビルド時にエラーが出るため、 script/build.sh の69行目を

# GHC_PACKAGE_PATH="${ORIG_GHC_PACKAGE_PATH}" \

このようにコメントアウトします。

その後

./configure
make
sudo make install

でインストールします。

これでHaskell処理系がインストールされました。

cabalのアップグレード

次にcabal自体をアップグレードします。

システム全体で使用したいため、以下のようにオプションを付けてインストールします。

su
cabal update
cabal install cabal-install --global

これで現時点での最新版(1.22.6.0)が /usr/local 以下にインストールされます。

pandocのインストール

cabal-installと同様にシステム全体で使用したいため

su
cabal install pandoc --global

でインストールします。

以上です。

余談

pandoc vs. org-mode(Emacs)

ただし現時点でpandocを使用する機会はほとんどありません。 Emacsの org-mode で文章を作成し、(lualatexを使用して)直接PDFファイルに変換することが多いです。

xmonad vs. fluxbox

また、タイル型ウィンドウマネージャーの xmonad

su
cabal install xmonad --global
cabal install xmonad-contrib --global
cabal install xmobar --global

のようにしてインストールしてみました。評判はいいので少し使用してみましたが慣れません。個人的には fluxbox が好きなのでメニューなどをカスタマイズして常用しています。