如何在没有root权限的情况下成功运行make install

问题描述 投票:0回答:1

我正在尝试打包一个用 C 语言编写并由 autoconf 和 autotools 管理的 systemd 服务的 RPM。我了解到我不应该以root身份构建程序,这意味着我应该运行

make
而不是
sudo make
,这不是问题。然而,下一步运行
make install
会产生以下错误:

make[3]: Nothing to be done for 'install-exec-am'.
 /usr/bin/mkdir -p '/dbg/etc/foo'
 /usr/bin/install -c -m 644 /home/vagrant/dev/lib/foo.cfg '/dbg/etc/foo'
/usr/bin/install: cannot remove '/dbg/etc/foo/foo.cfg': Permission denied
make[3]: *** [Makefile:538: install-dist_pkgconfDATA] Error 1
(...)

如果我运行

sudo make install
,该命令将完成且不会出现错误。 Makefile 似乎是为了期望 root 权限而编写的,因为它有以下几行:

prefix = /dbg
(...)
sysconfdir = ${prefix}/etc

如何在没有root权限的情况下让

make install
成功运行?

对于上下文,我最终尝试打包 RPM,到目前为止

make rpm
命令因以下错误而失败:

config.status: creating src/Makefile
config.status: error: cannot find input file: `.libgnu/gnu/Makefile.in'
error: Bad exit status from /var/tmp/rpm-tmp.lafSd8 (%build)

但这也许是因为我以root权限运行

sudo make install

makefile rpm autotools autoconf
1个回答
0
投票

如何在没有root权限的情况下让

make install
成功运行?

如果没有权限,您无法安装到常用的系统目录。直接从源代码安装时,正常的习惯用法是以您自己的身份build,然后以root身份install

$ make
$ sudo make install

但是这对于构建 RPM 来说毫无意义,因为在 RPM 构建过程中,您无论如何都不想安装到常规系统目录。相反,您希望安装到 RPM 构建根目录。或者更准确地说,您希望将

rpmbuild
命令安装到构建根目录,如适用的 RPM 规范文件中的脚本所示。

对于具有利用 Automake 的构建系统的软件包来说,这绝对是轻而易举的事情。这样的系统生成的 makefile 会识别名为

make
的环境或
DESTDIR
变量。如果设置,其值将用作暂存区域的路径,相对于
make install
要安装的软件。在 RPM 规范文件的
%install
scriptlet 中,可能会使用如下所示的内容:

%install

make install DESTDIR="$RPM_BUILD_ROOT"

这个工具非常有用,它或类似物已被其他构建工具(例如 CMake)采用,有时甚至在手写的 makefile 中实现。

如果你的包的构建系统没有提供类似的东西,那么你必须更有创意。例如,您可以

  • 修补
    DESTDIR
    等效项,或
  • 手动安装(用于 RPM 目的)

,以及其他可能性。

但这主要是关于如何准备 RPM 规范文件。您之前的问题似乎表明该软件已经具有构建 RPM 的机制,如果是这样,您不需要自己构建规范文件。

就上下文而言,我最终试图打包一个 RPM,到目前为止 make rpm 命令失败并出现此错误:

config.status: creating src/Makefile
config.status: error: cannot find input file: `.libgnu/gnu/Makefile.in'
error: Bad exit status from /var/tmp/rpm-tmp.lafSd8 (%build)

但也许这是因为我已经用 root 运行了 sudo make install 特权?

如果您的目标是构建 RPM,那么您可能根本不需要执行

make install
,无论是否有 sudo
。可能也不是普通的
make
。这些通常是在 
rpmbuild
 的控制下完成的,我猜你的特定 makefile 愿意为你运行。有了 RPM 文件,如果您想在构建机器上安装软件,那么您可以使用 RPM 工具(
rpm
yum
 / 
dnf
)从 RPM 安装它(这
确实需要特权) ).

至于错误,它看起来像是软件包特有的失败,或者是您尝试从中构建 RPM 的某些细节的失败。请阅读该包的构建文档中有关使用其 RPM 构建功能的所有内容。所需的步骤可能很简单

$ ./configure $ make rpm
    
© www.soinside.com 2019 - 2024. All rights reserved.