如何“全局”安装 tar 文件?

如何“全局”安装 tar 文件?

我想以这样的方式安装本地 tar 文件,以便它可以在命令行上立即可用,就像我使用“sudo apt-get install XYZ”一样(假设没有依赖项)。

我知道如何解压 tar,然后使用 configure/make 进行编译,但这只会留下一个可执行文件,我必须稍后添加路径。

我想我可以复制到 /bin 并完成它,但我只是想知道这里的标准做法是什么。

作为奖励,如果知道如何使用 RPM 和其他类型的软件包来完成此操作,那就太好了。

答案1

这个答案是基于多条聊天消息我发布了,现在作为扩展摘要。

环境$PATH变量

通过“在命令行上立即可用”,我假设您的意思是您可以像 一样运行它name,而不必键入类似 的内容/path/to/name,例如/home/galahad/bin/name./name

你的$PATH环境变量包含以 - 分隔的目录名称列表:。当您在 shell 中运行包含/字符的命令时,它会被解释为要运行的可执行文件的确切位置和名称。但是当你运行一个命令时不是包含 a /,您的 shell 会在目录中搜索$PATH该名称的可执行文件,并运行它找到的第一个。 (它还可能记住您之前运行过的可执行文件所在的位置。因此,实际上,它不必每次都搜索它们。)

这就是为什么./name运行name位于当前目录中的可执行文件的常见方法。相反,运行name时会搜索$PATH.

如果你运行echo "$PATH"你会看到类似这样的东西,尽管它很可能不完全是这样的:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

中的目录$PATH不必被调用bin,但这很常见。

配置您的构建

./configure当您拥有通过运行和编译的源代码时make,您通常会使用make install(或sudo make install) 来安装它。这会将文件从构建目录复制到安装位置。当您要安装的东西提供可执行命令时,这些可执行文件通常会复制$PATH$PATH.

尽管构建和安装软件通常就像运行./configure, make,有时运行make checkmake test,然后运行make install​​或一样简单sudo make install,但有时您会希望将选项传递给configure脚本来配置构建。尤其,正如 pfnuesel 所说,这就是您的配置方式在哪里将要安装该软件。尽管该make install步骤实际上安装了软件,但通常会在该./configure步骤中建立安装所有内容的位置。

最常见的选项是--prefix.当您不知道configure使用什么时,默认前缀通常是/usr/local. (有时,程序或库的源代码默认为其他前缀。幸运的是,这种情况很少见。)

所以./configure通常相当于./configure --prefix=/usr/local.要在您的主目录中安装软件,您可以使用./configure --prefix=/home/galahad(如果/home/galahad是您的主目录)或--prefix="$HOME".当然,您仍然必须使用 来构建和安装软件make。我应该说,并非所有以源代码形式分发的软件都是这样构建的。您应该始终在提取的源代码存档中查找文档。

什么--prefix意思

当您运行时,您表明该软件应安装在./configure --prefix=directorydirectory目录。但这很少(如果有的话)将松散的文件放入directory。相反,它将用于不同目的的文件放置在不同的子目录中directory。如果这些子目录不存在,则会创建它们。

可执行文件通常会进入,但如果它们通常用于系统管理,则directory/bin可能会进入,或者如果它们是游戏,则可能会进入(现在更罕见)。库进入或另一个类似命名的目录,例如.头文件进去。手册页进入。软件使用的数据文件放入.directory/sbindirectory/gamesdirectory/libdirectory/lib32directory/includedirectory/mandirectory/share

这就是它的意义directory成为一个字首。它是包含将安装不同文件的位置的父目录。因此它显示为前缀在里面绝对路径make install通过运行或创建的大多数文件和目录sudo make install

但也有一些例外。系统范围的配置文件——有时在安装使用它们的软件时创建,但并非总是如此——通常放在/etc.这通常不会受到指定不同前缀的影响。即使您在 中安装了很多软件/usr/local,它仍然会主要使用/etc,并且您的/usr/local/etc目录可能不存在、为空或包含很少的文件。

在许多系统上,您可以通过运行找到有关典型文件系统布局的更多信息man hier。如果您使用 GNU/Linux 系统,您可能会对文件系统层次结构标准

您的系统安装软件的位置

系统中的大多数程序,包括绝大多数 GNU/Linux 操作系统中的包管理器安装的程序(GoboLinux是一个例外)和其他一些类 Unix 系统,安装时带有前缀/usr.您很少应该将该前缀传递给./configure,因为您通常希望避免与系统提供的软件发生冲突。

/usr允许位于网络共享或分区上,否则在引导过程的早期尚未安装。此时必须可访问的软件通常安装在/.这就是为什么/usr/bin和都/bin存在以及为什么sh通常是/bin/sh

包管理

大多数包管理器都支持安装二进制文件(尽管也有例外)。通常,当您使用包管理器在 GNU/Linux 系统中安装软件时,您正在安装二进制包。在这种情况下,包管理器本身不会编译任何内容。但是,安装仍然涉及将文件复制或提取到文件系统中的位置。

这就是我说你的包管理器安装大多数带有/usr.我并不是说它一定会运行./configure --prefix=/usr或任何./configure命令。

不同的操作系统有不同的包管理器。如果您使用的是 Debian 或 Ubuntu 等发行版,该发行版专为您使用dpkgapt-get、 和等实用程序而设计aptitude,那么您应该不是通常尝试使用 、 和 来rpm安装yum软件dnf

但不同包管理器的核心原则是相同的。当包管理器安装命令时,它通常会进入预期位于用户$PATH环境变量中的目录。在 GNU/Linux 系统中,包管理器通常管理所有的系统 - 除了您以其他方式安装的任何内容 - 因此安装大多数带有前缀 的软件/usr,从而将大多数可执行命令放在/usr/bin. (当然,就像运行make install或 一样sudo make install,包管理器通常也会将其他文件安装到其他位置。)

答案2

如果您要安装的程序遵循良好的做法,您可以使用以下命令安装它

./configure
make
make install

./configure检查您的系统是否满足所有要求并配置安装选项。make编译所有内容,并将make install所有必要的文件复制到正确的位置。您不想手动执行最后一步,因为将所有库、手册页等放到正确的位置将是相当乏味的。

您还可以定义软件包的安装位置。例如,如果您想在主目录中安装软件包(因为例如您没有管理员权限),您可以使用

./configure --prefix="$HOME"/somefolder

make install然后将其安装到该文件夹​​中。不过,通常您不需要这个。

相关内容