ダメ人間オンライン

あまり信用しないほうがいい技術メモとか備忘録とかその他雑記

さくらのレンタルサーバにHaskell環境を構築

最近Haskellに興味を持ち始めたので、さくらのレンタルサーバーに入れてみました。

環境構築といってもとりあえずGHC(Glasgow Haskell Compiler)を入れるだけです。

ソースダウンロード

さくらのレンタルサーバーはFreeBSDなので、それ用のソースをとってきます。

ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386

複数バージョンのソースが置いてあるのですが、現在のOSバージョンを確認します。

% uname -a
FreeBSD www1152.sakura.ne.jp 7.1-RELEASE-p8 FreeBSD 7.1-RELEASE-p8 #6: Mon Oct  5 17:36:52 JST 2009     root@www200.sakura.ne.jp:/usr/obj/usr/src/sys/SAKURA11S  i386

packages-7-stableを落とすことにします。

% wget ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-7-stable/haskell/ghc-6.10.4_2.tbz

GHCのインストール

pkg_addコマンドを使ってインストールします。

% pkg_add -f -P ~/local ghc-6.10.4_2.tbz

いつものように~/local配下に展開したいので-Pオプションで指定します。

が、いくつかエラーを吐きました。

pkg_add: could not find package gmp-5.0.1  (proceeding anyway)
pkg_add: could not find package perl-5.10.1_2  (proceeding anyway)
pkg_add: not running as root - trying to record install anyway
mkdir: /var/db/pkg/ghc-6.10.4_2: Permission denied
pkg_add: can't record package into '/var/db/pkg/ghc-6.10.4_2', you're on your own

まずgmpが入ってないとのことなので入れてみます。

% wget ftp://ftp.gmplib.org/pub/gmp-5.0.1/gmp-5.0.1.tar.gz
% ./configure --prefix=~/local
% make
% make install

あとLD_LIBRARY_PATH等を指定してない場合は.zshrcなり.bashrcなりに書いてやります。

% export LD_LIBRARY_PATH=~/local/lib
% export LD_RUN_PATH=~/local/lib

これでgmpのインストールはおk。

でも再度GHCのインストールを実行してもエラーは消えませんでした('〜`)

~/local配下にghc関連のファイルが展開されていたのでとりあえず続けることに。

ghcはrootでのインストールを前提としてるらしく、吐き出されたファイル内に直接/usr/local/binとかが書かれているので環境に合わせてsedコマンドで置換してやります。

% sed -i -e 's/\/usr\/local/\/home\/ユーザー名\/local/g' /home/ユーザー名/local/bin/ghc
% sed -i -e 's/\/usr\/local/\/home\/ユーザー名\/local/g' /home/ユーザー名/local/bin/ghci
% sed -i -e 's/\/usr\/local/\/home\/ユーザー名\/local/g' /home/ユーザー名/local/lib/ghc-6.10.4/package.conf
% sed -i -e 's/\/usr\/local/\/home\/ユーザー名\/local/g' /home/ユーザー名/local/bin/ghc-6.10.4
% sed -i -e 's/\/usr\/local/\/home\/ユーザー名\/local/g' /home/ユーザー名/local/bin/ghc-pkg
% sed -i -e 's/\/usr\/local/\/home\/ユーザー名\/local/g' /home/ユーザー名/local/bin/ghc-pkg-6.10.4
% sed -i -e 's/\/usr\/local/\/home\/ユーザー名\/local/g' /home/ユーザー名/local/bin/hsc2hs
% sed -i -e 's/\/usr\/local/\/home\/ユーザー名\/local/g' /home/ユーザー名/local/bin/runghc
% sed -i -e 's/\/usr\/local/\/home\/ユーザー名\/local/g' /home/ユーザー名/local/bin/runhaskell             

この際、ghc-eのように-eのついたファイルが出来ますがスルーでいいです。

これで一通り大丈夫なはずなのでghcをインタラクティブモードで動かしてみます。

% ghci
GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
Prelude> 

おkですね。HelloWorldしてみましょう。

Prelude> putStrLn "Hello World"
Hello World
Prelude> 

今度は.hsファイルに書き込んでmakeして実行してみます。

% vi hello.hs
</pre>
<pre class="code">
main = putStrLn "Hello, World!"
% ghc --make hello.hs
% ./hello
Hello, World!

インストールは問題なくできてるようですね。

インタラクティブモードからファイルを読み込んで実行もできたりするので初めのうちはインタラクティブモードで色々いじってみると楽しいかもしれません。

とりあえずのhaskellの練習にはcodeforcesの過去問とかがいいかもしれませんね。私はそれでちょっとやってみようと思います。