生成 dpkg .deb 文件名

生成 dpkg .deb 文件名

我们有一个软件项目,我们将其作为 debian 包发布。该项目有一个 debian/ 文件夹,其中包含changelog compat control copyright rules.我们使用以下命令创建 debian 软件包:

dpkg-buildpackage -us -uc -b --changes-option=-u./dist

它打印输出流。对于该过程的下一步,我们需要知道的是创建的 .deb 文件的名称。

我知道 debians 有一个可预测的文件名结构,[package name]_[version]_[architecture].deb但我无论如何都没有办法获取这些参数。

一定有另一个 dpkg 命令可以通过查看 debian 文件夹来生成可能的包名称?

答案1

正如您所指出的,生成的.deb文件都共享一个通用格式:${package}_${version}_${arch}.deb.

包名称来自;Package:中的条目。debian/control对于完整构建,.deb将为每个Package:条目生成一个文件。您可以使用以下命令检索值

awk '/^Package:/ { print $2 }' debian/control

版本默认基于 debian/changelog 中给出的值;你可以用以下方法提取它

dpkg-parsechangelog -S version

(构建可以指定不同的版本,但这并不常见。)

最后,该体系结构将是all(对于一个Architecture: all包)或默认情况下您的构建系统的体系结构(对于任何其他Architecture:,通常是Architecture: any)。您可以使用以下方式确定构建系统的架构

dpkg-architecture -qDEB_BUILD_ARCH

(严格来说应该是-qDEB_HOST_ARCH,但在一般情况下BUILDHOST是相同的。我在这里也忽略了交叉编译;如果这是一个问题,请使用DEB_TARGET_ARCH而不是DEB_BUILD_ARCH。)

因此,对于完全通用的解决方案,您需要解析control文件以确定哪个包适用于哪种架构;如果你的control文件只构建一个包,那么这是没有必要的。

dpkg-parsechangelog并由包装dpkg-architecture提供dpkg-dev

答案2

这是dpkg 名称:

$dpkg-name foo.deb
dpkg-name: info: moved 'foo.deb' to './feature-dev_1.4.177_armhf.deb'

原始名称foo取自 DEBIAN/ 父目录

相关内容