【问题标题】:How can I update zlib to a custom version in Debian如何在 Debian 中将 zlib 更新为自定义版本
【发布时间】:2019-09-24 05:19:39
【问题描述】:

我有一个特殊/非常纤薄的 debian 版本。我想安装一个自定义版本 av zlib,我只想要一个 zlib 版本在我的系统上。假设我更新了 zlib,那么我还需要重新编译和更新(例如)openssh,因为它具有 zlib 作为其依赖项之一。我是否需要手动列出这些依赖项,或者是否有一个工具可以重新编译所有具有反向依赖项的包(就像 bitbake 对 yocto 所做的那样)。上游 debian 开发者如何处理这些情况?

【问题讨论】:

  • 这是一个非常有关编程的问题,更具体的是如何处理软件库的分发以及共享库系统中可能出现的依赖问题。

标签: linux debian package-managers


【解决方案1】:

如果您通过dpkg 将其安装为 .deb 文件,我希望您会没事的,因为这些其他软件包已链接到 zlib 软件包...除非您正在删除其他软件包的项目没有得到就会失败。如果是这种情况,您可能需要Alpine Linux 或其他一些极简发行版。

我有点生疏了,但我相信这个过程是这样的:

$ apt source zlib
$ cd zlib*/debian
[ make your changes in new diffs in the `patches` subdirectory]
$ dpkg-buildpackage -rfakeroot

这会创建一个 .deb 文件,IIRC 也会安装它。如果它也没有安装它,那么您可以使用类似dpkg -i zlib*.deb 的命令来安装它

另请参阅Debian's Building the Package 文档。


如果您只需要特定软件包的更新版本,您可以通过 Debian Testing 或 Unstable 分三步添加它:

1。编辑 /etc/apt/sources.list 或 /etc/apt/sources.list.d/ 中的内容以包含

deb http://deb.debian.org/debian/ testing main non-free contrib

2。编辑 /etc/apt/preferences 或 /etc/apt/preferences.d/ 中的内容以包含

Explanation: Don't use testing by default
Package: *
Pin: release a=testing
Pin-Priority: 1

3a。手动安装:

$ sudo apt install -t testing zlib1g

3b。或者,确保它始终通过使用另一个首选项节进行测试来安装:

Explanation: Use zlib from testing
Package: zlib1g
Pin: release a=testing
Pin-Priority: 500

【讨论】:

  • 如果 openssh 链接到 zlib 1.0.0 并且我删除了该版本的 zlib 并安装了 zlib 1.2.0,即使我使用 dpkg 也不会好。还是我错过了什么?
  • 如果您使用的是提供 zlib 的 dpkg 控制的软件包,我不明白您为什么会遇到问题。一些包列出了其依赖项的特定版本,但我不知道这是为 zilb 完成的(因为 zlib 应该完全向后兼容),所以你的 1.2.0 包应该可以与 dpkg 一起工作。
  • 我附加了我的答案,以演示如何使用不同的存储库升级特定包。目前,Debian Testing 提供 zlib1g 1.2.11
  • 假设我在 zlib 1.2.0(我自己的版本)中引入了一项重大更改,我如何知道我需要重建哪些其他应用程序(例如 openssh)?
  • 这取决于你的“重大改变”。我希望这种事情必须根据具体情况进行。我强烈反对这种策略。考虑使用不同的压缩库(如xz-utils 或zstd),或者更改zlib fork 的名称,使其不会与任何内容冲突。然后根据需要调整您想要使用的项目。
猜你喜欢
  • 2015-11-11
  • 2022-11-24
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 2021-12-03
相关资源
最近更新 更多