如何提取 rpm 包内容

如何提取 rpm 包内容

如何在没有 root 权限的机器上安装 RPM?我想在个人工作目录中安装仅供我使用的软件包。我正在运行 SuSe SLES10。

请不要用“这个想法太愚蠢了,你不应该这样做,因为所有请求都必须经过公司根神,愿他永远活着”这样的话来斥责我。

我知道我可以向 root 神请求这个,但我会被拒绝(我确信这是出于无可挑剔的理由……)。此外,即使他说他会安装它,他也永远不会来得及安装。

答案1

cd my-dir;
rpm2cpio to-install.rpm | cpio -idv

如何提取 RPM 包而不安装它(rpm extract 命令)

答案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 可写。

也在这里回答如何在没有 root 权限的情况下在 Linux 上安装软件包?

相关内容