我们有一个软件项目,我们将其作为 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
,但在一般情况下BUILD
和HOST
是相同的。我在这里也忽略了交叉编译;如果这是一个问题,请使用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/ 父目录