自分がubuntuに作業環境を変えたこともあるのだけれど、最近の新入生のMacBookの容量が125GBとMacTeXをいれるには心もとない状態だったので、GitLabのCI/CDでLaTeXのビルドをしようとしていた。
paperist/alpine-texlive-jaにパッチをあたものを使っていたのだけれど、GitLab CIでLaTeXをビルドしようとする場合、 生成したPDFがroot権限になってしまうという問題がある。
su-execとか使ってどうにかしようとしたのだけど、ちょっとめんどくさいしidをdocker runの時に渡さないと行けないのが解りやすくないので厳しい気持ちになっていた。
学科システムでは別のコンテナランタイムとしてsingularityを使っている。
singularityはなんとuid/gidが実行時ユーザーと同じ状態で実行されたり、自動でホームディレクトリがマウントされるなど、今回のようなlatexのコマンドをコンテナから使う環境としてはぴったし。 ということでDockerfileをもとにsingularityのdefファイルを作った。
defファイル
dockerからの変更点
基本的にDocker時代のものをそのまま利用すれば良いのだけれど、singularityならではの変更点がいくつかある。
singularityの場合
/tmpにファイルを書き出してbuildするのはNG%environmentはビルド時に解決されない- PATHをいじってビルドしようとする場合は問題が生じる
%postの中で明示的にexportすることで解決
他にはepsを含めたいのでgostscriptを、makeしたいのでmakeをインストールするようにしている。 あまり関係ないが、CTANもミラーサーバーに向けているなどの違いがある。
あとはsingularity run latex.sif uplatex hoge.texとかしたいので、%runscriptで引数をexecするように書く。
%runscript exec "$@"
ビルド
singularity build --fakeroot latex.sif latex.def
使い方
sungularity runでも良いのだけれど、sifファイルにはシェバングが埋め込まれていて、自動でsingularity run出来る。
なのでこんな感じで使える。
$latex.sif latexmk $latex.sif make
gitlab ciの設定は別のエントリで