如何在我的pbuilder构建中使用本地的.deb文件?

通常我需要创建一个被另一个软件包依赖的软件包(即构建依赖)。而不是先在我的ppa中构建所有这些软件包(有时可能需要一些时间),我希望能够使用pbuilder的结果目录作为pbuilder本身的源。
我该如何做到这一点?我可以通过钩子实现这个吗?
2个回答

这可以通过几种方式来完成。如adol所提到的,Ubuntu维基有一个很好的示例,介绍了如何通过使用mini-dinstall创建本地仓库,并将其添加到pbuilder配置中来实现此目的。Dennis关于使用dpkg-scanpackages的回答也是可行的。
我最近一直在使用apt-ftparchive来完成这个任务。我喜欢这种方法,因为我觉得它非常轻量级。以下是我所做的示例的注释:
# From my ~/.pbuilderrc file

# Location of the dir where you keep pbuilder hook scripts.
HOOKDIR="/home/andrew/.pbuilder-hooks"

# Path to your local repo to be used as a mirror written as apt source line.
OTHERMIRROR="deb file:///home/andrew/pbuilder/local_repo ./"

# Path to your local repo. This tells pbuilder to mount this directory so it is available in the chroot.
BINDMOUNTS="/home/andrew/pbuilder/local_repo"

# As we need to have the apt-ftparchive command, we need to insure this package is installed.
EXTRAPACKAGES="apt-utils"

你还需要一个 pbuilder 钩子:
# From my ~/.pbuilder-hooks/D5update-local-repo file

# Path to the local repo.
LOCAL_REPO="/home/andrew/pbuilder/local_repo"

# Generate a Packages file.
(cd $LOCAL_REPO ; apt-ftparchive packages . > Packages)

# Update to include any new packages in the local repo.
apt-get update

现在你只需要将这些软件包放入你的本地仓库,它们就可以供 pbuilder 使用了。如果你想要构建一系列依赖关系,你可以将 pbuilder 的结果目录设置为你的本地仓库目录。
你可能还可以想象其他变种。例如,你可以使用 dput 并配合 post_upload_command 来生成 Packages 文件,而不是使用 hook。
这个Debian wiki page也可能会有所帮助。

1钩子文件需要被命名为D05...(两位数)并且需要可执行。另外(至少在使用pbuilder-dist时),在添加apt-utils额外包之后,你需要调用pbuilder-dist <dist> update --override-config一次。 还有一点,使用pbuilder-dist时,你需要将OTHERMIRROR设置为环境变量,因为它会覆盖配置文件的设置。 - BubuIIC

你可以将它们放在使用dpkg-scanpackages创建的简单存储库中,并通过apache提供。然后更新pbuilder的apt配置以使用你的存储库。

3请参阅https://wiki.ubuntu.com/PbuilderHowto#Building With Local Packages。不确定他们的OTHERMIRROR示例是否可以直接在本地文件系统上运行。我选择了更简单的方法,使用http://localhost/路径作为我的额外软件包仓库。 - andol