【问题标题】:How to change rpmbuild default directory form /root/rpmbuild directory to other如何将 rpmbuild 默认目录从 /root/rpmbuild 目录更改为其他目录
【发布时间】:2014-07-20 21:13:14
【问题描述】:

我必须为某些驱动程序构建一个 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 文件包含规范文件,位于 /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)。更改这些目录中的每一个的权限似乎比将它们更改回来要困难得多。

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

【问题讨论】:

  • 永远不要以root 运行rpmbuild。你可以很容易地毁掉你的整个系统。

标签: linux centos rpm rhel rpmbuild


【解决方案1】:

不要使用以下命令为 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。我会检查 $HOME/rpmbuild 内的 .rpmmacros 文件,它定义了您的顶级目录在哪里。

    我已经像这样设置了我的.rpmmacros

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

    【讨论】:

    • tmppath 是关键
    【解决方案3】:

    如果您需要系统目录的非 root 写入权限, 那么你的%install scriptlet 没有安装到%{buildroot}

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

    对于 autoconf 生成的 Makefile,这通常是这样的

    make DESTDIR=%{buildroot} ...
    

    【讨论】:

      【解决方案4】:

      为了将构建文件保留在默认位置之外,我使用 --root 选项来指定不同的构建根目录 rpmbuild

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

      它会将该目录视为总根目录并尝试使用/home/rpmbuild/root/rpmbuild/{BUILDROOT,RPMS}/home/rpmbuild/root/rpmbuild/var/tmp。后者您可能需要在调用命令之前创建。您可以通过在 rpmbuild 命令前面加上 HOME="" 来删除名称中的 /root/ 部分。

      【讨论】:

        猜你喜欢
        • 2019-10-31
        • 1970-01-01
        • 2014-03-22
        • 2021-11-30
        • 1970-01-01
        • 2016-02-09
        • 1970-01-01
        • 2023-03-06
        • 2015-08-19
        相关资源
        最近更新 更多