大多数 Linux 软件都打包在 tarball 中。所有这些都需要一些命令来编译和安装它们。
我的问题是;我们有用于独立 debian 软件包的 gdebi,那么为什么不使用同样的方式安装 tarball 的应用程序呢?为什么这样一个看似简单的过程没有自动化?为什么我们必须继续用编译软件的想法来恐吓和赶走新用户?
大多数 Linux 软件都打包在 tarball 中。所有这些都需要一些命令来编译和安装它们。
我的问题是;我们有用于独立 debian 软件包的 gdebi,那么为什么不使用同样的方式安装 tarball 的应用程序呢?为什么这样一个看似简单的过程没有自动化?为什么我们必须继续用编译软件的想法来恐吓和赶走新用户?
这些过程是自动化的。您主要在 .deb 或 .rpm 包中获取它们。tarball 和 .deb 之间的唯一区别(在您考虑的级别上)是编译。Tarball 通常包含源代码和 make 文件,而不是预编译的二进制文件(尽管它们有时也包含这些)。.debs 是跨多个架构预编译的。
给你打个比方:
a .deb 是一辆载有整车的卡车。
tarball 是一辆载有汽车零件盒的卡车和一本告诉您如何组装零件以获得汽车的手册。
因此,当您从 .deb(或那些“其他”发行版上的 .rpm)安装某些内容时,您安装的内容与您将在该 tarball 中获得的内容相同,只是已经为您完成了工作。
尽管我不同意 txwikinger 关于进展/回归的观点。tarball 没有任何问题,我经常使用它们来打包代码或屏幕截图、日志文件,或者出于各种原因您要发送给人们的内容。我还下载源 tarball 以阅读程序的源代码,以便在遇到问题时查看发生了什么。
与其花时间简化 tarball 的安装,不如花时间为 Debian/Ubuntu 打包软件更有益。这不仅会增强基于 Debian 的发行版(例如 Ubuntu)的产品,还会正确安装依赖项
tarball 通常是高度可定制的。尽管其中 90% 的用户只需要 ./configure && make install,但其他一些需要自定义参数,或者在最坏的情况下,他们使用不同的步骤来构建应用程序。
恕我直言,作为普通用户,您不必处理 tarball。您最好先检查它是否在某人的存储库中。
tarballs(作为最终用户的安装方法)的问题在于: - 如果出现问题,您需要非常精通技术来修复它 - 不一定遵循 disto 的文件夹结构 - 并不总是可以轻松再次卸载软件。
对于您的第二个问题:是的,这个过程是使用 debian-source 包或 rpm-source 包自动完成的。但这些都不是问题,我认为它们可以在 gdebi 中打开。我不确定您是否知道,但 tarball 是开发人员将其代码发布到世界的最简单方法。无论他们的项目有什么混乱,只需压缩源并上传它——这是我知道的对 tarball 的唯一要求:它必须包含某些应用程序的源并最终提供构建脚本。
因此,即使直接使用这些 tarball 不起作用,我认为您在这里触及了一个非常重要的问题:linux 打包是一团糟。即使对于单个发行版,它也需要做很多工作,而且对于一个小项目来说,维护各种发行版的软件包几乎是不可能的。
有(并且仍然有)一堆项目试图统一跨发行版的打包,但是afaik这从来没有真正去任何地方。至少没有什么比 Windows 的 msi 包或 mac 上的 dmg 更常见的了。
我知道这个答案一定令人沮丧,但如果我最近没有错过一场革命,那么这就是我们现在所坚持的。
Checkinstall可以从源代码生成 deb。(它还可以生成 RPM 和 slackeware 软件包)
然后运行 ./configure
创建一个 debian 包。
我认为该工具主要是为了让您可以在自己的机器上干净地升级和删除软件,而不是为其他人创建发行版 - 但如果您没有复杂的依赖关系,它应该可以满足您的需求。
如果你经常这样做,你可以编写一个小 bash 脚本......
将其称为 tarinstall (或其他名称),将其放在您的路径中,然后执行以下操作:
虽然我同意使用像 .debs 或 .rpms 这样的打包系统要好得多。
不同的应用程序由不同的开发人员以不同的标准编写。让一个应用程序安装所有 tarball 将被证明是一项非常困难的任务。相反,我们有预编译的 deb。tarball 还提供了一个依赖问题,debian 和衍生产品已经用 apt 和 aptitude 解决了这个问题,而仅使用 tarball 几乎是不可能实现的。
作为普通用户,您可能不想到处安装 tarball。Debian 和 Ubuntu 团队在将上游软件包放入存储库之前花费了大量时间来定制和验证上游软件包。制作一个包是一大堆依赖关系和特定于分发的安装脚本。没有简单的方法来自动化这个过程。
但是,如果您是程序员或者您正试图为上游项目做出贡献,您最终需要安装官方 tarball。虽然不是自动的,但有一些工具可以帮助简化该过程。
如果您只是想修补已安装程序中的一些错误,您可以使用
apt-get source
packagename获取源代码并破解。如果您想将该补丁发送到上游,最好从上游 tarball 开始。大多数项目都使用自动工具来自动执行大量编译时决策。您通常可以判断项目是否使用自动工具,因为文件夹中有一个配置脚本。如果有,您可以使用一行来构建和安装包
./configure && make && make install
。除非您之前已经构建过包,否则它可能会失败,因为您缺少一些编译时依赖项。如果您尝试安装的软件包已经在 Ubuntu 存储库中,您可以让 APT 自动安装使用
apt-get build-dep
packagename编译 tarball 所需的所有库。如果没有新的依赖项,这通常是您在编译程序之前需要做的所有事情。如果它不在您自己的 Ubuntu 存储库中,请查看项目的文档以了解它需要什么。该过程的一个问题
./configure && make && make install
是通常没有make uninstall
. 有一个名为 checkinstall 的程序将为您运行 make install 并在 APT 中注册该软件包,以便您以后可以卸载它。但是 checkinstall 并不总是有效,并且根据您安装的软件包对系统的重要性,它可能非常危险。.deb 包是包含必要信息的 tarball,以进行适当的包管理添加到其中。
如果您只是安装一个 tarball,如何确保满足所有依赖项?所有必要的库都安装了吗?
您想如何删除仅由 tarball 安装的软件包?
您将失去基于 debian 的软件包管理提供的所有保护措施,尤其是让新用户安装软件变得如此容易。让他们更容易按原样安装 tarball 将是倒退,而不是进步。
抛开这个,怎么可能
进一步简化?(如果您考虑需要能够处理上述问题的用户)
正如上面的帖子
checkinstall
将帮助您以有效的方式安装和卸载源应用程序。由于它创建了本机包(用于 redhat 风格的 rpm 和用于包括 ubuntu 在内的 debian 风格的 deb),因此使用本机包管理器(如软件中心)非常容易管理这些包。查看这篇文章了解更多信息:findasolution.in checkinstall package management made easy in linux。它最初是为 Centos 返回的,但也可以在 ubuntu 中工作。