我想在 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/*
然后将适当的位置添加到您的路径中。