向用户本地安装软件包-最佳做法?


18

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

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

Answers:


17

有多种方法可以使用来在用户目录中安装rpm rpm,但我认为这并不简单。我不相信有办法yum

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

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

我以/usr/localroot 身份下载源代码,例如在中~/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'

这非常完美,谢谢您的建议!
有线

13

.rpm文件实际上是一种cpio存档形式,非常类似于.rpm 的简单形式tar。该rpm2cpio实用程序可能已安装在系统上,不需要特权即可使用。它写入标准输出,因此要进行转换:

rpm2cpio whatever.rpm > whatever.cpio

有一个man cpio你可以看看自己,但是你现在要做的就是饲料归档的cpio在“副本”模式是什么:

cat whatever.cpio | cpio -i

这些内容很可能被组织到目录树中,以便文件进入适当的位置(bin等)。如果您的pwd中不存在这些文件,则会出现错误,但这将列出存档中的文件(您可以使用-t/ --list开关获得相同的内容)。如果要自动创建目录,请使用-d。因此,打开rpm包装的快速方法:

rpm2cpio whatever.rpm | cpio -i -d

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

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

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


0

这是另一种选择(不使用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/*

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

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.