Edited at

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

More than 3 years have passed since last update.

普通は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


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}"

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


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}*



参考資料