如何正确设置deb软件包的已安装大小?

8
我正在开发Debian软件包,但在DEBIAN/control下正确定义“Installed-Size”方面遇到了问题。
我编写了一个脚本,不断检查svn存储库以获取新的修订版本,如果发现更改,则使用du -s命令计算代码的大小(不包括DEBIAN文件夹),然后将此值放入“Installed-size”中。

DEBIAN/control文件如下所示:

Package: myfirstdebpackage
Version: 1.0
Architecture: all
Maintainer: me
Installed-Size: 16664
Depends: python (>=2.7), python-appindicator, python-numpy, python-suds
Section: extras
Priority: optional
Homepage: www.example.com
Description: My first deb package

应用程序的文件夹结构:

myfirstdebpackage/DEBIAN
myfirstdebpackage/usr/bin/myfirstdebpackage/<files>

第一次安装(通过apt存储库)进行得很好,但在创建新版本并尝试更新软件包后,我收到了“大小不匹配”或“哈希摘要不匹配”的错误信息。
有什么问题?
3个回答

2
我假设您每次使用相同的版本但不同内容生成二进制软件包。请勿这样做。这会混淆apt和许多其他工具,它们期望和假定每个pkgname-version-arch元组表示唯一且不同的软件包。
关于Installed-Size,dpkg-gencontrol会自动为您生成它,但我假设您手动创建DEBIAN/control文件。我建议不要这样做,因为这意味着更多的手动操作,更容易出错。

2
为什么要给踩个负?正确设置已安装大小的方法是使用 dpkg-gencontrol。可以手动生成,但这相当不规范。要这样做,您需要使用相同的算法,该算法不再是 debian-policy 中记录的算法,而是在 https://bugs.debian.org/793499 中引用的算法。当然,这与后来在问题中提到的错误无关,该错误与元索引不与源和二进制包同步有关,但这不是问题的焦点。 - Guillem Jover
你能提供一个如何使用 dpkg-gencontrol 的例子吗?我似乎无法让它正常工作,总是报错。 - codejedi365
在源代码树中,使用它需要格式良好的 debian/controldebian/changelog 文件,如果按原样运行,则还需要 debian/tmp/DEBIAN/ 目录。如果软件包动态链接了程序,则需要先运行 dpkg-shlibdeps。然后运行 dpkg-gencontrol -p<package-name> 应该会生成它(当 debian/control 包含多个软件包时,只有 -p 是必要的)。但这都是非常简短的,因为它相当于“如何在没有像 debhelper 这样的帮助程序的情况下打包”,我建议不要这样做,除非真的知道自己在做什么。 - Guillem Jover

0
Package: xx-xx-xx-app
Version: 1.0
Architecture: all
Essential: no
Priority: optional
Installed-Size: `du -ks usr|cut -f 1`
Maintainer: XXX Team
Description: XXX Service

这在 dpkg-deb --build 命令中不起作用。如果这对你有效,那么显然我错过了某些预备步骤,请在您的帖子中添加说明。 - codejedi365

-1
我并不期望你手动更改那个值。相反地,请在软件包的根目录中运行 devscripts 包中的 debuild 命令。这将会在该根目录的父目录下创建一个二进制包,并且该字段也将自动填充。

我已经从控制文件中删除了“Installed-Size”字段,并且成功创建了软件包。然而问题仍然存在。也许我的apt存储库出了问题?每当我创建一个新的deb软件包,我都会将其复制到存储库(“binary”文件夹),然后执行“dpkg-scanpackages binary /dev/null | gzip -9c > binary/Packages.gz”命令... - Levi
1
不要手动运行 dpkg-scanpackages。最好使用像 reprepro 这样的辅助工具:http://serverfault.com/a/224635。 - tshepang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接