![手头上的问题](https://linux22.com/image/142707/%E6%89%8B%E5%A4%B4%E4%B8%8A%E7%9A%84%E9%97%AE%E9%A2%98.png)
在 Debian 9 上我想安装该软件包libicu57
(存储库),但由于某种原因我不能:
$ sudo apt install libicu57
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package libicu57 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'libicu57' has no installation candidate
在我的/etc/apt/sources.list
是这个(除了其他):
deb http://ftp.cvut.cz/debian/ testing main non-free contrib
问题是什么以及如何解决?
答案1
手头上的问题
您希望libicu57
从以下位置安装测试仓库。但是,如果您正在使用x86
或amd64
无法安装此软件包,因为它仅在测试armel
mips
和 时可用mipsel
。
您的sources.list
条目中有 Debian 测试(Buster 或 10)。您报告说您正在使用 Debian 9(Stretch 或 Stable)。你已经创建了弗兰肯Debian。您需要配置sources.list
正确删除此条目并回滚或删除从测试存储库安装的任何软件包以纠正此问题。
完成此操作后,如果libicu57
您需要的是 ARM 变体,您可以考虑交叉编译解决方案或更好的虚拟化。
修复sources.list
第一步是验证您的存储库是否/etc/apt/sources.list
是好的。我建议您使用/etc/apt/sources.list.d/
每个存储库都是它自己的文件,但您可以在一个文件中执行此操作。
#stable.list
deb http://deb.debian.org/debian stable main contrib non-free
deb-src http://deb.debian.org/debian stable main contrib non-free
#updates.list
deb http://deb.debian.org stable-updates main contrib non-free
deb-src http://deb.debian.org stable-updates main contrib non-free
#security.list
deb http://deb.debian.org/debian-security stable/updates main contrib non-free
deb-src http://deb.debian.org/debian-security stable/updates main contrib non-free
你的sources.list应该看起来像这样。您可以更改确切的 http 地址以匹配您所需的镜像。如果您绝对必须有一个测试存储库,请以与上面类似的方式添加条目并使用适当的偏好保持一定程度的理智。应谨慎使用 apt-pinning,因为它可能会导致 FrankenDebian 的创建。
安装软件
现在剩下的就是安装您的软件包,可以使用以下命令完成:
apt-get install libicu57
或者
apt-get install -t stable libicu57 **or** apt-get install libicu57/stable
您还可以选择从源代码安装您想要的软件包,或者从 Debian Packages 站点下载它及其依赖项,然后使用dpkg -i [packageName].deb
这应该安装libicu57
。如果还有其他错误,请发表评论,我们将进一步寻找解决方案。下一部分将介绍如果您绝对需要 ARM 或 MIPS 版本的软件,您可以考虑交叉编译,或使用适当的指令集创建虚拟环境以安全地使用此版本的库。
这是关于 Multiarch 的 Debian Wiki 条目和这是交叉编译的Wiki。您可以按照以下步骤进行适当的配置更改以及dpkg
不进行交叉编译的内容。
但是您不能安装同一软件的多个版本!
因此,如果 ARM 版本需要您已有版本的依赖项和库x86
,则amd64
您无法执行此操作。另一种方法是使用您选择的虚拟化解决方案(使用正确的指令集)创建 Debian for ARM 虚拟机。
键盘虚拟机是一个不错的选择,但您可以使用最适合您的用例的任何解决方案。
结论
请完整阅读本文。事实上,请确保在运行任何命令之前仔细阅读我提供的所有链接。如果您对这篇文章有任何疑问或疑虑,请随时询问我。如果此答案有任何更正或误解,请通知我。我可以根据需要更新帖子。
祝你好运!
答案2
如果问题与某些特定存储库有关,请尝试检查您的 apt 配置:/etc/apt/preferences.d/
它可能具有不允许升级这些特定软件包的固定文件。
当软件包版本的更改可能会导致问题时,它可能会发生在 docker 镜像中......
我希望这能有所帮助。