1

我有一个 Debian 包,它是为 i386 和 amd64 编译的(由我自己手动编译),因为它是一个闭源应用程序。

为了避免在将其上传dput到我的 launchpad.net PPA 时发生冲突,我在版本末尾添加了架构名称,但这失败了,因为我有错误说我正在上传的版本不大于以前的版本一个(首先上传 i386 包,但随后 amd64 失败)。

例如,如果包名称是 hello 我有以下名称:

hello-1.0.0ubuntu1~precise1~i386
hello-1.0.0ubuntu1~precise1~amd64

在包名称中移动体系结构名称可以解决此问题……但是用户必须按名称选择正确的包,这确实不好。

例如,如果包名称是 hello 我有以下名称:

hello-i386-1.0.0ubuntu1~precise1
hello-amd64-1.0.0ubuntu1~precise1

所以用户必须做sudo apt-get install hello-i386sudo apt-get install hello-amd64

所以问题是我应该如何命名我的包,以便用户可以执行相同的 apt-get 命令并安装正确的版本?

4

1 回答 1

1

除非您有充分的理由这样做,否则在包名称(或版本字符串)中包含架构并不是一个很好的解决方案。

您收到版本错误,因为 Launchpad 将源包视为hello并尝试更新helloPPA 中的包。但是,您 PPA 中的软件包的版本字符串比您上传的软件包大(“i”大于“a”)。我认为 Launchpad 还会检查主存储库中的版本,因此您不能为在主存储库中具有较新软件包的系列上传旧版本的软件包。

据我所知,Launchpad 不允许您上传二进制文件(即使对于闭源应用程序也是如此)。您只需上传源 tarball 和 debian 文件夹 tarball,Launchpad 将为所有适用的架构构建它。这取决于 debian/control 文件中的内容。对于每个包裹

  • 如果有一行写着Architecture: any,那么 Launchpad 将为(至少)amd64 和 i386 构建包。这通常适用于任何库和可执行文件。
  • 如果有一行写着Architecture: all,那么 Launchpad 将仅在 i386 chroot 中构建这个,并为所有架构共享该构建。这通常适用于任何计算机(甚至操作系统)中相同的数据文件。

其他值是允许的,但这些是常见的。

于 2014-01-31T19:29:45.727 回答