tlmgr:来自 verify_checksum 的意外返回值:-5

tlmgr:来自 verify_checksum 的意外返回值:-5

当我尝试更新 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已经对用户可用,无需更改PATHroot 用户的权限。输出应类似于

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

这个问题的最新表现源于tlcontribtlcontrib存储库已过期。您可以使用以下命令检查是否已启用

$ 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保存。

我希望这有帮助。

相关内容