[モチベーション]
Haskell のコンパイラのデファクトスタンダードである GHC は、わりと頻繁に新しいバージョンがリリースされている。
開発が活発なのは利用者としてはうれしいことだが、Haskell Platform や 各ディストリビューションのパッケージ管理システムを使って環境を構築していると、各バージョンのGHCを切り替えて使うことが難しく、それが作業の妨げになることがある。
GHCのバイナリパッケージを自分でインストールしてPATHの設定も自分で行っておくと各バージョンの切り替えが可能となる。
自前構築は面倒なイメージがあるが、ポイントを押さえれば意外と簡単なのでここで共有する。
今回は “Debian 8 (Jessie) 編”だ。amd64版が最小構成でインストールされていると仮定する。
Haskell Platform や パッケージ管理システムを使わずに GHC と Cabal をインストールする – CentOS 7 編
[概要]
下記を行うための手順を示す。
1. GHCのバイナリパッケージのインストール
GHCのバイナリパッケージを /usr/local/apps/ にインストールする。
下記のように複数バージョンを保持する前提。
/usr/local/apps/ghc-7.6.3
/usr/local/apps/ghc-7.8.4
/usr/local/apps/ghc-7.10.1
/usr/local/apps/ghc-7.10.2
2. cabalコマンドのビルド
公式サイトから落としてきた cabal コマンドを使用して自前のcabalコマンドをビルドする。
[1. GHCのバイナリパッケージのインストール]
GHCのバイナリパッケージは下記のサイトで公開されている。
https://www.haskell.org/ghc/
Debian 7 (wheezy) でビルドされたものが jessie でも使える。
https://www.haskell.org/ghc/download_ghc_7_10_2#x86_64linux
gcc と make が必要なのでインストールしておく。
libgmp-dev は ghci の実行時に必要となるので一緒に入れておく。
バイナリパッケージをダウンロードする。
tar ボールを解凍して、解凍先に cd する。
$ cd ghc-7.10.2/
インストール先を指定して configure する。
gcc や make がないと、このときエラーになる。
管理者権限で make install
下記のように、PATHを追加する。
PATH=$PATH:/usr/local/apps/ghc-7.10.2/bin
export PATH
PATHの追加を反映。(ログインしなおしてもよい)
ghci を起動して下記のように動作すれば成功。
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help
Prelude> 1 + 2 + 3
6
Prelude> :q
Leaving GHCi.
[2. cabalコマンドのビルド]
パッケージ名としてはCabalのライブラリがcabal、cabalコマンドがcabal-installとなっている。
cabal-installのバイナリビルドは下記のサイトで公開されているが、Linux版は32bit版のみの為、64bit環境で動作させるには、少し工夫が必要になる。
https://www.haskell.org/cabal/download.html
32bitアーキテクチャを dpkg の対象に追加してからaptを更新する。
libc6:i386、zlib1g:i386、libgmp10:i386 は32bit版のcabalの動作に必要なパッケージ。
zlib1g-dev は自前の64bit版のcabalをビルドするときに必要なのでここで入れておく。
$ sudo apt-get update
$ sudo apt-get install libc6:i386 zlib1g:i386 libgmp10:i386 zlib1g-dev
32bitバイナリの動作についての詳細はこちらを参照。
http://askubuntu.com/questions/454253/how-to-run-32-bit-app-in-ubuntu-64-bit
バイナリビルドをダウンロードする。
tar ボールを解凍すると cabal という名前のファイルが生成される。これが32bit版 cabalコマンド。
cabal のパッケージ情報を更新(ダウンロード)する。
自分の cabal コマンドをビルドする。~/.cabal/bin にインストールされる。
下記のように、PATHを追加する。
PATH=$PATH:/usr/local/apps/ghc-7.10.2/bin
PATH=$PATH:~/.cabal/bin
export PATH
PATHの追加を反映。(ログインしなおしてもよい)
自分の cabal が参照されれば成功。
/home/administrator/.cabal/bin/cabal