如何从Ubuntu软件仓库创建独立的软件包

是否可以通过合并依赖项创建独立的deb包,而无需手动重新打包?

我已经查看了这个问题,但它并没有真正回答我上面试图实现的内容。

如果可能,如何做到这一点?

更新1

目前还没有可用的工具(?) 那么创建一个新的deb包,其中包含所有的包,将依赖项复制到缓存中,并执行主要的包。 这可行吗?

更新2

上述方法似乎不可能,因为dpkg无法同时处理多个操作。一些脚本可能可以做到。

更新3

这个工具非常有帮助,但它目前不支持oneric及以上版本 仍在等待更通用的工具

提前致谢


你想要创建哪个套餐? - jokerdino
我想要获取 Wine、VLC 等软件的独立 deb 文件 :) - Tachyons
7个回答


我希望他们也能包括梦幻在内。 - Tachyons
1那真是太棒了...建造那个东西的人们值得一个拥抱。 - RobotHumans
这太酷了。如果它不能为以后的版本创建超级调试器,我会感到惊讶的。可能是因为作者还没有更新它,自从11.04发布周期以来。 - SpamapS
作者可能正在睡觉。 - Tachyons

不。如果你想要一个没有依赖关系的单独软件包,你需要自己重新打包。

要了解软件包如何工作,你可以阅读Debian软件包指南


2请问你能解释一下为什么这是不可能的吗:) 并附上手动操作的方法 提供教程链接即可:) - Tachyons
这是不可能的,因为dpkg不支持包含多个软件包的包格式。你能做的最好的办法是创建一个自己的软件包,并解决其外部依赖关系。根据软件包的情况,这可能根本不可能,但如果所有的依赖关系都是简单的库依赖关系,那么你可以修改构建规则以进行静态链接。 - psusi

如果所有这些东西都已经在Ubuntu存档中,那么您真正想要的只是一个引起它们安装的元包,对吗?
您只需要使用dh_make创建一个几乎空的软件包。告诉它您想要一个单一的二进制文件和本地软件包。在一个空目录中:
dh_make --native --indep --packagename --defaultless your-thing

然后编辑debian/control,在二进制包部分(第二个)将您想要安装的所有软件包添加到Depends:部分,用逗号分隔。
然后使用以下命令构建软件包:
debuild binary

如果您想将其上传到Launchpad上的PPA,以便其他人可以轻松获取它:
dch --release --distribution oneiric
debuild -S

当然,将“oneiric”更改为您希望打包的内容。然后,在上面的目录中应该有...
your-thing_1.0_source.changes

创建PPA后,只需执行以下操作
dput ppa:yourusername/ppaname your-thin_1.0_source.changes

然后,任何安装该软件包的人也会下载并安装所有其他依赖的组件。


我指的是像Google Chrome、TeamViewer等那样的独立deb软件包。 元软件包是不同的。 - Tachyons
明白了。我想这是个不好的主意。一旦其中一个组件被更新,你的独立包就会过时。我更希望看到一个元包,随着安全更新和修复被推入发布而不断发展。 - SpamapS
可能吧,但我想像在Windows中那样安装软件(只需双击)。这对于网络连接良好的用户来说并不好, 但对于离线用户来说,安装工具很困难,通过复制缓存进行安装也对普通用户来说很困难。 - Tachyons

如果我要试试这个,我会按照以下步骤进行:
1. 下载并提取所有的软件包。 2. 保留主要软件包的DEBIAN文件夹副本,将其他软件包放在一边。 3. 修改DEBIAN/control文件: - 在"Provides"行中列出您提供的每个软件包。 - 为您替换的软件包添加"Conflicts"条目。 - 从"Dependencies"行中删除依赖项。 4. 修改postinst、preinst、prerm和postrm脚本,使您的新副本能够处理所有软件包的事务。这并不简单,因为您需要了解每个软件包在每个步骤中的操作。 5. 将所有文件和新的DEBIAN文件重新打包。 6. 最后,您应该得到一个可以安装的东西,但并不完美。每当原始软件包更新时,您都需要手动重复这些步骤。
保留原始包装系统的系统要好得多。你甚至可以只发运单独的软件包。这样将耗费更少时间并且更加稳健。

当然可以,但我不知道有任何工具可以帮你完成这个任务。所以手动重新打包是唯一的方法。

免责声明:我没有尝试过这个方法,这只是我的解决方案草图。
您可以将所有依赖项下载到一个目录中,将其制作成Debian存储库,制作存储库的ISO映像,然后分发该ISO。
然后,您可以将ISO挂载为回环设备,并指示apt使用挂载的目录作为软件包源,就像您可以使用Ubuntu安装光盘作为存储库一样。
虽然看起来需要大量工作,但您最终会得到一个单个可再分发文件,其中包含所有依赖项,而无需重新打包deb文件。

可以通过aptoncd来完成,但我只需要一个单独的deb软件包。假设我想要从单个deb文件安装wine,这可行吗? - Tachyons

如果他们的连接不是很好,但还有一些,你可以共享/var/cache/apt/archives目录中的文件,这样就不需要重新下载文件了。
然而,这种方法并不能解决如何同步存储库索引的问题。

我对这个方法很熟悉,但我的问题不同。对不起,我的英语不好 :( - Tachyons