打包.sh脚本为.rpm后安装结果不一致问题求助
问题原因分析与解决
你遇到的问题核心是混淆了源码RPM(.src.rpm)和二进制RPM的用途,两者的安装行为完全不同:
1. .src.rpm的本质与安装行为
.src.rpm是源码包,它包含的是构建二进制RPM所需的原始材料(比如你的myscript.sh脚本、.spec定义文件),不是直接可用的软件包。安装它的唯一目的是为了重新编译、构建二进制RPM,而非将软件部署到系统路径。
安装.src.rpm后,系统会自动将其中的源码和spec文件放到root/rpmbuild/SOURCES/、root/rpmbuild/SPECS/目录下,这是RPM构建工具的标准行为,你的输出完全符合预期,并非配置错误。
2. 为什么同一打包实例安装RPMS/noarch/*.rpm正常
$HOME/rpmbuild/RPMS/noarch/目录下的文件是构建完成的二进制RPM包,这是根据.spec文件定义,将脚本安装到/usr/bin后的成品包。它才是你应该用于分发和直接安装的包,所以安装后能得到预期的结果。
3. 解决步骤
- 分发正确的包:确保你上传、分发的是
RPMS/noarch/下的二进制RPM(比如myscript-1.0-1.el7.noarch.rpm),而非SRPMS/目录下的.src.rpm。 - 测试安装正确的包:在CentOS容器中执行以下命令安装二进制包:
之后用rpm -ivh myscript-1.0-1.el7.noarch.rpmrpm -ql myscript验证,就能看到脚本已安装到/usr/bin/myscript.sh。 - 调整GitLab CI配置:检查你的
.gitlab-ci.yml,确保流水线产物上传的是二进制RPM,而非源码RPM。
内容的提问来源于stack exchange,提问作者user312042
相关产品推荐
相关产品推荐

