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 使う場面あるのかなぁ…)

参考文献

github.com

raku.guide

ie.u-ryukyu.ac.jp

github.com