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

CentOS7迁移至Rocky8后RPM签名失败:gpg passphrase-fd错误求助

从CentOS7迁移至Rocky8后RPM签名失败问题解决

问题描述

从CentOS7虚拟开发环境迁移到Rocky8后,执行RPM签名命令时出现错误:
执行命令:

rpm --addsign RPMS/x86_64/receiver-2.1.1-3.x86_64.rpm

报错信息:

gpg: Fatal: passphrase-fd is invalid: bad file descriptor
error: gpg exec failed (2)

尝试添加passphrase-fd 0参数时,又出现:

rpm: --passphrase-fd: unknown option

问题原因

Rocky8使用的rpm版本与CentOS7存在差异,--passphrase-fd是gpg的专属参数,并非rpm的直接可选项,不能直接通过rpm命令传递。同时默认的rpm签名宏配置中,gpg的passphrase-fd设置与当前环境不兼容,导致无法正确读取密钥密码。

解决步骤

  • 查看当前rpm的gpg签名宏配置:

    rpm --eval '%__gpg_sign_cmd'
    

    会看到默认命令里包含--passphrase-fd 3之类的配置,这是导致错误的核心原因。

  • 修改rpm宏配置文件:
    编辑用户目录下的~/.rpmmacros(全局配置可编辑/etc/rpm/macros.d/macros.gpg),添加或替换以下内容:

    %__gpg_sign_cmd %{__gpg} gpg --batch --no-verbose --no-armor --passphrase-fd 0 --pinentry-mode loopback --sign %{?_gpg_digest_algo:--digest-algo %{_gpg_digest_algo}} -u "%{_gpg_name}" --output %{__signature_filename} --detach-sign %{__plaintext_filename}
    

    这里将--passphrase-fd设为0(从标准输入读取密码),并添加--pinentry-mode loopback确保gpg能正确读取管道输入的密码。

  • 执行签名操作:
    直接执行签名命令,此时会提示输入密码:

    rpm --addsign RPMS/x86_64/receiver-2.1.1-3.x86_64.rpm
    

    或者通过管道直接传递密码(适合脚本自动化场景):

    echo "你的GPG密钥密码" | rpm --addsign RPMS/x86_64/receiver-2.1.1-3.x86_64.rpm
    
  • 重置gpg-agent(可选):
    如果仍有问题,重置gpg-agent以清除旧缓存:

    gpg-connect-agent reloadagent /bye
    

内容的提问来源于stack exchange,提问作者VultureMF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:37:10