Singularityにてrakudoのビルドを行う
研究室の同僚に Singularity 教えてって言われた
が、面白そうだしそんなに難しくないかなと思ったので、 そのまま必要としてる環境を作ってみて def ファイル渡すことにした。 (実際、その方が Singularity 使ってる感があったのでそうした)
こちらが rakudo をビルドする def ファイルになります
rakudo-star のイメージを使うのではなく、rakudo のビルドがしたいとのことだった。
というわけでコイツを Singularity build
して使えばいい。
BootStrap: docker From: alpine %post apk add --update --no-cache perl git make alpine-sdk git clone https://github.com/rakudo/rakudo.git cd rakudo perl Configure.pl --gen-moar --gen-nqp --backends=moar make install
image には alpine を使って少しでも軽量にした。(意味があるのかは把握してない) Singularity で環境作るのはかなり簡単で、RTA でもしていたのかって思うくらいには速攻で終わった。 でも実は何度か再走している。
- 最初に
apk add
で--no-cache
オプションをつけてなかったので遅かった(1敗) - make している時に build-essential が無いと怒られた(2敗)
make
だけだと prel6 の REPL を実行できなかった(3敗)
Singularity は優秀なんだけど sif をビルドするときにキャッシュに取らないのが玉に瑕…(そのために multi-stage-build 使うのもなぁ…とは思ってる)
おわりに
Singularity は簡単に環境を作れて、さらに今回のようにその環境をまるごと人にパッと渡せる便利なものなので、みんなも使おう! (ただ、就職したら Singularity 使う場面あるのかなぁ…)