生成 dpkg .deb 文件名

Tom*_*ner 1 debian dpkg

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

dpkg-buildpackage -us -uc -b --changes-option=-u./dist
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ste*_*itt 5

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

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

awk '/^Package:/ { print $2 }' debian/control
Run Code Online (Sandbox Code Playgroud)

该版本默认基于 debian/changelog 中给出的值;你可以用

dpkg-parsechangelog -S version
Run Code Online (Sandbox Code Playgroud)

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

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

dpkg-architecture -qDEB_BUILD_ARCH
Run Code Online (Sandbox Code Playgroud)

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

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

dpkg-parsechangelog并且dpkg-architecturedpkg-dev包提供。