如何在 Linux 上真正安装 tar.gz 文件 - 如何管理手动安装(或独立)的应用程序?

如何在 Linux 上真正安装 tar.gz 文件 - 如何管理手动安装(或独立)的应用程序?

我看到所有这些解释包和 .debs 的链接...我知道...并且有很多杂凑可以使 tar.gz 文件正常工作(例如:Java 的更新替代方案或者手动将文件放入 /usr/local/bin (或其他地方,这是我从几个小时的搜索中推断出来的)。如果软件包如此智能,那么软件包或 .debs/rpms 中可用的 Linux 应用程序为何如此之少?

我是作为一个新用户发言的;我知道专家可能更了解(我想我可以下载 Eclipse 的可编译版本?)。就像netbeans和chrome一样.sh,eclipse是一个简单的、可启动的目录,Java需要这项update-alternatives业务,但我不认为它会将自己注册到Ubuntu/Debian的“程序列表”(只是注册为命令)等。(我知道这些是有时在存储库中可用,但我只是很困惑为什么下载页面没有正确的解释)。

长话短说:如果下载或编译了 tar.gz 文件,如何将其注册到系统中?update-alternatives似乎将其注册为命令,在Ubuntu中,它不会显示在搜索栏中。在 Debian 中,我可以手动添加 GNOME 2 启动器的快捷方式。但我真正应该做什么?


编辑:

因此,在尝试了更多新的解决方案之后,我可以稍微完善我的“问题”:

我应该如何管理我手动安装的程序?到目前为止,Firefox 和 Eclipse 是我唯一的示例(我没有下载很多东西)。他们都可以用完盒子,这是我喜欢的。除了,我应该在哪里安装它们?我看到 Eclipse 有它自己的说明,但我宁愿以相同的方式执行所有“手动包”。

  1. 经过一番研究,我决定将这些程序放入/usr/local/bin.
  2. 如何安装eclipse,我想在启动器中显示一些内容,我需要将一个xxx.desktop文件放入~/.local/share/applications/.这个 .desktop 文件的名称重要吗?
  3. 使用自动工具(我寻找configureunix/configure文件)会很好用。我应该使用一些研究点CheckInstall来跟踪所有这些。
  4. 我应该用来update-alternatives注册路径。由此java线程,看起来我创建了一个从/usr/bin/java到 的链接/usr/lib/jvm/jdk...。当我安装这些“独立”应用程序(例如 Eclipse 或 Firefox)时,我应该始终链接到吗/usr/bin/[app]?如果断言 1 为真,我会做类似的事情sudo update-alternatives --install "/usr/bin/[app]" "[app]" "/usr/local/bin/[app]" 1

这些说明是否正确/是否是管理手动安装的好方法?我还应该遵循其他步骤吗?其他建议?

答案1

为什么很多应用程序在软件包存储库中不可用?

原因可能有很多:

没有单一的原因。如果您想在发行版的包管理器中看到您最喜欢的应用程序,则应单独处理每种情况。尝试与开发人员取得联系(例如通过 IRC 频道或邮件列表)并询问如何帮助打包。

如何安装压缩包?

tarball(.tar.gz 包)可以包含任何内容。在您实际打开它之前,您无法假设如何安装它。同样,每个包应该以不同的方式处理。

寻找文档!任何(半)像样的软件包都会提供有关如何安装应用程序的说明。您的第一反应应该始终是查找名为 README、INSTALL 或类似文件的文本文件。查看出版商的网站也可能有帮助。

由于每个包都是不同的,因此没有通用的方法来处理世界上的每个 tarball。这就像要求一个适用于世界上所有成分的食谱。没有发生。

对您的系统、发行版和桌面环境的充分了解将会有所帮助,因此,如果这令人放心,那么当您在 Linux 世界中度过时间时,事情看起来会越来越可预测。

一个特例:Autotools

随着项目变得越来越大,他们需要提供简单的方法来从源代码转移到二进制,再到系统上的完整安装。这就是为什么他们配备了嵌入式构建系统,这是执行必要操作的脚本集合。

在 Linux/开源/自由软件世界中,一种构建系统得到了更广泛的采用:GNU 自动工具。如果您曾经处理过(开放)源代码包,那么您很有可能会使用 Autotools。

在最简单的情况下,以下是安装使用 autotools 打包的应用程序的方法:

  • ./configure:将生成与您的系统相对应的 Makefile 的脚本(它还经常检查依赖项的可用性)。
  • make:根据前面生成的Makefiles编译源代码。
  • make install:将二进制文件复制到适当的位置,创建符号链接以及开发人员定义的任何其他步骤。

笔记

  • configure脚本通常有很多选项,例如使用哪个编译器或如何定义目标目录。如果您需要灵活性,那么值得考虑./configure --help
  • 即使您确定它是 Autotools 并且您非常了解它,总是首先阅读文档(自述文件、安装、...)

回答问题中的更新

你问的问题没有明确的答案。这里的每个人可能对什么是“良好实践”有自己的看法,但归根结底,只有你才能找到适合你的东西。如果有一个简单的答案,你就不会问这个问题了。您的发行版会为您解答。

话虽如此,这里有一些个人评论。

  • 在我的系统上,我保留了/usr/local/bin我的包管理器安装的包。我手动编译/安装的所有内容都会放入/opt.这是一个细节,但它有助于避免在处理同一程序的多个版本时出现严重的问题。

  • xxx.desktop以及一般的 GUI 问题特定于您所使用的桌面环境。如果它适用于您的系统,那就太好了。但它不能推广到 Unix 上的所有可用环境。

  • /usr/local/bin优点是已经在你的小路。如果您想使用其他目录(就像/opt我建议的那样),请务必将其包含在您的 PATH 中。如果您不知道该怎么做,请打开一个终端并在终端中执行以下命令(这不是最好的方法,但在不了解您的系统的情况下,我无法提出其他建议):echo 'export PATH=$PATH:/opt' >> ~/.bashrc

答案2

我认为你必须自己弄清楚你想要“注册”它的目的

解释一下——我并不是想自作聪明——“linux”当然是内核,而内核既不知道也不对系统上除 init 之外的任何用户空间软件感兴趣。那么我们在这里谈论什么呢?

您提到了许多不同的发行版。我有时会从源代码构建软件,即使它在存储库中可用,因为我想要一些未在发行版二进制文件中设置的配置选项集。我遇到的唯一问题是,如果该包是其他东西的先决条件,我确实必须将其注册到包装系统为了避免意外地将发行版包安装在我构建的发行版之上。在基于 fedora/rpm 的系统上,这是通过rpm -i --justdb <package>.我不会在基于 debian/apt 的系统上执行此操作;相反,我只是根据需要强制安装,这可能是懒惰的——看起来有更好的方法,通过创建一个假装满足任何先决条件的虚拟包。这有点类似于 m0nhawk 的建议,即从 .tar.gz 源代码实际创建一个包——只是更简单一些(老实说,我一点也不喜欢 m0nhawk 的建议)。

除了包装系统的问题之外,您似乎还存在其他一些问题。尽管您提到了桌面环境(例如 Gnome),但我不清楚它们是什么。它们是异构的,因此对于“我如何在 linux 上执行此操作”这一问题根本没有人回答——甚至不是“我如何在 ubuntu 上执行此操作”或“我如何在 ubuntu 上执行此操作”的问题gentoo”——这是一个“如何在 gnome 桌面上执行此操作”或“如何在 XFCE 桌面上执行此操作”等问题。在我看来,唯一的问题是您提到的启动器问题,我对此我愿意相信每个 DE 都提供了一种简单的方法来执行此操作(但它不会完全相同,因为它们是不同的)。还可能存在提供处理文件的默认值的问题——我认为问题是“如何使用我的文件浏览器注册命令”(Linux 上的文件浏览器也是异构集合)。

然后是由 init 系统(例如 systemd 或 upstart)管理的服务。所以这个问题实际上是一系列相关问题,可能涉及:

  • 包装系统,例如 apt 或 yum
  • init 系统,例如 systemd 或 upstart
  • 桌面环境,例如 kde 或 unity
  • 文件浏览器,例如 nautilus 或 konqueror
  • ????

不能有一个简单的统一解决方案的部分原因是(尽管XDG标准 可能提供某些部分)是“linux”不是一个简单的统一操作系统,我想它的绝大多数用户更喜欢这种方式。我经常根本不使用 DE,也从不使用它们附带的文件浏览器等。

再说一次,我真的想在这方面提供帮助,而不仅仅是武断:如果您想在这里解决一些问题,您将必须更准确地考虑这些问题是什么以及它们实际上涉及哪些软件(不仅仅是“linux”) ”)如果你想解决它们。

