自制 ShareLaTeX 镜像

Undefined443 / 2024-04-24 / 原文

Overleaf 官方的 sharelatex/sharelatex 镜像的 TeX Live 版本更新不及时,导致我们想安装宏包的时候会由于 TeX Live 版本过旧而安装失败。我们可以在官方镜像的基础上更新 TeX Live 的版本打一个自己的镜像。下面是自制镜像的过程。

⚠️: 自制镜像的时间可能会很长

编译镜像

编辑 Dockerfile

新建一个 Dockerfile:

FROM sharelatex/sharelatex:5.0.3

# 删除旧版本
RUN /usr/local/texlive/2023/bin/x86_64-linux/tlmgr uninstall --all --force

# 安装新版本
RUN cd /tmp && \
    wget https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz && \
    zcat < install-tl-unx.tar.gz | tar xf - && \
    cd install-tl-* && \
    perl ./install-tl --no-interaction

# 安装依赖
RUN apt-get update && apt-get install -y \
    inkscape \
    python3-pygments

ENTRYPOINT ["/sbin/my_init"]

如果需要使用镜像源安装,将上面文件中的:

perl ./install-tl --no-interaction

替换为:

# 使用中科大镜像源
perl ./install-tl --no-interaction --location https://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet

编译

docker build --tag xxx/sharelatex:5.0.3 --progress=plain . 2>&1 | tee build.log

xxx 替换为你喜欢的名字,将版本号 5.0.3 替换成你的基础镜像版本号。

修改脚本

编辑 lib/docker-compose.base.yml,在 environment 对象中加入 PATH

environment:
    PATH: /usr/local/texlive/2024/bin/x86_64-linux:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    ...

启动 ShareLaTeX

ShareLaTeX 的启动脚本检测环境变量 OVERLEAF_IMAGE_NAME 来确定要使用的 ShareLaTeX 镜像。因此以后启动 ShareLaTeX 时需要将 OVERLEAF_IMAGE_NAME 设为你编译的镜像:

OVERLEAF_IMAGE_NAME=xxx/sharelatex bin/start