PPA和软件仓库有什么区别?

我最近发布了一个回答,其中写着“添加PPA”。但是现在我意识到,我不知道“PPA”和“仓库”之间的区别。所以有人可以解释一下吗?

有关PPA,请参阅:http://askubuntu.com/questions/4983/what-are-ppas-and-how-do-i-use-them - Takkat
5个回答

简而言之:
- 一个仓库是托管在任意服务器上的软件包集合。 - PPA(个人软件包档案)也是托管在Launchpad服务器上的软件包集合。 - 因此,PPA是一种特殊类型的仓库,就像正方形是一种特殊类型的长方形。
主要区别在于托管者。如果你是一名程序员,想要开发和分发自己的软件包,并且拥有自己的互联网根服务器,那么你可以在其上建立自己的仓库。太棒了!但是如果你没有根服务器,又不想为此付费,但仍然想要开发和分发自己的软件包呢?那么就有了Launchpad。它提供PPA作为一项服务,专门满足这种使用情况。你可以在Launchpad上创建自己的仓库,并在那里管理自己的软件包。
让我们来看一个说明性的例子。
首先,假设您想在Ubuntu Saucy Salamander上安装MATE桌面环境(Gnome 2的分支)。它不包含在官方存储库中,开发人员也没有维护PPA。相反,他们有自己的存储库。您可以像这样添加它: $ sudo add-apt-repository http://packages.mate-desktop.org/repo/ubuntu
这将导致以下条目被添加到/etc/apt/sources.list:
deb http://packages.mate-desktop.org/repo/ubuntu saucy main
其次,假设您还想看看Cinnamon(另一个Gnome 2的分支)。自从13.04以来,它包含在官方存储库中,但开发人员仍然维护着一个PPA,如果您对获取新版本更快感兴趣,这个PPA非常有用。您可以像这样添加它: $ sudo add-apt-repository ppa:gwendal-lebihan-dev/cinnamon-stable 这将导致以下条目被添加到/etc/apt/sources.list.d/gwendal-lebihan-dev-cinnamon-stable-saucy.list:
deb http://ppa.launchpad.net/gwendal-lebihan-dev/cinnamon-stable/ubuntu saucy main
正如您所看到的,后者的条目与第一点中的条目非常相似。实际上,从Ubuntu的角度来看,两者都只是存储库的URL。
事实上,您甚至可以使用与第一点相同的语法添加Cinnamon PPA,尽管这不是添加PPA的典型方式: $ sudo add-apt-repository http://ppa.launchpad.net/gwendal-lebihan-dev/cinnamon-stable/ubuntu
这将导致以下条目被添加到/etc/apt/sources.list:
deb http://ppa.launchpad.net/gwendal-lebihan-dev/cinnamon-stable/ubuntu saucy main
这与第二点中的条目完全相同。只是这些条目所写入的文件稍微有些不同处理,但最终并没有真正的区别。在这两种情况下,当然,在经过经典的sudo apt-get update之后,您将获得来自Cinnamon PPA的软件包可用于您的系统。

根据Xenial中的add-apt-repository手册,如果使用ppa:<user>/<ppa-name>的形式,"新添加的PPA的GPG公钥也将被下载并添加到apt的密钥环中。"我猜想如果使用URL形式,则不会发生这种情况。实际上,手册并没有告诉你可以使用类似于1和3中使用的URL形式,而是说"可以直接添加到sources.list的一行"。然而,你使用的形式似乎是有效的。 - jarno
2@jarno 是的,add-apt-repository 的 manpage 在这方面确实是不完整的。请使用 add-apt-repository --help 命令查看我在 1 和 3 中使用的 URL 格式是正确的,并且是一种有意的可选项。此外,你的假设是完全正确的:使用 URL 格式时,PPA 的 GPG 公钥将不会被添加。这是一个有用的补充,谢谢! :) 请注意,我不建议使用第 3 种描述的形式来添加 PPA。它只是作为一个示例,以显示实际上,PPA 只是一种特定类型的存储库。 - Malte Skoruppa

存储库

在像Ubuntu这样的系统上,大多数软件都打包在漂亮的.deb(或者像Red Hat一样的.rpm)文件中,其中包含您所需的程序和库。这些文件可以下载或者包含在光盘中(Ubuntu的光盘上有很多这样的文件)。存储库是包含一组软件包的服务器

PPA

个人软件包存档(PPA)允许上传Ubuntu源代码包,由Launchpad构建并发布为一个apt存储库

另请参阅什么是PPA以及如何使用它们? 以及维基百科

总结:

  • 存储库具有软件包。
  • PPA是个人软件包的存档。
  • Launchpad.net托管了PPA。

4PPA(个人软件包档案)不就是由个人或团体选择和维护的存储库或软件吗?(这些个人或团体与Canonical或官方Ubuntu开发者没有直接关系)。PPA就像一个存储库,而不是单个软件包。 - Fahad Yousuf
11PPA(个人软件包档案)不是一个软件包,而是一个软件仓库。每个PPA可以包含多个软件包。Launchpad是(或者更确切地说,托管)一系列被称为PPA的仓库的集合。 - Gilles 'SO- stop being evil'

就APT而言,存储库和PPA之间没有技术差异。它们都是软件存储库,提供软件包,从APT的角度来看,安装软件包的机制是相同的。

PPA是一个使用Launchpad作为后端的软件包存储库。它只是另一个名称,至少在原则上通常用于个人原因,它自动化了大部分您否则需要手动执行或设置自己的服务的操作。

存储库是指软件所在的地方,在这种情况下,是Debian系列发行版中的软件包列表和要安装的软件包。

您可以拥有自己的个人存储库,而无需使用Launchpad,并且可以称之为PPA,因为它是个人的。

在使用上唯一的区别仅在于add-apt-repository的语法,它使用魔术关键字ppa:而不是强制用户编写非Launchpad存储库所需的完整URL。


一个软件仓库是各种软件的集合,使得像apt-get、aptitude等软件能够下载和安装这些软件。它们的内容对所有人都可见,可以进行检查。请阅读Ubuntu帮助页面以了解有关软件仓库的更多信息。 PPA是专门为那些尚未被发行版领导团队全面采纳的软件而设立的特殊仓库。PPA软件可能存在缺陷,甚至可能被用于恶意软件,因为它们没有像一般仓库那样经过广泛审查。欲了解更多信息,请参阅Launchpad关于PPA的解释关于PPA的讨论

存储库是一个用于下载或更新软件包的地方。这些服务器包含一组软件包。

个人软件包存档(PPA)是一个特殊的软件存储库,用于上传源代码软件包,并由Launchpad或类似应用程序构建和发布为APT存储库。大多数情况下,它由非官方的Ubuntu开发者维护。