dpkg-buildpackage间隔报错failed to sign .dsc file问题咨询
Debian批量构建偶现GPG签名断管问题解决方案
报错信息如下:
gpg: signing failed: Broken pipe
gpg: dpkg-sign.fwxloLTb/libshipscomms_4.00-1.dsc: clear-sign failed: Broken pipe
dpkg-buildpackage: error: failed to sign .dsc file
该间隔性报错的根因分为两类:
- 非交互脚本环境下GPG未绑定正确TTY,首次调用签名时密码输入组件无法正常唤起导致进程中断,报错后GPG代理已完成初始化,二次调用可复用会话因此正常运行
- 修改changelog后首次构建时,deb源码元数据校验会重新计算所有文件哈希,GPG签名进程等待超时被主动断管,二次构建可复用已生成的临时缓存,无阻塞因此正常
修复方案
- 脚本开头提前绑定GPG TTY环境变量,确保签名进程可正常关联终端:
export GPG_TTY=$(tty)
- 执行构建命令前先预热GPG代理,避免首次调用超时:
echo "gpg agent prewarm" | gpg --clearsign > /dev/null 2>&1
- 如果你使用无密码的签名密钥,可以直接在构建命令中添加批处理参数跳过交互校验:
dpkg-buildpackage -k<你的签名密钥ID> --sign-command="gpg --batch --no-tty"
- 如需长期避免同类问题,可以调整GPG代理缓存时长,修改
~/.gnupg/gpg-agent.conf添加如下配置:
default-cache-ttl 3600 max-cache-ttl 86400
修改完成后执行gpg-connect-agent reloadagent /bye即可生效。
内容的提问来源于stack exchange,提问作者Dale Amon
相关产品推荐
相关产品推荐

