Haskell
RaspberryPi
raspbian
stack

Raspberry Pi 3 Model B に Haskell 開発環境を構築する

この文章は Raspberry Pi 上に Haskell 開発環境を構築する際のメモです。内容としては OS のインストールから stack new したプロジェクトをビルド、実行できるところまでの最小構成です。Mac を使用して開発環境を構築していますが、PC が Windows や Linux の場合は該当箇所を読み替えてください。

TL;DR

Mac 上での作業:

$ brew install ddrescue
$ curl -LO https://downloads.raspberrypi.org/raspbian_lite_latest
$ unzip raspbian_lite_latest
$ diskutil list  # SD カードがどのデバイスかを目視確認する(ここでは /dev/disk3 として進める)
$ diskutil unmountDisk /dev/disk3  # このコマンドはコピペしちゃダメ
$ sudo ddrescue 2017-11-29-raspbian-stretch-lite.img /dev/disk3 --force  # このコマンドはコピペしちゃダメ
$ touch /Volumes/boot/ssh  # ssh を有効にする
$ diskutil eject disk3  # このコマンドはコピペしちゃダメ
$ ssh pi@raspberrypi.local -o PreferredAuthentications=password  # Raspbery 起動後、しばらくしてから実行

Raspberry Pi 上での作業:

$ sudo dd if=/dev/zero of=/var/swap.extended bs=1M count=2048
$ sudo mkswap /var/swap.extended
$ sudo chmod 600 /var/swap.extended
$ sudo swapon /var/swap.extended
$ sudo sh -c 'echo "/var/swap.extended swap         swap    defaults          0       0" >> /etc/fstab'
$ sudo apt-get update
$ sudo apt-get -y upgrade
$ sudo apt-get -y install llvm-3.9
$ sudo ln -s /usr/bin/opt-3.9 /usr/bin/opt
$ sudo ln -s /usr/bin/llc-3.9 /usr/bin/llc
$ mkdir -p ~/.local/bin
$ echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.profile
$ source ~/.profile
$ curl -sSL https://get.haskellstack.org/ | sh
$ stack upgrade
$ stack setup

最新の Stack がインストールできました 🎉

補足

2018 年 10 月現在、apt-get でインストールできる stack はバージョンが 1.1.2-7 と古く、AesonException "Error in $.packages.cassava.constraints.flags というエラーが出力されます。curl -sSL https://get.haskellstack.org/ | sh で導入すれば 1.7.1 がインストールされるため、こちらの方法をおすすめします。なお、現段階の Stack の LTS は 12.12 で、対応する GHC は 8.4.3 ですが、ARM 向け GHC は 8.2.2 までしかないので、LTS 11.8 を使用する必要があります。

2018 年 2 月現在、Raspberry Pi は Debian Stretch ベースになり、普通に以下のように Stack が入れられるようになりました。

$ sudo apt-get install haskell-stack

2017 年 4 月 21 日現在、https://get.haskellstack.org のスクリプトでは stack をインストールできません。代わりに以下サイトよりバイナリをダウンロードしてください。

参考サイト