我试图在SLES-15上构建一个代码,在Makefile中,它执行rpmbuild命令,如下所示。
rpmbuild -ba --rcfile $(BUILDROOT)/scripts/rpmrc --rmsource --target $(RPM_TARGET_ARCH) $(DEBUG_OPTION) $(RPMDIR)/SPECS/$(SPECFILE)
rpmrc文件的内容如下:
/usr/lib/rpm/macros:/usr/lib/rpm/%{_target}/macros:/usr/lib/rpm/redhat/macros:/etc/rpm/macros.specspo:/etc/rpm/macros.cdb:/etc/rpm/macros.prelink:/etc/rpm/macros.solve:/etc/rpm/macros.up2date:/etc/rpm/macros:/etc/rpm/%{_target}/macros:~/.rpmmacros:/home/build/builds/Sourcecode/rpm/rpmmacros宏文件:
文件/home/build/builds/Sourcecode/rpm/rpmmacros有定义
/home/build/builds/code/build/Linux-i686-SLES11/Release/tools
%_topdir
#覆盖默认的__os_install_post宏
#不要将二进制文件的注释部分去掉如下
#导致aveserver失败其完整性检查#XXX:显然,默认情况下只有RedHat条在post安装中。
#如此显式地剥离所有%__os_install_post /usr/lib/rpm/brp-压缩
/usr/lib/rpm/brp-条带
/usr/lib/rpm/brp-条带共享
/usr/lib/rpm/brp-条带-静态存档
%{nil} #为SuSE构建#XXX启用调试器包:这需要从elfutils包#(通常不随SLES %install %安装%{debug_package} )中运行eu-条带。
%%安装
%{0}
但是,当执行rpmbuild命令时,它实际上会选择不同的‘_topdir’值(它从/usr/lib/rpm/宏读取它),并在没有找到error XXX的情况下失败。
通过向rpmbuild命令添加额外的宏定义解决了_topdir问题(如下所示)
rpmbuild -ba **--define='_topdir $(RPMDIR)'** --rcfile $(BUILDROOT)/scripts/rpmrc --rmsource --target $(RPM_TARGET_ARCH) $(DEBUG_OPTION) $(RPMDIR)/SPECS/$(SPECFILE)
但是后来失败了,不同的目录没有找到错误,我认为这是应该的,因为它没有从rpmrc文件中读取/选择宏。有什么解决办法吗?为什么它没有从用户中读取宏/rpmrc文件。
此代码构建在SLES-11上,但在SLES-15上失败。
SLES-15版本: 4.14.3发行版: 40.1
SLES-11版本: 4.4.2.3发行版: 37.16.37
注意: rpmbuild正在从/usr/lib/rpm/suse/宏和/usr/lib/rpm/宏中选择宏定义。此外,/usr/lib/rpm/suse/宏重写/usr/lib/rpm/宏中的定义。例如,如果在文件/usr/lib/rpm/宏和/usr/lib/rpm/suse/宏中都定义了'%_XXX‘,那么rpmbuild将从/usr/lib/rpm/suse/宏中选择%_XXX的值。
发布于 2022-05-25 07:22:32
RPM停止支持从v4.6开始从rcfile读取的宏文件。解决方案是将rpmmacros文件复制到~/.rpmmacros。其他解决方案是提供与":“分隔的宏文件列表,其中--宏=来自rpmbuild。
https://stackoverflow.com/questions/71855928
复制相似问题