答案3

我认为整个问题的根本原因是 Linux 系统本身不包含“注册表”。可执行文件就是运行某些东西真正需要的全部。如果您不想指定可执行文件的完整路径,那么大多数 shell 都会在环境 $PATH 变量中列出的目录中查找它们。使用链接库等可能会变得更加复杂,但通常您不需要深入研究。

不同的Linux发行版对不同的文件系统布局和包管理系统进行了标准化,这就是问题所在。红帽使用转速, Debians/Ubuntu 使用 deb 软件包。拱我行我素以及。从软件项目的角度来看,除非您想包含在发行版中,否则您的用户群完全在一个发行版中,或者是一种旨在简化每个人安装的商业产品,它们可能是您开始寻求构建的唯一点各种套餐。

事实上,构建的源 tar.gzgcc可能是通用“Linux 包”的最佳定义。带有一些 GNU 实用程序和 GCC 的 Linux 内核几乎是您可以获得的所有不同风格的基于 Linux 的操作系统之间的共同点。

我不会说“这么少”的东西可以作为包提供,因为你正在寻找的特定东西不是。 (或者也许发行商选择不理会所有这些软件包大惊小怪的事情?就像 Chrome 及其自己的更新过程一样)。那里那么许多大约为此许多不同的包裹系统为了这么多架构对于这么多免费软件来说不好笑

如果您构建的东西没有作为您的 Linux 发行版的软件包提供,或者支持构建为软件包的选项,则将其“注册”为真正的软件包的最佳方法是为其构建一个软件包,定义所有内容这些文件应该基于您选择的软件包系统并以这种方式安装。成为一个灵魂,将您的包装工作贡献给该项目,以便其他人可以从中受益。

各种指南网络关于构建包。德班成为他们中的一员

如果您只想运行编译后的包,也许将二进制路径添加到您的$PATH

如果你在做别的事,那是什么?

答案4

我想补充一点,您也可以符号链接到~/bin/而不是/usr/bin.*.desktop文件可以放置在~/.local/share/applications/或中/usr/share/applications/。只有我使用我的计算机,并且我喜欢尽可能避免自己接触系统文件(我的主目录之外的任何内容)。

当然,当您将内容放入“主目录”对应项时,它们不会向其他用户显示。

~/.profile这是debian wheezy 的默认设置:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

相关内容