Raspberry Pi 4でHaskellプログラムをビルドしたりDockerを使ったりする
共立プロダクツのRaspberry Pi 4スターターセットを買って試してみた。Micro SDカードにはRaspbian Buster (10.3)がプリインストールされている。
Haskellプログラムをビルドする
Raspberry Pi 4でHaskellを使うことについては以下の記事がある。
上記記事だと普通にstackをインストールできるみたいだが、先日試したら
$ curl -sSL https://get.haskellstack.org/ | sh Detected Linux distribution: raspbian Sorry, currently only 64-bit (x86_64) Linux binary is available.
インストールできなかった(´・ω・`)
ということで、system GHCとcabal-installでビルドする。
$ sudo apt install ghc cabal-install $ cabal update
ghcをインストールするとllvm-6.0-dev
もインストールされるようだ。
Raspbian Busterのレポジトリからインストールできるのはghc-8.4.4とCabal-2.2。
ghc-8.4.4に対応するstackage LTSはlts-12.26(執筆時点の最新LTS)。このLTSのパッケージセットを使うために以下のテクニックを使う。
Haskellプロジェクトの.cabalファイルがあるところで、LTSのconstraintsファイルをダウンロードして設置する。
$ curl 'https://www.stackage.org/lts-12.26/cabal.config' > cabal.config
で、cabal sandboxでビルドする。
$ cabal sandbox init $ cabal install --only-dependencies --disable-tests --disable-benchmarks --disable-documentation $ cabal build
あと、この環境でRTSオプションとして-N
を指定したらエラーになった。どうやらこのGHCではサポートしていないらしい。下記issueのせいだろうか。
Dockerを使う
DockerはRaspbian on Raspberry Pi 4でも普通にインストールできる。下記のインストールスクリプトでインストールする。
また、docker-composeは普通にpipでインストールする。
$ pip install docker-compose
しかし、いざ使ってみたらNo module named ssl_match_hostname
というエラーとNo module named shutil_get_terminal_size
というエラーが出た。これが関係あるんだろうか?
とりあえず、
$ sudo apt install python-backports.ssl-match-hostname python-backports-shutil-get-terminal-size
をインストールしたらエラーが消えてdocker-composeを使えるようになった。
ま、いいか。