如何在没有 root 权限的机器上安装 RPM?我想在个人工作目录中安装仅供我使用的软件包。我正在运行 SuSe SLES10。
请不要用“这个想法太愚蠢了,你不应该这样做,因为所有请求都必须经过公司根神,愿他永远活着”这样的话来斥责我。
我知道我可以向 root 神请求这个,但我会被拒绝(我确信这是出于无可挑剔的理由……)。此外,即使他说他会安装它,他也永远不会来得及安装。
答案1
cd my-dir;
rpm2cpio to-install.rpm | cpio -idv
答案2
如何提取 rpm 包内容
export ins=foo-bar.rpm
rpm2cpio $ins | cpio -idv
如何提取tar.gz
档案
gzip -dc foo-bar.tar.gz | tar xvf –
cd foo-bar-dir
如何将tar.gz
包提取到当前目录
export file=foo-bar.tar.gz
# Note that `xovf` switch order *matters*
gzip -dc $file | tar -xovf -
如何以非 root 身份构建二进制文件
./configure --prefix=$HOME && make && make install
答案3
我认为在没有 root 权限的情况下“安装” rpm 的“真正”答案是,你不能。但假设您实际上可以启动安装过程……
RPM 使用规范文件 (.spec) 中提供的一系列说明进行安装,这些说明通常遵循文件系统层次结构。该层次结构中的大多数路径几乎始终是操作系统路径,而不是用户路径。因此,除非您的用户名可以访问 RPM 安装到的所有路径,否则它肯定会失败。如果您创建一个在其所有路径前加上前缀的 RPM /home/me
(或您拥有的其他路径),那么它将起作用。这将需要获取 src.rpm 并按照其他答案中的说明提取它,然后重建它。到那时,您可能只考虑获得 root 访问权限或从头开始构建软件(如果您不打算将软件分发到多台机器上,通常会这样做)。
有一些巧妙的技巧可以帮助您完成手动构建过程。例如,您可以利用 RPM 中已列出的依赖项来获取所有依赖项:https://stackoverflow.com/a/13877738/1236128。
答案4
您可以尝试--prefix
和--dbpath
选项。并非所有 RPM 都支持--prefix
,但如果您自己制作 RPM,那就不是问题,只需使它们可重定位即可。
我已经成功将系统 rpm DB 复制/tmp/lib/rpm
到我自己的目录并通过 指定--dbpath
。然后我可以rpm -i
在不使用 root 的情况下运行。当然,您现在拥有 DB 的私人副本,并且当您的 IT 安装新软件包时它将变得过时 - 并且其他用户不会知道您私人安装的软件包。但是,嘿,考虑到您提出的问题,这可能没问题。
不幸的是,分发您的 RPM 仍然需要其他用户通过 IT 或创建他们自己的数据库,例如。
rpm -ivh --dpath ~/rpmdb --prefix ~/ mypkg-1.0-1.el8.x86_64.rpm
您还可以要求您的 IT 使系统 RPM DB 可写。