自分が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の設定は別のエントリで