我正在尝试安装已从我的 Ubuntu 版本 (17.10) 中删除的软件包。具体来说,我正在尝试安装libpng12-dev,这是我尝试安装的另一个程序的依赖项,与这个问题问的是。
正如在那个问题中所讨论的,我可以很容易地手动安装包,但是使用包管理器是安装包的首选方式,我同意这一点。
我尝试去适应ffmurray 的回答并将其与以下说明结合起来帮助中心,得出的结论是:
sudo add-apt-repository "deb http://mirrors.kernel.org/ubuntu/pool/main/libp/libpng/ xenial main"
但是,apt-get update
出现了这个错误:
存储库“http://mirrors.kernel.org/ubuntu/pool/main/libp/libpng xenial Release”没有发布文件。
我不知道哪里出了问题,或者这样的事情是否可行。
问题
使用 apt(或其他包管理器),是否有合适的方式像这样安装 Ubuntu 以前版本的软件包?我意识到这样做的话兼容性和稳定性会受到质疑,但我还是想采用一种半干净的方式。
请注意,我正在寻找一般答案适用于以前的版本软件包,而不仅仅是 libpng。
写这个问题时的部分解决方案
在libpng12-dev 软件包页面在“libpng12-dev 链接”部分的“下载源包”子部分中,有一个软件包描述链接. 我凭直觉从链接地址中删除了文件名,它允许我浏览档案并弄清楚一些惯例。
事实证明,我过度指定了网站 URL,而我只需要http://site.domain/ubuntu/
URL 的一部分。其余部分通过提供 Ubuntu 版本名称 (xenial)、类别 (main) 和软件包apt-get
(libpng12-dev) 来解决。
因此,我应该这样做:
sudo add-apt-repository "deb http://mirrors.kernel.org/ubuntu/ xenial main"
sudo apt-get update
sudo apt-get install libpng12-dev
运行完美!
我不确定这个解决方案有多老套。我觉得从源代码构建/安装是处理旧软件包的更可靠的方法,但我不确定这是否正确,也不知道该怎么做。
现在我大概知道我在看什么了,关于 PPA 的答案似乎支持这实际上是添加以前发布包的好方法。
如果有更好的方法,我当然想知道。
答案1
没有完美的方法,每种情况都有其局限性。就我个人而言,首先选择更快更简单的选项。
检查上游项目的文档、合并请求、补丁和错误跟踪器,看看是否有人报告并解决了该问题。然后决定
如果有的话,请查找 PPA。
通过添加旧版本存储库来尝试其软件包。按照您在中提到和解释的类似方法我的答案在这里. 为轻松和干净的角色回归制定一些规则。
- 在非生产机器上进行测试(VirtualBox,...)
- 也添加*-update 和 *-security 存储库。
- 记录更改日志(新安装的软件包和删除的软件包)
- 安装完成后立即删除这些存储库。
- 请记住,这就像带有旧包的 PPA,它可能会导致将来无法满足的依赖关系。
预计会出现与默认安装的软件包冲突等问题,并尝试删除一堆软件包。这种情况在
:i386
多架构软件包中经常发生,例如wine
。安装时查看软件包列表,它甚至可以删除桌面并让您使用命令行启动。从源代码安装
如果您是高级用户,请更新软件包或重新打包并将其上传到 PPA。
这里有一个有时有效的技巧:将该包复制到您自己的 PPA 并要求它为您当前的发行版构建它。
答案2
使用这:
sudo add-apt-repository ppa:linuxuprising/libpng12
sudo apt update
sudo apt install libpng12-0 libpng12-dev