我们有一个软件项目,我们将其作为 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 文件夹来生成可能的包名称吗?
正如您所指出的,生成的.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-architecture由dpkg-dev包提供。
| 归档时间: |
|
| 查看次数: |
3417 次 |
| 最近记录: |