David Nehme Asked: 2010-01-07 12:11:42 +0800 CST2010-01-07 12:11:42 +0800 CST 2010-01-07 12:11:42 +0800 CST 没有root的rpm 772 是否可以在没有 root 访问权限的情况下使用 rpm? rpm 10 个回答 Voted Alex 2010-01-07T13:57:12+08:002010-01-07T13:57:12+08:00 有很多答案建议可重定位的软件包。重定位选项供管理员选择目标(例如,将目标设置为 /opt 而不是 /usr/local),并不真正用于用户权限。 虽然使用此方法可能会解决一些权限问题,但主要问题是当您执行 rpm 操作时,它正在修改 root:root 拥有的 /var/lib/rpm/__db.* 数据库。因此,正如 JPerkSter 所说的“简短回答 = 否”。设置 sudo 来满足特定需求可能是最好的选择。 Lee Goddard 2014-02-07T00:26:16+08:002014-02-07T00:26:16+08:00 考虑到上述所有情况,关于可重定位构建,您可以尝试按照此处列出的说明进行操作。 rpm --initdb --root /home/username/local --dbpath /home/username/local/lib/rpm rpm --root /home/username/local --dbpath /home/username/local/lib/rpm \ --relocate /usr=/home/username/local --nodeps -ivh package.rpm Datageek 2012-10-27T08:35:36+08:002012-10-27T08:35:36+08:00 有些软件包是可重定位的,因此它们可以在没有 root 的情况下正常工作,只需在安装时指定前缀: rpm -i my.rpm --prefix=/my/home/folder 如果包不可重定位,您仍然可以从 RPM 中提取文件并尝试运行它。您可以使用例如以下方法提取 RPM 文件: rpm2cpio 或午夜指挥官 将文件复制到您的 ~/ 文件夹中,添加任何其他依赖库并希望最好。不能保证,但您可能会得到一些不可重定位的包以这种方式工作。 Scott Pack 2010-01-07T12:47:39+08:002010-01-07T12:47:39+08:00 RPM 规范包含一个名为“relocatable”的选项。如果构建 rpm 时启用了可重定位性,则可以使用“--prefix”选项将其安装在用户指定的目录中。因此,只要满足两个条件,就可以在没有超级用户访问权限的情况下在本地安装 rpm: 该软件包最初是为了可重定位而构建的 'rpm' 二进制文件不会尝试将包添加到全局系统目录 但是,一般来说,不,您需要超级用户访问权限才能安装 RPM。虽然存在可重定位选项,但我几乎从未见过为支持它而构建的软件包。 Best Answer Zoredache 2010-01-07T13:16:29+08:002010-01-07T13:16:29+08:00 根据包的内容,您可以简单地提取rpm 的内容并从您的主目录中的某个地方使用它。即使它没有被标记为可重定位。如果包中的二进制文件具有硬编码路径,或者如果应用程序需要 root 访问权限,那么这可能是不可能的。 user12722 2014-04-25T05:31:29+08:002014-04-25T05:31:29+08:00 您可以使用不同的 dbpath 强制它安装在不同的目录下。此外,您可能不应该在不检查它们的情况下直接运行任何脚本。 这将在当前目录下放置一个 rpm 并提取脚本,以便您可以在必要时编辑和运行它们。 rpm --install --badreloc --relocate /=`pwd` -dbpath `pwd`/rpm_db --nodeps --noscripts package.rpm rpm --query --scripts -p package.rpm > scripts.txt sciurus 2014-04-25T07:28:57+08:002014-04-25T07:28:57+08:00 是的,但您可能不想这样做。我使用自定义 puppet 清单和 rpm 包来维护我没有 root 访问权限的计算集群上的软件。理论上它很简单 rpm --inittb --root /foo rpm --dbpath /foo -i bar.rpm 但是,这在 EL4、EL5 和 EL6 中的行为方式存在一些怪癖,因此您需要为每个步骤设置不同的步骤和选项。我手头没有这些信息了。这些怪癖,以及频繁的 RPM 数据库问题(可能是由于 NFS),让我后悔使用 rpm。 JPerkSter 2010-01-07T12:24:21+08:002010-01-07T12:24:21+08:00 您可以在没有 root 访问权限的情况下构建 RPM,只需在您的主目录中进行。至于安装 RPM,我会说简短的回答 = 否。 krubo 2021-01-14T15:49:52+08:002021-01-14T15:49:52+08:00 扩展 Zoredache关于从 RPM 中提取文件而不安装的链接: 如果您有一个名为 的包文件foo.rpm,您可以使用以下命令在当前目录路径下提取其文件: rpm2cpio foo.rpm | cpio -idmv 例如,如果您在其中执行此操作/home/myself并且包中包含文件/lib/foo.soand /usr/bin/foo,则这些文件将被提取到/home/myself/lib/foo.soand/home/myself/usr/bin/foo中。 Rajat 2010-01-07T12:35:20+08:002010-01-07T12:35:20+08:00 不,没有 root、su 或 sudo 访问权限是不可能的 rpm
有很多答案建议可重定位的软件包。重定位选项供管理员选择目标(例如,将目标设置为 /opt 而不是 /usr/local),并不真正用于用户权限。
虽然使用此方法可能会解决一些权限问题,但主要问题是当您执行 rpm 操作时,它正在修改 root:root 拥有的 /var/lib/rpm/__db.* 数据库。因此,正如 JPerkSter 所说的“简短回答 = 否”。设置 sudo 来满足特定需求可能是最好的选择。
考虑到上述所有情况,关于可重定位构建,您可以尝试按照此处列出的说明进行操作。
有些软件包是可重定位的,因此它们可以在没有 root 的情况下正常工作,只需在安装时指定前缀: rpm -i my.rpm --prefix=/my/home/folder
如果包不可重定位,您仍然可以从 RPM 中提取文件并尝试运行它。您可以使用例如以下方法提取 RPM 文件:
将文件复制到您的 ~/ 文件夹中,添加任何其他依赖库并希望最好。不能保证,但您可能会得到一些不可重定位的包以这种方式工作。
RPM 规范包含一个名为“relocatable”的选项。如果构建 rpm 时启用了可重定位性,则可以使用“--prefix”选项将其安装在用户指定的目录中。因此,只要满足两个条件,就可以在没有超级用户访问权限的情况下在本地安装 rpm:
但是,一般来说,不,您需要超级用户访问权限才能安装 RPM。虽然存在可重定位选项,但我几乎从未见过为支持它而构建的软件包。
根据包的内容,您可以简单地提取rpm 的内容并从您的主目录中的某个地方使用它。即使它没有被标记为可重定位。如果包中的二进制文件具有硬编码路径,或者如果应用程序需要 root 访问权限,那么这可能是不可能的。
您可以使用不同的 dbpath 强制它安装在不同的目录下。此外,您可能不应该在不检查它们的情况下直接运行任何脚本。
这将在当前目录下放置一个 rpm 并提取脚本,以便您可以在必要时编辑和运行它们。
是的,但您可能不想这样做。我使用自定义 puppet 清单和 rpm 包来维护我没有 root 访问权限的计算集群上的软件。理论上它很简单
但是,这在 EL4、EL5 和 EL6 中的行为方式存在一些怪癖,因此您需要为每个步骤设置不同的步骤和选项。我手头没有这些信息了。这些怪癖,以及频繁的 RPM 数据库问题(可能是由于 NFS),让我后悔使用 rpm。
您可以在没有 root 访问权限的情况下构建 RPM,只需在您的主目录中进行。至于安装 RPM,我会说简短的回答 = 否。
扩展 Zoredache关于从 RPM 中提取文件而不安装的链接:
如果您有一个名为 的包文件
foo.rpm
,您可以使用以下命令在当前目录路径下提取其文件:例如,如果您在其中执行此操作
/home/myself
并且包中包含文件/lib/foo.so
and/usr/bin/foo
,则这些文件将被提取到/home/myself/lib/foo.so
and/home/myself/usr/bin/foo
中。不,没有 root、su 或 sudo 访问权限是不可能的 rpm