如何在PPA中使用pbuilder-dist构建带有依赖关系的软件包?

我正在尝试为我的ppa构建一个软件包,该软件包使用了来自其他两个ppa的软件包。我想使用pbuilder-dist进行测试构建。我以前做过这个,我知道我需要以下组合:
  • ~/.pbuilderrc中的OTHERMIRROR
  • --override-config,但我不确定何时将其添加到pbuilder-dist调用中
  • pbuilder-dist raring updatepbuilder-dist raring build <pkg>.dsc
  • 可能还有其他事情?
有人能给出详细的说明吗?我尝试了不同的组合,但似乎没有任何效果。
我需要的两个ppa是ppa:gnome3-team/gnome3ppa:tkluck/gnome3。谢谢!
2个回答

我正在使用具有增强配置的pbuilder,而不是pbuilder-dist,但步骤基本相同。
  1. 将额外的源添加到你的~/.pbuilderrc文件中的OTHERMIRROR变量:
  2. OTHERMIRROR="deb http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu raring main|deb http://ppa.launchpad.net/tkluck/gnome3/ubuntu raring main"
    
  3. 进入 pbuilder 环境以添加存储库密钥(或者创建具有这两个密钥的本地密钥环,并将其添加到APTKEYSTRINGS变量中,或者添加本地的 /etc/apt/trusted.gpg 密钥环):
  4. pbuilder-dist raring login --save-after-login
    apt-key adv --keyserver pgp.mit.edu --recv-keys 3B1510FD 568F2AD3
    exit
    

    (当然,你可以直接扩展你的 sources.list 文件并跳过第 1 和第 3 步,但 pbuilder-dist update 将重置 sources.list 文件。)

  5. 更新 pbuilder 环境(对于普通的 pbuilder,你需要添加 --override-config 参数):
  6. pbuilder-dist raring update --release-only
    

    注意:由于 Raring 是一个开发版本,默认启用了 proposed 源。这是通过向 pbuilder 的 --othermirror 命令行选项传递 proposed 源来实现的,该选项会覆盖配置文件中的值。因此,你必须使用 --release-only 开关。

  7. 构建你的软件包:
  8. pbuilder-dist raring build YOURPACKAGE.dsc
    

谢谢你的回答!然而,对我来说似乎并不起作用。在 pbuilder-dist raring login 会话期间所做的任何更改都将被丢弃。根据 pbuilder 的文档,这是正常行为。 - Timo Kluck
此外,即使没有导入密钥,我也会期望“update”步骤因某些源缺少密钥而发出警告。然而事实并非如此,似乎完全忽略了“OTHERMIRROR”变量。 - Timo Kluck
抱歉,忘记了重要的 --save-after-login。现在它将使用一个简单的 ~/.pbuilderrc(我已经亲自检查过了)。 - Lasall
如果在“login --save-after-login”会话中,我将“deb”行添加到“/etc/apt/sources.list”文件中并调用“apt-get update”,这对我来说是有效的。但是,仅使用“pbuilder-dist raring update”似乎失败了,我不确定是否可以再次调用它,或者它只会覆盖我刚刚完成的内容。也许你可以解释一下并更新你的答案? - Timo Kluck
我不确定为什么它不起作用。你的~/.pbuilderrc里面还有其他内容吗?或者是你拼错了这个文件名?我会更新答案,指出更新将重置sources.list。 - Lasall
这是我的~/.pbuilderrc文件:http://paste.ubuntu.com/5607994/ 在我看来,它看起来不错,没有拼写错误,对吗? - Timo Kluck
它与您的配置非常配合得很好。请展示一些调试输出:pbuilder-dist raring update --debug-echo - Lasall
这是调试输出:http://paste.ubuntu.com/5618176/ 或许作为 --other-mirror 标志传递的 raring-proposed 覆盖了 .pbuilderrc 中的那个? - Timo Kluck
是的,这就是问题所在,我会更新答案。 - Lasall
谢谢!我现在给你颁发奖励,因为它快要结束了。在测试之后,我会接受你的答案。 - Timo Kluck
@TimoKluck: 你测试过了吗? - Lasall
抱歉,Lasall,我一段时间以来一直在忙其他事情。这个看起来非常完整,所以我会接受这个答案。如果在测试过程中遇到任何问题,我会更新答案并添加任何额外的步骤。 - Timo Kluck

你还可以创建一个名为Dsomething的文件,指定要添加的存储库。如果在你的~/.pbuilderrc中有HOOKDIR="${HOME}/.pbuilder-hooks/",那么可能存在一个名为$HOME/.pbuilder-hooks/D10addppa的文件,其内容如下:
#!/bin/sh

echo "deb deb http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu raring main" >> /etc/apt/sources.list
echo "deb http://ppa.launchpad.net/tkluck/gnome3/ubuntu raring main"  >> /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B1510FD 568F2AD3
apt-get update

这种方法还可以保持PPA的变化是暂时的。