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


12

我看到所有这些解释软件包和.debs的链接...我知道...并且有很多使tar.gz文件工作的方法(例如:Java的update-alternatives或将文件手动放在/ usr / local / bin(或其他地方,这是我从数小时的搜索中得出的)。如果软件包是如此智能,那么软件包或.debs / rpms中可用的Linux应用程序又怎么少呢?

我是作为新用户发言;我知道专家可能更了解它(我认为我可以下载Eclipse的可编译版本吗?)。就像netbeans和chrome are一样.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. 使用自动工具(我在寻找a 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
为什么不找*.deb包裹呢?
m0nhawk

@ m0nhawk总是找不到.deb文件吗?就像在Eclipse的下载页面上一样,它只是tar.gz。除非我完全想念它
Raekye

1
对于Eclipse,肯定存在Debian的软件包对于Ubuntu)。我认为,处理的最好办法*.tar.gz软件是创建相应的包:*.rpm*.deb等等
m0nhawk

1
您需要一个.desktop文件才能在菜单中显示某些内容。update-alternatives仅可用于确定您的优先级PATH
2013年

1
您的问题仍然是关于“我应该怎么做才能用______注册新软件”,其中_____是特定的桌面环境,而不是通常的“我应该怎么做WRT linux”。另外,也许对$ PATH环境变量隐含的无知?
goldilocks

Answers:


15

为什么软件包回购中没有很多应用程序?

可能有很多原因:

  • 没有人愿意打包应用程序。
  • 没有人可以打包该应用程序(例如Oracle坚持是唯一分发Java的应用程序)。
  • 该软件包是在与发行版价值相抵触的许可下发布的。
  • ...

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

如何安装压缩包?

压缩包(.tar.gz软件包)可以包含任何内容。除非您实际打开它,否则您将无法假设如何安装它。同样,每个软件包的处理方式也应有所不同。

寻找文件!任何(半)体面的软件包都将提供有关如何安装该应用程序的说明。您的第一个反应应该始终是寻找一个名为README,INSTALL或类似名称的文本文件。签出发布者的网站也可能会有所帮助。

由于每个程序包都不相同,因此没有通用的方法可以处理世界上所有的tarball。这就像在寻求一种适用于世界上所有成分的食谱。没有发生。

充分了解您的系统,发行版和桌面环境将有所帮助,因此,如果可以放心,随着您在linux世界中度过的时光,事情将变得越来越可预测。

特例:自动工具

随着项目的增长,他们需要提供简单的方法,从源代码转换为二进制代码,再完全移植到系统上。这就是为什么它们附带嵌入式构建系统(执行必要的脚本集合)的原因。

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

在最简单的情况下,以下是安装自动工具打包的应用程序的方法:

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

笔记

  • configure脚本通常具有很多选项,例如使用哪个编译器或如何定义目标目录。如果您需要灵活性,那么值得一看./configure --help
  • 即使您确定它是Autotools并且非常了解它,也请务必先阅读文档(README,INSTALL等)。

回答问题中的更新

您要的内容没有明确的答案。这里的每个人都可能对“良好实践”的构成有意见,但归根结底,只有您才能找到适合自己的方法。如果有一个简单的答案,您就不会问这个问题。您的发行版会为您解答。

话虽这么说,这里有几点个人评论。

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

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

  • /usr/local/bin具有已经在PATH中的优点。如果要使用另一个目录(如/opt我建议的那样),请确保将其包括在PATH中。如果您不知道如何执行此操作,请打开终端并在终端中执行以下操作(不是最漂亮的方法,但是在不了解您的系统的情况下,我无法提出任何其他建议):echo 'export PATH=$PATH:/opt' >> ~/.bashrc


感谢您的详细回复。我调查了自述文件,但我决定不想每次都做不同的事情。因此,经过大量研究,尝试和挫折,我提出了一个更具体的问题/规格-请参阅更新后的文章。
Raekye 2013年

不用客气,希望对您有所帮助:)我修改了答案以解决您的更新。请记住,没有“一种真正的方式”做事(除非您是emacs用户)。您必须经历反复的试验,才能随着时间的流逝了解每种不同方法的利弊。
rahmu 2013年

感谢更新!当然可以。我猜xxx.desktop通常适用于GNome。您对使用update-alternatives设置路径了解多少?
Raekye

1
据我所知,这是Debian专用的通用软件处理方式,例如具有多个浏览器或编辑器。(Ubuntu和Mint都是基于Debian的,并继承了这一点)。如果您有兴趣,这里还有更多
rahmu

好答案。通常需要(或至少是首选)的一件事是做sudo make install作为最后一步(使用您信任的软件包)。这样就赋予了该进程所需的权限,可以将其放入用户不拥有的系统目录中(例如/ usr / bin)。

