在用户本地安装软件包 - 最佳实践?

在用户本地安装软件包 - 最佳实践?

我想在 RHEL 服务器上的用户本地安装 Git(我没有 root 访问权限) 将软件安装到本地用户帐户的最干净/最有组织的方式是什么?

  • 将所有内容安装在该用户主目录中?
  • 目录布局会是什么样子?
  • 您会从源代码还是 RPM 安装?
  • 如果从 RPM 您会使用 YUM 还是 RPM?

答案1

有多种方法可以使用 rpm 在用户目录中安装rpm,但我不认为这是直接的。我不相信有办法yum

我的标准做法是从源代码编译到local我家中的目录

$ mkdir ~/local
$ mkdir ~/local/bin
$ mkdir ~/local/lib
$ mkdir ~/local/include

我像/usr/local拥有 root 权限时一样下载源代码,例如,在~/local/git.

编译时我将前缀设置为local目录

$ configure --prefix=/home/user_name/local
$ make
$ make install

然后我将其添加~/local/bin到我的 $PATH 中.bash_profile

当然,从源代码安装的痛苦在于您无法获得自动依赖关系解析。如果发现需要安装依赖,就按照上面的方法编译安装即可。然后,当您编译时git,您需要更新编译标志,以便它们在正确的位置查找依赖项的库和包含文件:

./configure --prefix=/home/user_name/local LDFLAG='-L/home/user_name/local/lib' CFLAGS='-I/home/user_name/local/include' CPPFLAGS='-I/home/user_name/local/include' CXXFLAGS='-I/home/user_name/local/include'

答案2

.rpm 文件实际上是一种存档形式cpio,很像 .rpm 的简单形式tar。该rpm2cpio实用程序可能已安装在系统上,并且不需要权限即可使用;它写入标准输出,因此要转换:

rpm2cpio whatever.rpm > whatever.cpio

您可以man cpio自己查看,但您现在要做的是以“复制”模式将存档提供给 cpio:

cat whatever.cpio | cpio -i

这些内容很可能被组织成目录树,以便文件进入适当的位置(bin 等)。如果您的密码中不存在这些文件,您将收到错误消息,但这将列出存档中的文件(您可以使用-t/--list开关获得相同的结果)。如果您想自动创建目录,请使用-d.解压 rpm 的快速方法是:

rpm2cpio whatever.rpm | cpio -i -d

您可以使用它来安装到 $HOME 中。唯一的问题是程序是否希望在/etc等中找到东西,因为许多东西在编译时出于任何目的都硬编码了它们的安装位置。

从源代码构建可能是一个更好的选择(因为您可以提供正确的位置),但如果您可以使其在任何情况下都可以工作,那么它会快速而简单。

此外,午夜指挥官文件浏览器 ( mc),可能还有其他文件浏览器,将允许您导航 rpm 或 cpio(或压缩的 tar 或 zip)层次结构并复制单个文件,就像解压存档一样(它创建一个临时文件系统,用于浏览其中的存档内容)。

答案3

这是一个替代方案(不使用 yum),权限会很奇怪,但您可以chown随后向目标用户发送:--这也是一个成功或失败:-(

#-## Download all dependency for the RPM -- 
#sudo yum install yum-utils
#sudo yumdownloader --resolve --destdir ~/download bash

#-## Install all downloaded to an alternate root 
#sudo rpm --initdb --root <user_home_dir>
#sudo rpm --root <user_home_dir> -Uvh --nodeps ~/download/*

然后将适当的位置添加到您的路径中。

相关内容