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
相关产品推荐
相关产品推荐

