我应该从源代码压缩包(.tar.gz)安装程序,还是从Ubuntu软件中心安装,或者其他地方安装?

在Ubuntu中安装应用程序有几种方法:
1. 你可以下载一个源代码压缩包(通常是.tar.gz或.tar.bz2文件),然后手动安装它。(参见如何安装.tar.gz(或.tar.bz2)文件?
2. 你可以下载一个.deb文件,并使用dpkg或软件中心手动安装。
3. 你可以在Ubuntu软件中心搜索应用程序并在那里安装,或者使用apt与官方Ubuntu软件仓库。
4. 你可以找到PPA或第三方仓库,并从那里安装。
每种方法的优缺点是什么?请在回答中讨论安全性、更新频率和程序可靠性的影响。

1这是很多问题集中在一起。可能更好的做法是提出一个更具针对性的问题。默认情况下,使用Ubuntu软件中心。一个很好的比较可以在tar包(.tar.gz)和apt-get + .deb生态系统之间进行(包括命令行和Ubuntu软件中心)。 - Warren P
如果将其作为四个单独的问题提出,对于这四个问题的答案应该是相同的:首选使用软件包管理器从存储库(主要或第三方)安装/更新。如果这不是一个选择,那么你可以开始讨论一般的优缺点,但在那时可能归结为所使用的应用程序以及你具体想要做什么。(例如,我从公共存储库安装标准提供的“java”,但作为开发人员,我还通过tar.gz文件在/opt/java中安装了5个不同版本)。 - michael
2个回答

可靠性: 当从tarball安装软件时,软件可能会试图覆盖其他软件。需要构建依赖项,并且该过程具有较高的失败率。如果您要安装与存储库中的软件包有依赖关系的软件,则无法满足该依赖关系,因为它未在dpkg中注册,除非您使用checkinstall将其暂时转换为Debian软件包。使用此方法,您确实存在破坏dpkg的风险。即使代码是开源的,除非您确定它没有被更改,否则仍应从可信站点下载。只要使用不同的目录,就可以安装多个版本的软件。您可以在makefile中覆盖此设置。
使用Debian软件包将确保文件不会覆盖其他程序的文件,但是如果使用sudo dpkg -i file.deb命令进行安装,必须先安装依赖项。以这种方式安装后,除非该软件包也在存储库中,否则您将无法获得更新,但是此软件包将满足对此软件的依赖关系。它还很可能为此软件包添加菜单项或至少注册man页面。Debian软件包通常通过Lintian进行测试,Lintian可确保软件包符合或超过了一组可能相当严格的标准,甚至包括某些文件是否有任何可执行代码。无法安装多个版本的同一软件包。制作不良的软件包可能无法安装,无法删除,甚至破坏DPKG,导致修复困难,紧急搜索备份或者如果问题严重还可能需要重新安装。
如果可能的话,使用apt是最佳选择。依赖项将自动获取和安装,并且使用可靠的构建服务器配置在launchpad上构建软件包,从而最大限度地减少了失败率。可以通过aptitude或其他类似工具搜索软件包,并且可以轻松通过更新管理器进行更新。由于依赖项也来自apt,因此该软件包更有可能与依赖项正确交互。软件包与debs一样通过Lintian进行测试,但是在与高度稳定的构建服务器结合的测试中,软件包更加稳定。由于软件包经过Ubuntu的构建服务器,因此它们很可能会被调整以与操作系统的其他部分集成。不能安装多个版本的同一软件包。由于PPA使用了Ubuntu的构建服务器,因此您不太可能因为自动lintianing而破坏apt。
更新: 通过tarball,您将不会获得任何更新,除非程序本身检查更新。这样一来,您将需要手动安装此类更新,而且它们将不会集中在一个地方。您可能可以从tarball中获取每夜版甚至当前源代码进行编译和安装。如果您需要最新的代码,那可能会有用。
使用Debian软件包,只有在您拥有它们的存储库时才会更新软件包。开发人员很可能使Debian软件包稍微落后于最新的源代码,但是beta版本通常可以在在线debs中找到。
通过apt,软件包将非常容易地进行更新。更新将集中在一个地方,即更新管理器,并且可以自动或半自动完成。除非您正在使用Ubuntu的alpha或beta版本,否则您将使用经过充分测试的版本,即使它们比当前上游源码版本落后一两个版本。安全更新将在轻度测试后推出,以确保它们不会使

1我建议您添加集成功能。Ubuntu 和上游的Debian软件包管理器确保软件包参与系统级功能,如替代系统(我有多个程序可以打开网页,我想将哪个设置为默认)等等。手动安装tarball通常不会以这种方式工作。 - Warren P
@WarrenP 我确实添加了那个,但可能不够清楚。谢谢! - nanofarad
第一个项目符号中的“如果您正在安装依赖于存储库中的软件包的软件,这将无法满足该依赖关系,因为它没有在dpkg中注册。”是指涵盖了集成吗? - user25656
1@vasa1 这是关于tarballs的问题,因为Apt和dpkg会检查它们的数据库而不是文件系统来确定一个软件包是否已安装。你可以随时使用checkinstall来解决这个问题。 - nanofarad

简而言之,从Ubuntu软件中心安装通常比其他方法更可取。然而,在某些情况下,您可能希望从其他地方安装程序。

从源代码安装:

  • 安全性考虑:您需要信任软件的作者和托管下载的网站。您还应该检查下载是否通过HTTPS进行,否则第三方可能会修改下载内容。

  • 更新频率:您将始终获得最新和最好的!更新的频率取决于原始作者选择。但是,您需要手动检查更新。

  • 可靠性:与其他方法相比,可能不太可靠,因为该软件经过的测试较少,甚至可能根本没有在Ubuntu上进行过测试,只是在其他Linux发行版上进行了测试。

  • 安装和卸载的简易性:所有选项中最困难的一种。即使是有经验的用户也可能避免选择此选项,因为他们更喜欢使用本地的Debian软件包,这样更容易管理。

.deb软件包安装:

  • 安全性影响:与从源代码安装相同。

  • 更新频率:与从源代码安装相同。

  • 可靠性:比从源代码安装稍微好一些。如果作者提供了一个.deb包,那意味着他们可能在Debian或Ubuntu上进行了一些最小的测试。

  • 安装和卸载的简易性:非常简单。只需双击并点击“安装”!卸载同样容易。

从Ubuntu软件中心安装:

  • 安全性影响:您需要信任软件的作者和Ubuntu软件库维护者。总体而言,这比直接从源代码安装要更安全,因为该程序已经在某种程度上经过Debian和/或Ubuntu维护者的审查。如果该程序是开源的,Debian和/或Ubuntu维护者也可以修补程序以修复安全漏洞。

  • 更新频率:Debian和/或Ubuntu维护者只选择软件的某些版本(例如,他们可能只选择稳定的更新)。程序发布后,它被包含在Debian和/或Ubuntu软件库中会有一定的延迟。如果您想要最新和最好的版本,这不是最佳选择。如果您想要经过审查的稳定更新,这是一个很好的选择。更新可以通过更新管理器和apt-get自动提出。

  • 可靠性:比从源代码安装要好得多,因为该程序已经经过审查并针对Ubuntu进行了调整。

  • 安装和卸载的简易性:非常非常容易。

从PPA或第三方软件库安装:

  • 安全性影响:您需要信任软件的作者和维护PPA的人员。任何人都可以托管PPA,因此不要仅因为它在Launchpad上就相信该PPA。用户可能懒得审核软件。

  • 更新频率:这取决于PPA。检查更新很容易。

  • 可靠性:通常比从Ubuntu软件中心安装的程序不可靠。PPA是为了那些尚未达到Ubuntu软件中心标准的程序而存在的,因此它们几乎可以肯定会不太可靠。

  • 安装和卸载的便捷性:学习起来并不难,并且与Ubuntu的软件包管理非常匹配。


这个问题和答案似乎都是为了推荐Ubuntu软件中心,但实际上并没有真正理解底层的apt-get系统。然而,我真的怀疑人们会在“安装我下载的.deb包”和使用Ubuntu软件中心之间做出选择。他们可能会在使用图形界面的U.S.C和命令行下的非图形界面的apt-get命令之间做出选择。 - Warren P
1USC只是apt-get的一个前端而已。我们不要把这变成图形界面与命令行的争论。如果你认为这个选择值得讨论,可以另起一问。 - Flimm
2@Flimm:不完全正确,USC 也可以安装 .deb 包,因此更合适的称呼应该是 USC 是 apt-get 和 dpkg 的前端界面。 - Lie Ryan
1我并不是说“辩论”,我是说“用户来到这里是为了澄清问题,而这个问题和答案似乎并没有很好地澄清事情”。 - Warren P
1@LieRyan: 同意。 - Flimm
1@WarrenP:我对用户来这里的目的持不同意见。用户来这里是为了决定从哪里下载和安装应用程序。如果问题不清楚,我们可以进行编辑。我认为问题很清楚,如果你有其他对用户更有用的问题,请创建一个新的问题帖子。 - Flimm