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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 12:42:47