Deb包和tar包有什么区别?它们各自的优缺点是什么?

我不了解tar balls。大多数软件包都以tar ball的形式提供,但Ubuntu软件包是Debian软件包。
deb软件包和tar ball有什么区别?
每种软件包的优缺点是什么?
4个回答

Tar balls通常是源代码,你需要编译。Debs是预编译的程序,已经构建和配置好了适用于Ubuntu/Debian系统。
我强烈建议在有debs可用时使用它们,因为它们更容易使用,并且与软件包管理器集成,所以你可以轻松地卸载它们。
Debs还会安装所需的任何依赖项。从源代码安装可能会导致所谓的“依赖地狱”。大多数开源程序依赖于其他几个程序/库来运行。当从源代码安装时,它不会安装这些依赖项,而是(希望)会抱怨某个依赖项未满足。然后你尝试安装该依赖项,然后它又失败了,需要另一个依赖项,依此类推。
从源代码安装还可能将你的文件放在意想不到的位置,因为不同的发行版稍微有所不同。
当我需要安装一个程序时,我按照以下顺序尝试我的选项:
  1. 在软件中心查找。这显然是最简单的方法,尽管软件中心并不包含所有软件,并且不会及时更新到最新版本。

  2. 尝试找到提供该软件的软件源。添加一个软件源将使该程序出现在软件中心中,并能够及时升级等。

  3. 寻找一个 .deb 包。

  4. 从源代码安装(tar 压缩包)。


tar球只是另一种像zip一样的压缩形式。尽管压缩的格式和技术不同,但它基本上是一个包含一组文件和文件夹的容器。
通常,源代码及其所需的文件将以tar球的形式由编写软件的个人/团队在互联网上提供。因此,您可以下载它,解压缩它,编译软件并安装它。
然而,deb软件包的作用是通过维护标准使安装过程变得简单。互联网上可用的软件将被Debian软件包维护者获取,并制作成相应的.deb软件包放入Debian软件库中。

enter image description here

你可以在Debian软件包维护者的博客上阅读相关内容:http://www.j4v4m4n.in/2012/05/01/debian-utsavam-at-mes-kuttippuram-kerala-2/

至于优缺点,.deb软件包由像apt和aptitude这样的软件包管理器进行管理。因此,每当你使用它安装软件时,它们会自动判断你的系统是否具备运行该软件所需的依赖项,并为你安装它们。

但是,如果你使用tar ball进行安装,你将需要找出该软件所依赖的内容,并且每次都要手动检查你正在安装的软件的依赖项是否已经预先安装。

而apt则会为你完成所有这些工作。

此外,从源代码安装(从tar ball安装)对于不同的软件有不同的方法。有GNU的configure-make-make install哲学,也有根据软件编写方式而定的其他方法。

然而,将它们转换为deb完全消除了所有这些差异,并使用户更容易安装和使用软件。
还有一点。什么时候需要从源代码安装?也就是从tar包安装?基本上有两种情况。
1. 如果Debian打包团队尚未打包软件。 2. 如果您想为项目做出贡献。这意味着您可以对源代码进行更改、编译并测试这些更改。
如果您想了解更多关于Debian打包的信息,您可以从这里阅读:http://www.debian.org/doc/manuals/maint-guide/ 希望这能帮到您。

Debian(以及Ubuntu)软件包是一组二进制文件和相关安装指令。这意味着软件包自身知道如何在何处安装,并且它还知道所依赖的软件包列表。

源代码tarball(扩展名为.tar.gz.tar.bz2,甚至.tgz or .tbz2)只是一组文件和目录,使用tar实用程序打包并使用gzipbzip2进行压缩。要构建源代码,您需要执行以下操作:

  1. 使用tar xvfz file.tar.gztar xvfj file.tar.bz2(在空目录中)解压文件。
  2. 使用./configure配置软件包(软件包在开始编译之前会测试系统是否正常)。
  3. 使用make开始编译。
  4. 如果需要,运行make install将应用程序安装到其“默认”位置(通常在/usr/{s}bin或/usr/local/{s}bin,但这取决于应用程序和发行版)。

与源代码压缩包相比,Debian/Ubuntu软件包的主要优势是它们是“自包含”的,并且其二进制文件可以被跟踪。这意味着解压过程对用户来说是透明的,用户只能看到每个应用程序大致上一个软件包。用户甚至不需要记住给定应用程序安装了哪些文件以及它们的位置,因此安装/卸载应用程序变得(大部分情况下)只需一条指令即可完成。

源代码tar包相对于二进制包的主要优势在于,源代码可以直接在目标机器上编译,并且可以进行相应的优化。此外,即使是最好的软件包系统,在特定情况下也可能出现问题(例如,软件包版本过新或过旧),而且通常官方软件包在变得太旧时会被服务器清除。在这些情况下,人们必须手动在互联网上搜索所需的应用程序和特定版本的特定库,以满足所有依赖关系。

1一个小细节。"configure, make, make install" 这些步骤适用于那些使用GNU automake构建哲学的软件。有一些软件可以通过各种方式从源代码(tar包)构建。因此,说“要构建源代码,请执行configure、make、make install”可能不正确。最好的方式是,“要从源代码安装,请阅读源代码中的README或INSTALL文件,并按照其中提到的步骤进行操作。请参考这个链接:http://sosaysharis.wordpress.com/2011/11/28/installing-a-software-from-source-in-ubuntu-untarring-a-tar-tar-gz-file/。” - harisibrahimkv
是的,我刚刚谈到了这种方法,因为它被绝大多数源代码包所采用。 - Avio
毫无争议。 :) - harisibrahimkv

我已经看到一些相当不错的答案了。但还有几件事情需要解决。
与从源代码编译时所谓的“依赖地狱”相反,实际上你可以配置Ubuntu,使其在从tarball/任何源代码编译时自动安装这些依赖项。
请阅读如何进行此操作的说明:

http://www.howtogeek.com/106526/how-to-resolve-dependencies-while-compiling-software-on-ubuntu/

此外,如果你暂时忽略依赖问题,tarballs 的好处在于你可以很容易地配置许多与安装相关的事项,比如安装位置等,尤其是在从源代码安装的情况下。
另外,在这个背景下,“Debian Packages” 这个词可能会让你感到困惑。请记住,Debian 包有两种类型,就像这里所说的一样:

http://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html

当然,如果你只讨论deb文件,那么它们通常是像上面回答中所说的那种已编译软件。