首次构建RPM遭遇$'\r': command not found错误求助
解决RPM构建中的
$'\r': command not found错误 问题描述
尝试构建第一个RPM包时反复报错:
/var/tmp/rpm-tmp.6K3TRj: line 33: $'\r': command not found
error: Bad exit status from /var/tmp/rpm-tmp.6K3TRj (%prep)
执行命令rpmbuild -bb ~/rpmbuild/SPECS/test.spec触发错误,spec文件内容如下:
Name: test Version: 0.0.2 Release: 1%{?dist} Summary: test BuildArch: noarch License: GPL Source0: %{name}-%{version}.tar.gz Requires: bash %description test %prep %setup -q %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/%{_bindir} cp %{name}.sh $RPM_BUILD_ROOT/%{_bindir} %clean rm -rf $RPM_BUILD_ROOT %files %{_bindir}/%{name}.sh
完整构建输出:
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.6K3TRj + umask 022 + cd /root/rpmbuild/BUILD + cd /root/rpmbuild/BUILD + rm -rf api-controller-0.0.2 + /usr/bin/tar -xf /root/rpmbuild/SOURCES/test-0.0.2.tar.gz + cd test-0.0.2 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + $'\r' /var/tmp/rpm-tmp.6K3TRj: line 33: $'\r': command not found error: Bad exit status from /var/tmp/rpm-tmp.6K3TRj (%prep) RPM build errors: Bad exit status from /var/tmp/rpm-tmp.6K3TRj (%prep)
解决方法
该错误由**文件包含Windows风格换行符(CRLF)**导致,Linux Shell无法识别\r字符,将其误判为命令执行。需处理以下两类文件:
转换spec文件的换行符
使用dos2unix工具直接转换:dos2unix ~/rpmbuild/SPECS/test.spec若系统未安装
dos2unix,可通过sed命令手动替换:sed -i 's/\r$//' ~/rpmbuild/SPECS/test.spec转换源码包内文件的换行符
解压源码包,批量转换所有文件后重新打包:# 解压源码包 tar xf ~/rpmbuild/SOURCES/test-0.0.2.tar.gz # 递归转换目录内所有文件的换行符 find test-0.0.2 -type f -exec dos2unix {} \; # 重新打包为tar.gz格式 tar czf ~/rpmbuild/SOURCES/test-0.0.2.tar.gz test-0.0.2 # 清理临时解压目录 rm -rf test-0.0.2
完成上述操作后,重新执行rpmbuild -bb ~/rpmbuild/SPECS/test.spec即可完成RPM包构建。
内容的提问来源于stack exchange,提问作者J-D
相关产品推荐
相关产品推荐

