当我尝试更新 TeX Live 时收到错误。为什么会发生这种情况?错误是什么意思?
$ tlmgr update --self --all
/usr/local/texlive/2019/bin/x86_64-linux/tlmgr: unexpected return value from verify_checksum: -5
答案1
如果问题不是由 引起的tlcontrib
,则运行update-tlmgr-latest.sh
可以解决问题。感谢 Norbert Preining 提供的TeX Live 列表中的答案!我在这里记录所需的步骤以供后人参考。
如果您没有,请检索脚本:
wget https://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh
检查您是否可以kpsewhich
从以下位置运行sudo
:
sudo kpsewhich --var-value=SELFAUTOPARENT
如果是,请转到最后一步。如果不是,请检查 TeXLive 路径是否在您的PATH
echo $PATH
如果没有,则添加
PATH="/path/to//texlive/:$PATH"
最后,运行脚本(使用 使其可执行chmod +x
)
sudo env PATH="$PATH" ./update-tlmgr-latest.sh
该env
选项传递给 sudoPATH
已经对用户可用,无需更改PATH
root 用户的权限。输出应类似于
Verifying archive integrity... All good.
Uncompressing TeX Live Manager Updater 100%
./runme.sh: updating in /usr/local/texlive/2019...
./runme.sh: tlmgr version says this is TeX Live 2019,
./runme.sh: and this updater script created: Mon Apr 6 15:37:42 CEST 2020.
./runme.sh: proceeding with tlmgr update.
./runme.sh: updating /usr/local/texlive/2019/bin/x86_64-linux ...
./runme.sh: /opt/texbin/tlmgr including objects: master/tlpkg/tlpobj/texlive.infra.tlpobj master/tlpkg/tlpobj/texlive.infra.x86_64-linux.tlpobj
D:appending to package log file: /usr/local/texlive/2019/texmf-var/web2c/tlmgr.log
D:tlmgr:main: ::tldownload_server hash:: {enabled:1,errorcount:0,initcount:0,initcout:1,ua:LWP::UserAgent=HASH(0x564b37fdb010)}
D:setup_programs: preferring system versions
D:program curl found in path
D:program wget found in path
D:program lz4 not usable from path
D:(unix) trying to set up lz4, default /usr/local/texlive/2019/tlpkg/installer/lz4/lz4.x86_64-linux, arg --version
D: Using shipped /usr/local/texlive/2019/tlpkg/installer/lz4/lz4.x86_64-linux for lz4 (tested).
D:program gzip found in path
D:program xz found in path
./runme.sh: done.
答案2
返回值表示-5
存储库的签名验证失败。目前有一个错误导致tlmgr
无法打印合理的错误消息,但正在处理中,应该很快就会修复:
https://tug.org/pipermail/tex-live/2020-February/044775.html
这个问题的最新表现源于tlcontrib
tlcontrib
存储库已过期。您可以使用以下命令检查是否已启用
$ tlmgr repository list
List of repositories (with tags if set):
http://contrib.texlive.info/current (tlcontrib)
http://mirror.ctan.org/systems/texlive/tlnet (main)
维护者tlcontrib
(Norbert Preining) 已将其 PGP 密钥设置为每年过期,这样如果密钥被泄露,它最终将变得毫无用处。要更新到最新密钥,只需执行您再次安装时执行的密钥导入tlcontrib
:
$ curl -fsSL https://www.preining.info/rsa.asc | tlmgr key add -
答案3
在等待官方修复的同时,解决此问题的最快方法是使用参数禁用下载验证verify-repo
。
例子:
tlmgr install lm-math --verify-repo=none
我可以确认这适用于 Ubuntu 20.04 下的 texlive 2019。
笔记:Ubuntu 20.04 上的默认 texlive 版本是 2019。您应该(手动)升级到 2020,或者确保您的存储库是 2019,而不是 CTAN 默认的 2020。
这里是 2019 年的官方存储库,您可以通过以下方式添加它:
tlmgr option repository http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/2019/tlnet-final
答案4
Alessandro 的回复非常好,但还值得注意的是,建议在 bash 中默认使用(已安装的)TeXLive 目录
cd /usr/local/texlive/2021
在运行wget
调用之前(尽管我发现我必须运行sudo wget
它才能工作)。这会将 shell 文件直接下载到目录中。我发现不这样做然后手动将文件复制到目录中会导致调用sudo kpsewhich
返回一个孤立的/
,这很难解决!
此外,跑步后
PATH="/usr/local/texlive/2021/bin/x86_64-linux/:$PATH"
运行也可能有用,sudo visudo
以便您可以将相同的路径添加到“secure_path”行的前面,然后Ctrl+X
保存。
我希望这有帮助。