CI ジョブでは pdflatex コンパイル エラーが発生しますが、対話型シェルでは発生しません

CI ジョブでは pdflatex コンパイル エラーが発生しますが、対話型シェルでは発生しません

Gitlab CI ジョブ中に Ubuntu 22.04 docker コンテナ内でドキュメントをコンパイルしているときにエラーが発生します。

!pdfTeX error: /usr/bin/pdflatex (file tcrm1000): Font tcrm1000 at 600 not found
==> Fatal error occurred, no output PDF file produced!

最も奇妙なのは、コンテナを手動で起動してドキュメントをコンパイルすると、エラーが発生しないことです。問題を解決するには、上記のエラーが発生する原因 (環境変数など) についてさらに詳しく知る必要があります。

編集: 失敗したコンパイルのログをさらに注意深く調べたところ、次のことがわかりました:

kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 tcrm1000
mktexpk: /usr/share/texlive/texmf-dist/web2c/mktexdir ./.texlive2021/texmf-var/fonts/pk/ljfour/jknappen/ec failed.
kpathsea: Appending font creation commands to missfont.log.

代わりに、手動での実行が成功すると次のようになります:

kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 tcrm1000
mktexpk: Running mf-nowin -progname=mf \mode:=ljfour; mag:=1+0/600; nonstopmode; input tcrm1000
This is METAFONT, Version 2.71828182 (TeX Live 2022/dev/Debian) (preloaded base=mf)
. . . 

これが主なエラーである可能性はありますが、なぜ CI でのみ発生するのかはわかりません。

答え1

問題が見つかりました。CI によって生成されたシェルに HOME 環境変数の定義がありません。これにより、texmf.cnf で定義されている TEXMFVAR (私のシステムでは ~/.texlive2021/texmf-var) の ~ の展開が不正になり、mktexdir スクリプトが作成しようとするフォルダーの名前が不正になります。手動コンパイルでは、同じコンテナー内の対話型シェルで実行していたため、これらすべては発生しませんでした。このシェルでは、HOME が適切に定義されていました。

次の行を追加することで修正できました:

- export HOME=/root

pdflatex を呼び出す前の CI スクリプトに追加します。

関連情報