从以前的版本安装软件包的“正确”方法

drm*_*elr 12 package-management apt

我正在尝试安装已从我的 Ubuntu 版本 (17.10) 中删除的软件包。具体来说,我正在尝试安装libpng12-dev,它是我尝试安装的另一个程序的依赖项,与此问题所询问的非常相似。

正如那个问题中所讨论的,我可以很容易地手动安装包,但使用包管理器是安装包的首选方式,我同意这一点。

我尝试改编ffmurray 的答案,并将其与help.ubuntu.com上的说明结合起来,得出以下结论

sudo add-apt-repository "deb http://mirrors.kernel.org/ubuntu/pool/main/libp/libpng/ xenial main"
Run Code Online (Sandbox Code Playgroud)

但是,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
Run Code Online (Sandbox Code Playgroud)

跑得无懈可击!


我不确定这作为一个解决方案有多糟糕。我觉得从源代码构建/安装是处理旧包的更强大的方式,但我不确定这是否属实,也不知道如何去做。

现在我有点知道我在看什么,这个关于 PPA 的答案似乎支持这实际上是添加以前版本包的好方法。

如果有更好的方法,我肯定想知道。

use*_*.dz 2

嗯,没有完美的方法,每种情况都有其自身的局限性。就个人而言,首先选择更快、更简单的选择。

  1. 检查上游项目的文档、合并请求、补丁和错误跟踪器,看看是否有人报告并解决了它。然后决定

  2. 查找 PPA(如果有)。

  3. 通过添加旧版本存储库来尝试它的包。按照您在我的回答中提到并解释的类似方法。简单干净的角色回归几乎没有什么规则。

    • 在未投入生产的机器中进行测试(VirtualBox,...)
    • 还添加 *-update 和 *-security 存储库。
    • 记录更改日志(新安装的软件包和删除的软件包)
    • 完成安装后立即删除这些存储库。
    • 请记住,这就像使用旧软件包的 PPA,它可能会导致将来出现未满足的依赖关系。

    预计会出现与默认安装的软件包冲突等问题,并尝试删除一堆软件包。这种情况在:i386多架构包(例如wine. 安装时查看软件包列表,它甚至可以删除桌面并让您使用命令行启动。

  4. 从源安装

  5. 如果您是高级用户,请更新包或重新打包并将其上传到 PPA。

    这里有一个有时有效的技巧:将该包复制到您自己的 PPA 并要求它为您当前的发行版构建它。


ajc*_*jcg 0

这个

sudo add-apt-repository ppa:linuxuprising/libpng12
sudo apt update
sudo apt install libpng12-0 libpng12-dev
Run Code Online (Sandbox Code Playgroud)