如何将 rpmbuild 默认目录从 /root/rpmbuild 目录更改为其他目录

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

我必须为一些驱动程序构建一个rpm包。 我需要从 .tar.gz 存档构建 rpm。 tar 球还包含 .spec 文件。 我已经按照此处所述设置了 rpmbuild 环境:http://wiki.centos.org/HowTos/SetupRpmBuildEnvironment

我的目录结构是这样的:

/home/rpmbuild
/home/rpmbuild/BUILD
/home/rpmbuild/RPMS
/home/rpmbuild/SOURCES
/home/rpmbuild/SPECS
/home/rpmbuild/SRPMS

.tar.gz 文件包含spec 文件并放置在/home/rpmbuild/SOURCES 中

如果我导航到该目录并运行以下命令,rpm 包将正确构建,但放置在 /root/rpmbuild/RPMS 而不是 /home/rpmbuild/RPMS (我期望的位置)。

sudo rpmbuild -ta driver.tar.gz

我认为这是因为我使用 sudo 运行 rpmbuild。 我的想法正确吗? 有没有办法让它在 /home/rpmbuild 中构建?

我知道以 root 身份使用 rpmbuild 是不好的做法,但如果我不以 root 身份运行它,我会遇到许多错误(没有权限访问 root 拥有的目录 - 例如 /tmp/orbit-root)。 似乎更改每个目录的权限比将它们更改回来要困难得多。

这是解决这个问题的正确方法吗? 我非常感谢您的帮助。

linux centos rpm rhel rpmbuild
4个回答
19
投票

不要使用以下命令为 rpm 创建安装树:

rpmdev-setuptree

使用以下命令在要构建 rpm 的位置创建 rpm 树:

mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

现在,将文件夹中的相应文件复制为 specstar.gz 并在 rpmbuild 目录中运行以下命令:

rpmbuild --define "_topdir `pwd`" -v -ba SPECS/{*spec_file.specs*}

2
投票

非特权用户应该有权访问

BUILDROOT
。我会检查
.rpmmacros
内的
$HOME/rpmbuild
文件,它定义了您的顶级目录在哪里。

我已经像这样设置了我的

.rpmmacros

%packager YourName
%_topdir /home/build/rpmbuild 
%_tmppath /home/build/rpmbuild/tmp

0
投票

如果您需要对系统目录的非root写入权限, 那么您的

%install
scriptlet 未安装到
%{buildroot}

您需要修补您的版本才能安装到

%{buildroot}

对于 autoconf 生成的 Makefiles,通常这样做

make DESTDIR=%{buildroot} ...

-1
投票

为了使构建文件远离默认位置,我通过使用

--root
选项来指定不同的构建根目录
rpmbuild
:

rpmbuild --root /home/rpmbuild -ta driver.tar.gz

它将将该目录视为总根目录并尝试使用

/home/rpmbuild/root/rpmbuild/{BUILDROOT,RPMS}
/home/rpmbuild/root/rpmbuild/var/tmp
。 您可能需要在调用命令之前创建后者。您可以通过在
/root/
命令前添加
rpmbuild
来删除名称中的
HOME=""
部分。

© www.soinside.com 2019 - 2024. All rights reserved.