haskell-platformなしにghcをインストールする（ubuntu）

普通はhaskell-platformを使用すると思うんですが、理由があって最新版のghcを使いたいときなどのために、ghcとcabalをインストールする手順をメモ。
私の環境ではうまくインストールできました。

# ghc-7.8.2 ～ ghc-7.10.1

* ghc-7.8.2 ～ 7.10.1
* Cabal-1.20.0.1 ～ 1.22.3.0
* cabal-install-1.20.0.2 ～ 1.22.4.0
* OS: lubuntu 15.04 64bit

````bash:install_ghc.sh
#!/bin/bash

set -e

# ダウンロードしてきたものを置いておくディレクトリ
SRC_DIR="${HOME}/sources"
# ghcなどをインストールするディレクトリ。
# cabalは.cabalにインストールされることに注意。
DIST_DIR="${HOME}/local"

GHC_VER="7.10.1"
CABAL_VER="1.22.3.0"
CABAL_INS_VER="1.22.4.0"

# GHC_VER="7.8.4"
# CABAL_VER="1.20.0.2"
# CABAL_INS_VER="1.20.0.3"

# GHC_VER="7.8.3"
# CABAL_VER="1.20.0.2"
# CABAL_INS_VER="1.20.0.3"

# GHC_VER="7.8.2"
# CABAL_VER="1.20.0.1"
# CABAL_INS_VER="1.20.0.2"

GHC_DIR="${DIST_DIR}/ghc-${GHC_VER}"
GHC_SRC_DIR="${SRC_DIR}/ghc-${GHC_VER}"
GHC_SRC_TAR="ghc-${GHC_VER}-x86_64-unknown-linux-deb7.tar.bz2"
GHC_URL="https://www.haskell.org/ghc/dist/${GHC_VER}/${GHC_SRC_TAR}"

CABAL_DIR="${HOME}/.cabal"
CABAL_SRC_DIR="${SRC_DIR}/Cabal-${CABAL_VER}"
CABAL_SRC_TAR="Cabal-${CABAL_VER}.tar.gz"
CABAL_URL="https://www.haskell.org/cabal/release/cabal-${CABAL_VER}/${CABAL_SRC_TAR}"

CABAL_INS_SRC_DIR="${SRC_DIR}/cabal-install-${CABAL_INS_VER}"
CABAL_INS_SRC_TAR="cabal-install-${CABAL_INS_VER}.tar.gz"
CABAL_INS_URL="https://www.haskell.org/cabal/release/cabal-install-${CABAL_INS_VER}/${CABAL_INS_SRC_TAR}"

mkdir -p ${SRC_DIR}
mkdir -p ${DIST_DIR}
if test -e "${GHC_DIR}"; then
  rm -rf ${GHC_DIR}
fi
if test -e "${CABAL_DIR}"; then
  rm -rf ${CABAL_DIR}
fi

# 必要なパッケージのインストール

sudo apt-get install -y build-essential libgmp3-dev zlib1g-dev

# ghcのインストール

echo "*** Install ghc-${GHC_VER} ***"

cd "${SRC_DIR}"
if test -e "${GHC_SRC_DIR}"; then
  rm -rf "${GHC_SRC_DIR}"
fi
if test -e "${SRC_DIR}/${GHC_SRC_TAR}"; then
  echo "source file already exist"
else
  wget "${GHC_URL}"
fi
tar -xvf "${GHC_SRC_TAR}"

cd ${GHC_SRC_DIR}
./configure --prefix=${GHC_DIR}
make install

## pathはとりあえず一時的に追加します。それ以降に使う用途には別途お好みの場所に追加してください。
export PATH="${GHC_DIR}/bin:${PATH}"

## versionを確認
ghc --version

# Cabalのインストール

echo "*** Install Cabal-${CABAL_VER} ***"

cd ${SRC_DIR}
if test -e "${CABAL_SRC_DIR}"; then
  rm -rf ${CABAL_SRC_DIR}
fi
if test -e "${CABAL_SRC_TAR}"; then
  echo "source file already exist"
else
  wget "${CABAL_URL}"
fi
tar -xvf "${CABAL_SRC_TAR}"

cd "${CABAL_SRC_DIR}"
runhaskell Setup configure --prefix=${GHC_DIR}
runhaskell Setup build
runhaskell Setup install

# cabal-installのインストール

echo "*** Install cabal-install-${CABAL_INS_VER} ***"

cd ${SRC_DIR}
if test -e "${CABAL_INS_SRC_DIR}"; then
  rm -rf "${CABAL_INS_SRC_DIR}"
fi
if test -e ${CABAL_INS_SRC_TAR}; then
  echo "source file already exist"
else
  wget "${CABAL_INS_URL}" 
fi
tar -xvf "${CABAL_INS_SRC_TAR}"

cd ${CABAL_INS_SRC_DIR}
./bootstrap.sh

## pathはとりあえず一時的に追加します。それ以降に使う用途には別途お好みの場所に追加してください。
export PATH="${HOME}/.cabal/bin:${PATH}"

echo "-------------- install completed"
## versionを確認
ghc --version
cabal --version

## cabalをアップデート。
## sandboxに入れたい場合などはコメントアウトして別途行う。
cabal update
cabal install cabal-install

echo "-------------- update completed"
ghc --version
cabal --version
````

DOWNLOAD_DIRとDIST_DIRを適宜書き換えて使用してください。
root権限が必要な場所にインストールする場合は、単純にいくつかのコマンドにsudoをつけるだけではダメでした。
多分、最初からroot権限でスクリプトを実行すればいけると思います（/root/.cabalにcabalがインストールされてしまいますが）。

以下の二箇所にpathを張ればいいはず。

````
PATH="${GHC_DIR}/bin:${PATH}"
PATH="${HOME}/.cabal/bin:${PATH}"
````

インストールしたものを全て削除したい場合は以下。

````bash:cleanup_ghc.sh
#!/bin/bash

DOWNLOAD_DIR="${PWD}"
DIST_DIR="${HOME}"

GHC_VER="7.10.1"
CABAL_VER="1.22.3.0"
CABAL_INS_VER="1.22.4.0"

# GHC_VER="7.8.4"
# CABAL_VER="1.20.0.2"
# CABAL_INS_VER="1.20.0.3"

# GHC_VER="7.8.3"
# CABAL_VER="1.20.0.2"
# CABAL_INS_VER="1.20.0.3"

# GHC_VER="7.8.2"
# CABAL_VER="1.20.0.1"
# CABAL_INS_VER="1.20.0.2"

GHC_DIR="${DIST_DIR}/ghc-${GHC_VER}"

rm -rf ${HOME}/.cabal
rm -rf ${HOME}/.ghc
rm -rf ${DIST_DIR}/ghc-${GHC_VER}
rm -rf ${DOWNLOAD_DIR}/cabal-install-${CABAL_INS_VER}*
rm -rf ${DOWNLOAD_DIR}/Cabal-${CABAL_VER}*
rm -rf ${DOWNLOAD_DIR}/ghc-${GHC_VER}*
````

# 参考資料

* [Haskell Platform のインストール方法](http://mew.org/~kazu/academic/2013/miyazaki-u/install.html)
* [GHC: Download version 7.8.2](http://www.haskell.org/ghc/download_ghc_7_8_2)
* [GHC: Download version 7.8.2](http://www.haskell.org/ghc/download_ghc_7_8_3)
* [The Haskell Cabal](http://www.haskell.org/cabal/)