rpmbuild创建带"/"的var文件及RPM无内容的spec配置咨询
解决RPM构建空包&根目录文件配置问题
作为刚上手rpmbuild的新手,你遇到的这俩问题简直是入门标配坑,咱一步步捋清楚:
一、为啥生成的RPM是空的?
最常见的原因就是没把文件正确放到构建根目录(BUILDROOT),或者%files段没正确声明要打包的文件,具体排查步骤:
- 先检查你的
%install段:必须把要打包的文件复制到$RPM_BUILDROOT对应的路径下,比如你要打包myapp到/usr/bin,那得这么写:
要是直接复制到系统真实路径(比如install -m 755 myapp $RPM_BUILDROOT/usr/bin//usr/bin),rpmbuild根本找不到要打包的文件,自然是空包。 - 再核对
%files段:这里必须列出你要打包的文件路径(注意是相对于系统根的路径,不是BUILDROOT),比如上面的例子就写:
要是%files段是空的或者路径写错了,RPM也会是空的。%files /usr/bin/myapp - 临时排查技巧:构建时加
--verbose参数,比如rpmbuild -ba --verbose myspec.spec,看输出里有没有复制文件的日志,或者直接去BUILDROOT目录(一般在~/rpmbuild/BUILDROOT/下)里找,看看有没有你要打包的文件。
二、如何打包根目录下的文件?
其实逻辑和上面一致,核心就是在%install段把文件放到BUILDROOT对应的根路径下,然后在%files段声明这个绝对路径:
举个实际例子,我要打包一个/etc/myconfig.conf文件:
- 在
%install段先创建对应目录,再复制文件:# 先确保BUILDROOT下的/etc目录存在,避免复制失败 mkdir -p $RPM_BUILDROOT/etc # 复制文件并设置合适的权限 install -m 644 myconfig.conf $RPM_BUILDROOT/etc/ - 在
%files段直接写这个绝对路径:
这样构建出来的RPM安装后,就会把%files /etc/myconfig.confmyconfig.conf放到系统的/etc目录下。
另外提个小细节:rpmbuild会自动继承你在%install里设置的文件权限,安装时会保持这个权限,不用额外配置。
内容的提问来源于stack exchange,提问作者radas
相关产品推荐
相关产品推荐

