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

use*_*386 12 linux centos rpm rhel rpmbuild

我必须为某些驱动程序构建 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
Run Code Online (Sandbox Code Playgroud)

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

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

sudo rpmbuild -ta driver.tar.gz
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 15

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

rpmdev-setuptree
Run Code Online (Sandbox Code Playgroud)

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

mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
Run Code Online (Sandbox Code Playgroud)

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

rpmbuild --define "_topdir `pwd`" -v -ba SPECS/{*spec_file.specs*}
Run Code Online (Sandbox Code Playgroud)


小智 0

如果您需要对系统目录的非 root 写入权限,则您的%installscriptlet 不会安装到%{buildroot}.

您将需要修补您的构建以安装到%{buildroot}.

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

make DESTDIR=%{buildroot} ...
Run Code Online (Sandbox Code Playgroud)