Ubuntu LTS 版本升级

Ubuntu LTS 版本升级

Ubuntu 16.04 升级到 18.04 过程中,出现了和 miktex 相关的一个错误。升级顺利完成,但是发生了这个错误。导致了一些包并没有更新,以及 apt 的依赖被搞崩了,提示如下

You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies
miktex : Depends: libcurl3 (>= 7.16.2) but it is not installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

这时候使用 apt remove miktex 也是没有用的,提示这个错误

Removing miktex (2.9.6650-1) ...
miktexsetup: /usr/lib/x86_64-linux-gnu/libcurl.so.4: version
`CURL_OPENSSL_3' not found (required by miktexsetup)
dpkg: error processing package miktex (--remove):
installed miktex package pre-removal script subprocess returned error exit status 1
Errors were encountered while processing:
miktex
E: Sub-process /usr/bin/dpkg returned an error code (1)

错误的原因是 Ubuntu 18.04 将 libcurl3 升级成 libcurl4,对应的库也进行了更新,导致依赖 libcurl3 的应用程序例如 miktex 崩坏,进而导致 apt 崩坏,小白用户面对这种情况基本就手足无措了。

以错误关键字搜索,网上很多这样的问题,这个 bug 也算旷日持久,例如这里1的讨论。

搜索到的大部分网页要么没有提供解决方法,要么提供的方法是错误的2,其实问题很简单,既然要依赖 libcurl3,我们安装上 libcurl3 不就可以了?问题在于 Ubuntu 不允许同时安装 libcurl3 和 libcurl4。我们只能手动给 miktex 提供 libcurl3 对应的库,具体步骤如下 (参考链接3)

# download libcurl3
mkdir ~/libcurl3 && cd ~/libcurl3
apt-get download -o=dir::cache=~/libcurl3 libcurl3
ar x libcurl3* data.tar.xz
tar xf data.tar.xz
# backup
cp /usr/lib/x86_64-linux-gnu/libcurl.so.4.5.0 /usr/lib/x86_64-linux-gnu/libcurl.so.4.5.0.back
cp ~/libcurl3/usr/lib/x86_64-linux-gnu/libcurl.so.4.5.0 /usr/lib/x86_64-linux-gnu/

此时应该可以正常卸载 miktex 了,sudo apt remove miktex,如果还是提示错误记得检查下软链接

ls -alh /usr/lib/x86_64-linux-gnu/ | grep curl

卸载之后记得将之前备份的 libcurl4 对应的库文件恢复,最好再检查下软链接是否正确。这时候 apt 应该也正常工作了。

参考链接