You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置make rpm目标指向$HOME/rpmbuild/SOURCES而非root目录

解决sudo make rpm时指向/root/rpmbuild的问题

问题根源

你用sudo make rpm时,命令是以root身份执行的,默认不会继承当前用户的环境配置(包括你的~/.rpmmacros),所以rpmbuild会使用root用户的默认配置——而root的~/.rpmmacros要么不存在,要么没设置%_topdir,导致脚本尝试访问不存在的/root/rpmbuild/SOURCES。

解决方法

1. 直接以普通用户身份执行make rpm(推荐)

RPM打包不需要root权限,跳过sudo直接运行:

make rpm

这样会加载你当前用户的~/.rpmmacros,自动指向$HOME/rpmbuild/SOURCES。

2. 让sudo继承当前用户环境

如果必须用sudo执行,加上-E参数保留当前用户的环境变量(包括HOME):

sudo -E make rpm

3. 配置root用户的rpmmacros

给root用户创建相同的~/.rpmmacros配置:

echo '%_topdir %(echo $HOME)/rpmbuild' | sudo tee /root/.rpmmacros

然后确保root的rpmbuild目录结构存在:

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

4. 检查Makefile是否硬编码路径

打开项目的Makefile,搜索rpm目标,看是否有硬编码/root/rpmbuild的语句,比如:

rpm:
    cp ./your-source.tar.gz /root/rpmbuild/SOURCES/

如果是,将路径修改为使用$(HOME)变量:

rpm:
    cp ./your-source.tar.gz $(HOME)/rpmbuild/SOURCES/

或者调用rpmbuild时显式指定topdir:

rpm:
    rpmbuild --define '_topdir $(HOME)/rpmbuild' -ba your-package.spec

额外提示

打包RPM前不需要执行sudo make install,RPM打包流程会自行完成编译、安装到临时目录的步骤,直接运行make rpm即可。

内容的提问来源于stack exchange,提问作者wwillfred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:32:16