在 Singularity 容器中安装 TinyTeX
Installing TinyTeX in a Singularity container
我正在用 RMarkdown 写一篇论文,为了更好的重现性,我想将所有必需的软件容器化在 singularity container. Unfortunately, when I try to install TinyTeX (which is recommended for Rmarkdown and I would prefer over TeXLive to not inflate the container more than needed), it fails with the following error message (the full build log is pasted here):
Can't locate TeXLive/TLConfig.pm in @INC (you may need to install the TeXLive::TLConfig module) (@INC contains: /~/.TinyTeX/texmf-dist/scripts/texlive /~/.TinyTeX/tlpkg /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at ~/.TinyTeX/bin/x86_64-linux/tlmgr line 100.
BEGIN failed--compilation aborted at ~/.TinyTeX/bin/x86_64-linux/tlmgr line 100.
这是构建定义文件,基本上它使用非常精简的 ubuntu 18.04,然后执行 %post 部分来安装软件
BootStrap: library
From: ubuntu:18.04
%post
# Add universe repository
echo "deb http://us.archive.ubuntu.com/ubuntu bionic universe" >> /etc/apt/sources.list
apt -y update
# Install utilites
apt install -y wget
# Install R
apt install -y r-base-core
## Install RMarkdown and TinyTeX
R --slave -e 'install.packages(c("rmarkdown","tinytex")); tinytex::install_tinytex()'
# Clean
apt-get clean
%environment
export LC_ALL="en_US.UTF-8"
%labels
Author DP
我也试过 tinytex::install_tinytex(dir="/opt/tinytex")
但这似乎没有任何改变。有谁知道出了什么问题吗?
一个可能有用的替代方案,如果图像仅用于文档生成,可以将带有 rmarkdown 和 tex(例如 https://hub.docker.com/r/rocker/verse)的 docker 图像转换为奇异图像。
您可以使用 singularity pull docker://rocker/verse
为最新版本执行此操作,或使用 verse:version_number
.
为特定版本执行此操作
该错误消息抱怨您的图像(或者更可能是您的路径)缺少 TeXLive::TLConfig perl 模块。
我的猜测是路径内容在安装后没有与已安装的模块一起重新散列。最简单的解决方案是将其分成两个命令:
R --slave -e 'install.packages(c("rmarkdown","tinytex"))'
R --slave -e 'tinytex::install_tinytex()'
当我在本地尝试时安装成功。
我正在用 RMarkdown 写一篇论文,为了更好的重现性,我想将所有必需的软件容器化在 singularity container. Unfortunately, when I try to install TinyTeX (which is recommended for Rmarkdown and I would prefer over TeXLive to not inflate the container more than needed), it fails with the following error message (the full build log is pasted here):
Can't locate TeXLive/TLConfig.pm in @INC (you may need to install the TeXLive::TLConfig module) (@INC contains: /~/.TinyTeX/texmf-dist/scripts/texlive /~/.TinyTeX/tlpkg /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at ~/.TinyTeX/bin/x86_64-linux/tlmgr line 100.
BEGIN failed--compilation aborted at ~/.TinyTeX/bin/x86_64-linux/tlmgr line 100.
这是构建定义文件,基本上它使用非常精简的 ubuntu 18.04,然后执行 %post 部分来安装软件
BootStrap: library
From: ubuntu:18.04
%post
# Add universe repository
echo "deb http://us.archive.ubuntu.com/ubuntu bionic universe" >> /etc/apt/sources.list
apt -y update
# Install utilites
apt install -y wget
# Install R
apt install -y r-base-core
## Install RMarkdown and TinyTeX
R --slave -e 'install.packages(c("rmarkdown","tinytex")); tinytex::install_tinytex()'
# Clean
apt-get clean
%environment
export LC_ALL="en_US.UTF-8"
%labels
Author DP
我也试过 tinytex::install_tinytex(dir="/opt/tinytex")
但这似乎没有任何改变。有谁知道出了什么问题吗?
一个可能有用的替代方案,如果图像仅用于文档生成,可以将带有 rmarkdown 和 tex(例如 https://hub.docker.com/r/rocker/verse)的 docker 图像转换为奇异图像。
您可以使用 singularity pull docker://rocker/verse
为最新版本执行此操作,或使用 verse:version_number
.
该错误消息抱怨您的图像(或者更可能是您的路径)缺少 TeXLive::TLConfig perl 模块。
我的猜测是路径内容在安装后没有与已安装的模块一起重新散列。最简单的解决方案是将其分成两个命令:
R --slave -e 'install.packages(c("rmarkdown","tinytex"))'
R --slave -e 'tinytex::install_tinytex()'
当我在本地尝试时安装成功。