8

我觉得你有自己明确要“注册”它有什么

解释一下-我并不想成为聪明的家伙-“ linux”当然是内核,并且除了init之外,内核对系统上的任何用户空间软件都不了解也不感兴趣。那么,我们在这里谈论什么呢?

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

似乎除了包装系统问题外,您还有其他问题。尽管您提到了桌面环境(例如Gnome),但我不清楚它们是什么。这些是异构的,因此根本没有人回答“我如何在linux上做到这一点”的问题-甚至不是“我如何在ubuntu上做到这一点”或“我如何在linux上做到这一点”的问题gentoo” –这是一个问题,例如“我如何在gnome桌面上执行此操作”或“如何在XFCE桌面上执行此操作”等。在我看来,唯一的问题是您提到的启动程序我想相信每个DE都提供了一种简单的方法(但不会完全一样,因为它们是不同的)。

然后有服务,这些服务由初始化系统(例如systemd或upstart)管理。因此,这个问题实际上是与以下方面相关的一系列相关问题:

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

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

再说一次,我真的在尝试提供帮助,而不仅仅是夸大:如果您要在这里解决问题,您将必须更准确地考虑这些问题是什么以及它们实际上涉及什么软件(除了“ linux”之外)。 “)如果您想解决它们。


“在发行版二进制文件中” <-/ me对基于源代码发行版的某些内容喃喃
自语

同样,XDG标准的问题可能是某些上游根本不关心它,而发行版开发人员正是提供其.desktop文件的人,因为这些任务是必需的。
njsg

我不知道上游开发人员是否应该关注这一点。我刚刚提到XDG,因为如果想使用它,最终用户可以使用它。异构性的代价是,它不可避免地给用户带来了负担,例如OSX所不愿承担的责任。有些linux发行版旨在将这种情况降到最低,您可以自由选择,但是最终,我认为对于该模型非常不满意的人应该根本不使用linux -我不确定他们为什么要使用linux。实际上,第一名。
goldilocks 2013年

我已经提出了一个更好的问题-我应该如何管理手动安装的应用程序?像Eclipse和Firefox一样,它们通常无需复杂的依赖项即可运行(因此我可以自己进行设置并下载软件包)。正如您或其他人提到的那样,它们可以独立运行,但是我应该跟踪这些应用程序,而不是将它们全部放在文件系统中吗?(请参阅更新的问题)
Raekye 2013年

Raekye:对我来说,这没有什么区别,除了需要的程度之外,您无需做任何事情来管理或“跟踪”从/ usr / local源安装的内容。出于您的目的。除了在$ PATH中进行编译和安装之外,没有通用的Linux注册表,因为这种通用方法没有任何目的。我假设您只是担心自己错过了一些东西,而您没有。你不焦油,你configure,你make install。就这样,完成了。此后的任何事情都是个人喜好问题。
goldilocks

5

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

Linux的不同发行版已在各种文件系统布局和包管理系统上实现了标准化,这就是问题所在。Redhats使用rpm,Debians / Ubuntu使用deb软件包。Arch 也采用了自己的方式。从软件项目的角度来看,除非您希望包含在发行版中,否则您的用户群将完全集中在一个发行版中,或者是旨在使所有人易于安装的商业产品,那么它们可能是您开始寻求构建的唯一要点。各种包装。

实际上,与其一起构建的源tar.gz gcc可能是常见的“ Linux软件包”的最佳定义。具有一些GNU实用程序和GCC的Linux内核几乎是您可以获得的所有不同版本的基于Linux的操作系统之间的共同点。

我不会说“很少”的东西可以作为软件包使用,因为您要寻找的特定东西不是。(或者发行商选择不打扰所有这些软件包,比如Chrome和它自己的更新过程)。有这么的软件包周围这么不同的包装系统,这么多的架构这么多免费的软件,它不好笑

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

Web上有各种有关构建软件包的指南。Debian 是其中之一

如果您只想运行已编译的程序包,则可以将二进制路径添加到您的$PATH?中。

如果您正在做其他事情,那是什么?


“如果您只想运行已编译的程序包,也许将二进制路径添加到$ PATH中?” <-我想任何合理的安装过程(例如,make install类似的方法)至少会在下面安装一个符号链接/usr/bin/,如果不能在下面安装整个链接/
njsg 2013年

通常,我想这是由于我做了很多工作--prefix=/elsewhere以使自定义构建远离常规树。
马特

1
通常,使用tarball make install安装到/usr/local/bin
Shadur 2013年

0

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

当然,当您将内容放入“主目录”副本中时,其他用户不会看到它们。

以下是~/.profiledebian wheezy 的默认设置:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.