PPA和软件包:为多个发行版提供软件包的不同版本。

(聊天中的引用)
在Launchpad上为我参与的IRC机器人项目创建了一个源代码包的PPA(因为它是在发布之间的所有中间打包,所以被归类为“实验性”PPA)。问题是:我已经为lucid版本打包了这些东西。有没有办法让我创建相同的打包,只是将其打包为maverick版本,并将其放到我已经放置lucid打包的同一个PPA中?
2个回答

可能最简单的方法就是直接在Launchpad上复制二进制文件:
  1. 进入你的PPA并点击“查看软件包详情”:
  2. 点击“复制软件包”:
  3. 选择Lucid软件包:
  4. 选择“Maverick”系列,并选择“复制现有的二进制文件”:
  5. 点击“复制软件包”,就完成了!

非常感谢。你的指示非常准确。也非常感谢你的迅速回复。 - Thomas Ward
@Evil: 没问题。很高兴能帮到你! - Nathan Osman
5注意其他链接到这里的问题!!! 复制现有的二进制文件并不总是适用于针对其他版本Ubuntu的程序!请查看我的rkhunter PPA和Lucid版本的更改日志,以了解我的意思:https://launchpad.net/~trekcaptainusa-tw/+archive/rkhunter/+packages - Thomas Ward
@ThomasWard:说得好 - 它并不总是有效。 - Nathan Osman
George,我提到这个是因为最近我回答了一个关于多发行版软件包的问题,并且我的答案被接受了。此外,我从MOTUs那里学到了一些东西。:P - Thomas Ward
1如果我在“changelog”文件中放置以下内容:“hello(2.6-0ubuntu1)lucid maverick natty; urgency = low”,会发生什么?Launchpad是否会为所有3个发行版构建它? - Khurshid Alam
2@KhurshidAlam 对不起回复晚了这么久。如果出现“无效的更改日志”错误,那将会失败,因此,在使用具有不同版本的PPA时,您必须单独标记每个版本。https://launchpad.net/~nginx/+archive/stable 是一个很好的例子,因为为了使其构建正确并且能够与所有不同的库一起使用,我必须在版本中添加分发信息。(我目前负责维护nginx团队的ppa,所以我以此作为例子。) - Thomas Ward
感谢。复制的方法对我的大部分ppa软件包都很有效,但有一个软件包失败了。然后我尝试创建一个新的软件包(用于xenial),但被拒绝,并出现了一个关于.orig.tar.gz文件的错误消息:被拒绝:文件octave-iso2mesh_1.9.5+ds.orig.tar.gz已经存在于...,但上传的版本内容不同。了解更多关于此错误的信息,请参阅...DSC中指定的文件损坏或丢失,跳过软件包解压验证。在测试/修订打包文件时,如何避免此错误(假设orig从未更改)? - FangQ
没关系。结果发现两个发行版上的.orig.tar.gz文件是不同的(不确定为什么)。在将一个.orig.tar.gz从一个复制到另一个之后,该软件包现在可以上传而没有任何错误。 - FangQ

如果复制正在构建的软件包的二进制文件不起作用,您需要通过编辑debian/changelog文件为每个发行版版本上传源代码软件包。
如何重新打包为另一个发行版版本:
1. 在源代码软件包目录中编辑debian/changelog文件。 2. 同时更改版本目标发行版以反映您要构建的发行版。例如:nginx (1:1.4.1-0ubuntu1~preciseppa1) precise; urgency=low。 3. 重新构建源代码软件包:debuild -S。 4. 将.changes文件上传到您的PPA:dput ppa:teward/nginx-stable-testing ../nginx_1.4.1-0ubuntu1~preciseppa1_source.changes
如果构建成功,恭喜您已经为该发行版构建了一个软件包!如果没有成功,您需要在Launchpad上检查构建日志并解决任何问题。
参考资料:

这就是我做的! :D 当我需要为PPA中的nginx和其他程序进行不同的构建时,MOTUs(宇宙存储库之神们)解释了这个问题,并帮助解决了许多问题。感谢您发布这个! :) - Thomas Ward
是的,我觉得这些信息对于记录并向新的打包人员提供是很有用的,因为使用所有的Debian打包工具、PPA上传、规范以及调试失败的构建可能会有一个陡峭的学习曲线。 - TrinitronX
确实。不过,我不会更改接受的答案,因为在提出这个问题时,并不需要担心在各个版本的Ubuntu中可用的库不同。对于经常进行回溯移植的nginxrkhunter或其他软件包,存在着巨大的依赖问题需要解决(控制文件中的不同depends:等),所以我总是使用programversion-1~RELEASE0,其中~RELEASE0总是某个与所在发行版相关的数字。通常,在从Debian回溯移植到Ubuntu时情况就是如此 :) - Thomas Ward
是的,依赖关系绝对是回溯的一个痛点 ;-) 我同意,大多数情况下,接受的答案应该足够了。对于使用bazaar源代码控制库的用户来说,使用Launchpad的bzr-builder recipe也很有吸引力。然而,当涉及到有许多依赖关系的软件包时,有时您必须为目标发行版构建自定义软件包。 - TrinitronX
我将nginx从Debian Unstable回溯到Precise、Quantal、Raring和Saucy(以及Trusty的PPA,但我也确保在Debian冻结之前,Trusty会合并最新的Debian内容:P),为NGINX团队提供支持。但可惜有时候会遇到无法解决的错误,这时就需要Debian来处理...这就是为什么我与Debian的维护者有着良好的关系 :) - Thomas Ward
@ThomasW。在查看了你的Launchpad个人资料后,我对你的活跃程度感到非常印象深刻。感谢你为开源世界做出的贡献,让它变得更加美好!^_^ - TrinitronX
谢谢夸奖!我在我的工作领域非常专业,主要处理nginx的错误和一般的故障排除工作,但是我会尽力做好自己的部分 :) - Thomas Ward
谢谢这个建议。在遵循这个建议后,我注意到:软件包包含一个.orig.tar.gz文件,尽管Debian修订版表明可能不需要它。多次上传.orig.tar.gz可能会被上传队列管理软件拒绝。 Launchpad似乎很满意,但是否有可能避免重新上传源代码压缩包呢? - cheshirekow
@cheshirekow:不太确定是否有办法避免dput每次尝试上传orig.tar.gz。我原以为这只是一个警告,但也许更熟悉Debian打包库的人可以回答? - TrinitronX
如果你只是使用debuild -S命令,它会检查软件的那个版本是否已经在软件库中了,如果没有的话,它会强制上传.orig.tar.gz文件。不过大部分情况下你可以忽略这个警告。但是如果你打包了一个与同一版本字符串不匹配的不同版本的软件,这个警告还是很有用的,因为这样你就知道要么你做错了什么,要么由于冲突你需要将你的软件包重命名为其他名称。 - Thomas Ward