![为什么不是所有的 Linux 软件包/软件都采用 .deb 格式?](https://linux22.com/image/851590/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%8D%E6%98%AF%E6%89%80%E6%9C%89%E7%9A%84%20Linux%20%E8%BD%AF%E4%BB%B6%E5%8C%85%2F%E8%BD%AF%E4%BB%B6%E9%83%BD%E9%87%87%E7%94%A8%20.deb%20%E6%A0%BC%E5%BC%8F%EF%BC%9F.png)
软件包.deb
的安装非常简单,就像.exe
在 Windows 中一样,只需双击并通过 USC 安装即可。我不知道为什么有些开发人员会选择像.tar.gz
(这让我害怕极了)这样安装起来很复杂的格式。
可能并非所有 Linux 分支都兼容.deb
;是吗?
为什么 Linux 社区不为包管理设置一些标准,以便每个软件都可以采用这种.deb
格式(我喜欢这种格式,因为它安装简单),最终用户将受益。
答案1
这是因为 Linux 生态系统包含许多不同的子分支(点击图片可查看大图)1:
现在,这些发行版之间的一个基本区别是它们使用的包管理器。Debian 及其衍生产品(其中之一是 Ubuntu)使用dpkg
处理包的包管理.deb
器。另一个大玩家是 RedHat 包管理器(rpm
),它处理.rpm
包。其他发行版有自己的系统或使用包装器直接从源代码安装,甚至根本没有包管理器。
无论如何,.tar.gz
格式是
实际上不是一种格式。这就是所谓的压缩 tarball。
tar
创建档案 (.tar
),然后将其传递gzip
以压缩它们 (.gz
)。请参阅这里更多细节。不是安装程序。它只是文件/目录的集合,在源 tarball 的情况下,是程序的源代码。
不以任何方式特定于源代码或程序。你可以将其视为
.tar.gz
Windows(而不仅仅是).zip
文件的等价物。它们能包含安装程序,或者可以包含 word 文档或其他任何内容。
并非所有 Linux 程序都打包为.deb
文件,是因为虽然.deb
这种方式确实很流行,但并不适用于所有发行版。因此,开发人员可以尝试将他们的应用程序打包到尽可能多的发行版,或者直接提供源代码,让用户自己编译。直到几年前,绝大多数 Linux 程序都是以这种方式分发的。预打包程序的种类相当少。
近年来,随着该.deb
格式的普及度大幅提升,这种情况发生了变化,这在很大程度上归功于 Ubuntu 和 Linux Mint 的普及。
并非每个人都会使用的原因.deb
在于,每种方法(dpkg/apt-get
、rpm/yum
等pacman
)都有其忠实的粉丝。如果我只将我的程序发布为 ,那么.deb
并不是每个人都能使用它。确保任何GNU/Linux 用户将能够使用我的软件,将其作为源代码发布并让他们手动编译。
最后要说的是,你真的不应该害怕这样的程序。虽然整理依赖关系确实很麻烦,但大多数开发人员都会在他们的网页上清楚地说明依赖关系,只要你安装了它们,从源码包安装软件就很容易了:
提取文件
tar xvzf software.tar.gz
移动到提取文件的新创建的目录中
cd software/
配置
./configure
编译
make
安装
sudo make install
这一切可以浓缩为:
tar xvzf software.tgz; cd software; ./configure && make && make install
1图片取自这个维基百科页面。
答案2
其实还有其他.deb
选择
.deb
packages 代表debian packages
。它是由Debian Linux Distribution
另一个主要参与者rpm
是RedHat package manager
Linux 依赖开源。因此大多数压缩文件.tar.gz
都是源代码
你必须在任何 Linux 发行版上进行编译并运行,如下所示:
tar -xvf yourdownloadedpackagefilename.tar.gz
cd yourdownloadedpackagefilename
./configure
make
make install
笔记:您应该仔细阅读 README 文件,因为并非所有源包的行为都相同!
但在处理包管理器时情况并非如此。它们依赖于发行版。
希望有帮助
我找到了这个引用定义包管理器之间的区别非常有帮助:
这两个组都是“软件包管理器”,它们大大简化了安装、更新、维护和删除软件的过程。“deb”文件供源自 Debian 发行版(Ubuntu 是其变体)的“dpkg”实用程序使用,“rpm”文件供 RedHat 软件包管理器使用,RedHat 软件包管理器是源自 Red Hat 发行版的一个类似但非常不同的实用程序。
在软件包管理器出现之前,安装新软件的过程非常复杂,许多非极客对此望而却步。您必须找到其源代码,然后编译并链接源代码为可执行二进制文件。第一次尝试这样做通常会得到一长串有关缺少库文件的错误消息 - 您必须搜索、安装并重复该过程。
软件包管理器实用程序可以将所有这些“依赖项”列在一个文件中,该文件还包含描述和可运行的二进制程序文件。软件包管理器负责获取所有需要的依赖项,并处理新软件的初始配置。
虽然两种不同类型的管理器本质上执行相同的工作,但它们的文件不能直接互换。确实存在将 RPM 文件转换为 DEB 格式的实用程序,但不能保证转换后的 RPM 文件会自动正确配置 Debian 文件位置标准(在某些方面,该标准与 Red Hat 及其后代的标准有很大不同)。
我希望这能有所帮助;并非所有发行版都使用包管理器,因此,如果您想了解有关“旧方法”的更多信息,可以尝试使用 Slackware 或 GenToo 之类的东西!这可能会告诉您比您愿意学习的更多内容
答案3
确实,因为问题错误。
就像问“为什么我也可以买到蛋糕和面粉、鸡蛋和糖?吃蛋糕这么容易,为什么有人还要卖其他东西?”
.deb
是包含(通常)已编译程序的软件包,这些程序由某人编译、安装、配置并适应特定操作系统。有人负责处理依赖项、副作用等。请注意,.deb
Ubuntu 和其他几个发行版(如 debian、Mint 等)都使用这种格式……即使您可以在 Ubuntu 中安装 debian .deb,并且通常它可以正常工作,但也不能保证一定如此。其他发行版有不同的打包系统(rpm、pacman,甚至 slackware 的 .tar.gz)。
.tar.gz
是一组压缩的存档文件。想想看.zip
。它可以是任何东西。软件、照片集、源代码、编译代码,甚至是发行版的软件包,随便什么都可以。
答案4
这是因为其中.tar.gz
包含源代码,因此您可以随意浏览。此外,这也使开发人员有机会为您提供README
不要让它们吓到你——你所要做的就是阅读INSTALL
通常捆绑的文件(或在 README 中)——
通常,它很简单:
./configure
make
make install
瞧!