如何在fpm-cookery的recipe.rb或.promu.yml中添加RPM构建标签?
问题
我尝试在recipe.rb或.promu.yml中添加以下RPM构建标签:
'%define _build_id_links none' '%undefine _missing_build_ids_terminate_build'
请问这些标签应该具体放在哪个位置?
我曾尝试将其添加到.promu.yml中如下位置,但被构建过程忽略:
我的.promu.yml配置:
go: cgo: false repository: path: github.com/ClusterLabs/ha_cluster_exporter build: flags: -a -tags netgo ldflags: | -X github.com/prometheus/common/version.Version={{.Version}} -X github.com/prometheus/common/version.Revision={{.Revision}} -X github.com/prometheus/common/version.Branch={{.Branch}} -X github.com/prometheus/common/version.BuildUser={{user}}@{{host}} -X github.com/prometheus/common/version.BuildDate={{date "20060102-15:04:05"}} binaries: - name: ha_cluster_exporter-amd64 release: extra_rpm_tags: - '%define _build_id_links none' - '%undefine _missing_build_ids_terminate_build'
我的recipe.rb代码:
$:.unshift "/fpm-recipes/utils" $:.unshift File.expand_path('../utils') require 'build_helpers' class HAClusterExporter < FPM::Cookery::Recipe GOPACKAGE = 'github.com/ClusterLabs/ha_cluster_exporter' revision 1 name 'ha_cluster_exporter' version '1.4.0' description 'This is a bespoke Prometheus exporter used to enable the monitoring of Pacemaker based HA clusters.' source "https://#{GOPACKAGE}", :with => :git, :tag => "#{version}" vendor 'rsg' arch 'x86_64' build_depends %w(git) post_install 'post_install.sh' def srcdir @srcdir ||= builddir("go/src/#{GOPACKAGE}") end def build install_golang('1.24.6') mkdir_p srcdir cp_r Dir["*"], srcdir cp '.promu.yml' , srcdir ENV["GOPATH"] = builddir("go") safesystem "cd #{srcdir} && make && make install" end def install etc('systemd/system').install workdir('ha_cluster_exporter.service') etc('init.d').install workdir('ha_cluster_exporter.init.d'), 'ha_cluster_exporter' bin.install "#{srcdir}/../../../../bin/#{name}" end end
解决方案
你的构建流程是通过recipe.rb(基于fpm-cookery)触发编译和打包,而非直接用promu生成RPM,所以.promu.yml里的extra_rpm_tags不会生效——这个配置仅在执行promu release rpm这类promu原生打包命令时才会被读取。
正确的做法是在recipe.rb中添加RPM自定义宏,有两种可靠方式:
方式1:使用fpm-cookery原生方法
在HAClusterExporter类中直接添加rpm_build_defines配置:
rpm_build_defines({ "_build_id_links" => "none", "_missing_build_ids_terminate_build" => nil })
- 对应
%define的宏,直接设置键值对; - 对应
%undefine的宏,将值设为nil即可。
方式2:通过fpm参数注入
如果方式1不生效,可在打包前通过钩子添加fpm参数:
def before_package fpm_flags << "--rpm-build-defines='%define _build_id_links none'" fpm_flags << "--rpm-build-defines='%undefine _missing_build_ids_terminate_build'" end
内容的提问来源于stack exchange,提问作者Simply Seth
相关产品推荐
相关产品推荐

