概要
ElmというHaskellライクな純粋関数型AltJSが話題になってたので、手持ちのRock64というSBC(Single Board Computer)にインストールしようとしてあれこれ苦労した。
- npm install だと
Error: No binaries are available for your platform: linux-arm64
と出て異常終了する。 - ソースからビルドしようと思ってHaskellのビルドツールStackを入れようとするが、そちらもエラー終了する
最終的にはStackとは別にCabalをインストールし、ビルド成功した。
環境
ハードウェア
Rock64。ラズパイっぽいやつ。ギガビットイーサやUSB3.0を乗っけており、RAMも4GBある。
さすがにUSB給電(5V0.5A)では厳しいのか、5V3AのACアダプタが必要になる点はx。そのせいでラズパイ用ケースが完全には適合しない(http://denor.daa.jp/rock64をraspberry-piのケースに入れるには )。
また、ラズパイは64bitのARMプロセッサを載せているが、32bit互換モードで動作している。しかし、Rock64は64bitモードで動いている。
このためOSから見たCPUアーキテクチャがラズパイとは異なり、ラズパイで動くソフトウェアが動かないということがざらにある。
Rock64の情報はラズパイに比べてかなり限られているので、自分で苦労するハメになる。。。
rock64@rock64:/usr/local/bin$ uname -m
aarch64
ちなみにラズパイのアーキについては(https://blog.treedown.net/entry/2016/09/06/010000 )。
OS
Rock64の開発元がいろいろなOSのインストールイメージを公開している(https://github.com/pine64dev/PINE64-Installer/blob/master/README.md )。
私は使い慣れたUbuntuにした。とりあえずパフォーマンスとかは今のところ気になっていない。
※余談だが上のキャプチャは2018/10/19に撮ったもの。自分がインストールしたとき(6月ごろ)よりUbuntu18.04のイメージが増えて、16.04のイメージが減っている気がする。。。
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.5 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.5 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
ビルド・インストール手順
GHCとCabalのインストール
ElmはHaskellで実装されているらしく、ビルドにはHaskellのコンパイラであるGHCとビルドツールCabalが必要になる。
私はまずStackでなんとかしようと頑張ったが、Stack自体のインストールに躓いて精神力を消耗した(そしておそらくStackを入れたとしても解決していなかった)。
GHCとCabalは apt-get install
で簡単にインストールできる。
$ sudo apt-get install ghc
$ sudo apt-get install cabal-install
ただし、Ubuntuが最新でない(Bionicではない)ためか、やや古いバージョンが入る(ghc: 7.10.3-7, cabal-install: 1.22.6.0-2)。とりあえずうまく行ったので今回はこれで進める。
ソースのダウンロード
以前はElm-platformというリポジトリをダウンロードしていたと思うのだが、elm/compiler
というリポジトリに移ったらしい。
なのでそちらをクローンする。
$ git clone https://github.com/elm/compiler.git
$ ls compiler/
builder compiler ContributorAgreement.pdf docs elm.cabal installers LICENSE README.md ui upgrade-docs
ビルド
compiler/
直下にelm.cabal
がある。これにビルド設定が書かれているはずなので、compiler/
配下に移動して cabal install
コマンドを実行する。
$ cd compiler
$ cabal install
正確に測っていないので不明だが、1時間以上はかかる。
寝て待とう。
ビルドが完了すると、新たに compiler/dist
というディレクトリが生成されている。
$ ls
builder compiler ContributorAgreement.pdf dist docs elm.cabal installers LICENSE README.md ui upgrade-docs
パスを通す
果たしてこのやり方で本当に正しいのかよくわからないが、実行ファイルのシンボリックリンクをPATHが通ったディレクトリに作成する。環境変数PATHに実行ファイルのパスを通すやり方でもいいと思う。
$ cd /usr/local/bin/
$ sudo ln -s /home/rock64/Elm-Platform/compiler/dist/build/elm/elm elm
実行
$ elm
Hi, thank you for trying out Elm 0.19.0. I hope you like it!
-------------------------------------------------------------------------------
I highly recommend working through <https://guide.elm-lang.org> to get started.
It teaches many important concepts, including how to use `elm` in the terminal.
-------------------------------------------------------------------------------
The most common commands are:
elm repl
Open up an interactive programming session. Type in Elm expressions like
(2 + 2) or (String.length "test") and see if they equal four!
elm init
Start an Elm project. It creates a starter elm.json file and provides a
link explaining what to do from there.
elm reactor
Compile code with a click. It opens a file viewer in your browser, and
when you click on an Elm file, it compiles and you see the result.
There are a bunch of other commands as well though. Here is a full list:
elm repl --help
elm init --help
elm reactor --help
elm make --help
elm install --help
elm bump --help
elm diff --help
elm publish --help
Adding the --help flag gives a bunch of additional details about each one.
Be sure to ask on the Elm slack if you run into trouble! Folks are friendly and
happy to help out. They hang out there because it is fun, so be kind to get the
best results!
キタ━━━━(゚∀゚)━━━━!!
長かった。。。
所感
そもそもCabalでビルドしろと書いているのにStackを入れようとしていたのが愚かだが、そのあたりのツールの関連を理解していなかったのが問題だったような気がする。
普段パッケージマネージャに頼りきりだとこういう時に知識不足が露呈しますね。
精進せねば。
参考リンク
※本文中に書いたものもまとめておく