在相当旧的 Debian 上安装较新版本的 mutt

raj*_*raj 3 compiling debian mutt rpmbuild

我有一台装有 Debian 7 的机器(是的,我知道这个系统很旧,但现在我无法升级到较新的版本)。这个版本的存储库中有 mutt 版本 1.5.21,但我希望 mutt 至少为 2.0.7,因为我很快就需要此版本的 mutt 中引入的 OAuth2 支持(Gmail 正在撤销仅密码登录) IMAP)。

我假设 Debian 7 没有 mutt >= 2.0.7 的预构建向后移植包(至少我还没有找到任何 - 如果存在,请指出)。所以我必须从源代码编译。但我想保留上游源代码中特定于 Debian 的更改。我可以只获取为较新的 Debian 版本准备的源 RPM 并在我的系统上编译它吗?还是这不起作用?

Riz*_*zer 8

从源代码构建 deb 包相对容易(请注意,您需要 DEB 源而不是 RPM),但需要小心库依赖性。新的 mutt 可能需要旧 Debian 安装所不可用的库版本。

从https://tracker.debian.org/pkg/mutt的包页面检查包要求。请注意版本控制的链接。“box”符号链接控制文件,其中列出了构建依赖项。

最新版本2.2.4-1需要

Build-Depends: debhelper-compat (= 12),
 docbook-xml,
 docbook-xsl,
 gawk,
 gettext,
 libgnutls28-dev,
 libgpgme11-dev,
 libidn2-dev,
 libkrb5-dev,
 libncurses5-dev,
 libncursesw5-dev,
 libgsasl-dev,
 libtokyocabinet-dev,
 pkg-config,
 w3m,
 xsltproc,
 zlib1g-dev
Run Code Online (Sandbox Code Playgroud)

请注意,其中一些包名称中包含版本号。它们适用于 Debian 7 吗?如果不是,这将是一场沿着构建依赖关系链递归迭代的噩梦,可能不值得。为 Debian 打包的下一个最旧版本是 2.0.5,不足以满足您的要求。

如果 Debian 7 确实有所需的库(libgnutls28-dev、libgpgme11-dev 等),那么下一步将是下载 orig tar 文件(上游源 tarball)、debian .dsc 文件和 debian diff文件 (.debian.tar.xz),均可从https://packages.debian.org/unstable/mutt的软件包页面获取。

如果您下载这 3 个文件(可能还有用于校验和的 orig.tar.gz.asc),那么您将使用以下命令解压

dpkg-source -x mutt_2.2.4-1.dsc
Run Code Online (Sandbox Code Playgroud)

dpkg-sourcedpkg-dev包装中)

然后 cd 进入源目录 (mutt-2.2.4)。如果所有构建依赖项均按顺序排列,您需要做的就是运行

dpkg-buildpackage
Run Code Online (Sandbox Code Playgroud)

.deb 二进制文件将在父目录中创建,您可以手动安装,

sudo dpkg -i mutt_2.2.4*.deb
Run Code Online (Sandbox Code Playgroud)

您可能会遇到构建依赖项中列出的所需库版本的问题。我预计它不会在 Debian 7 上运行(如果不重建整个库链,我认为这不值得付出努力)。

除此之外,您可能会遇到问题Build-Depends: debhelper-compat (= 12),这更容易处理。替换debhelper-compat (= 12)为并创建一个仅包含数字的debhelper (>= 9~) 文件。debian/compat9

为了更好地衡量,您需要创建自己的 debian/changelog 条目,以使用自己的版本号标记您的本地构建,您可以使用dchdebchange来自devscripts包)