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

Ubuntu20下rpmbuild构建RPM报cannot create regular file错误

问题根因

核心故障是Windows风格换行符(CRLF,即\r回车符,对应ASCII八进制码015)污染了打包配置或源文件,属于Linux下非常典型的跨系统编辑文件引发的隐形字符问题:

  • 报错路径末尾的$'\r'、目录结构中BUILDROOT路径下出现的异常目录名alascript\015都是直接证据
  • 如果是在Windows系统下编辑spec文件、脚本/配置后传到Linux,或是编辑器默认开启了Windows换行格式,文件每行末尾会比Linux标准的LF换行多一个\r字符,Linux的shell会把这个隐形字符当成路径、命令的正常组成部分
  • spec文件%install段的第一行创建目录命令末尾带\r,导致实际创建的目录不是预期的/etc/alascript,而是名字末尾带隐形\r的异常目录,后续install命令写文件时路径匹配不上,就会抛出无此文件/目录的错误。
修复步骤
  • 先清理之前构建生成的异常缓存,避免错误生成的带特殊字符的目录干扰后续构建:
rm -rf ~/rpmbuild/BUILD/* ~/rpmbuild/BUILDROOT/*
  • 安装换行符转换工具,把所有打包相关文件全部转为Linux标准的LF换行格式:
apt update && apt install -y dos2unix
# 转换spec文件
dos2unix ~/rpmbuild/SPECS/alascript.spec
# 转换所有源码文件,重新打压缩包
cd ~/rpmbuild/SOURCES/alascript-1
dos2unix ./*
cd ..
rm -f alascript-1.0.tar.gz
tar -zcf alascript-1.0.tar.gz alascript-1
  • 重新执行构建命令即可正常完成打包:
rpmbuild -ba ~/rpmbuild/SPECS/alascript.spec
后续避坑提示
  • 之后编辑spec、shell脚本、Linux侧配置文件时,把编辑器的换行格式设置为Unix/Linux(LF)模式,不要用Windows默认的CRLF换行,这类隐形字符导致的报错没有明显规律,排查成本很高
  • 当前spec里的Group字段属于旧版RPM规范的要求,新版RPM构建已经不需要强制填写该字段,留空或者删掉都不影响打包结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:39:15