源码安装最新版gnupg后,gpg-agent版本不匹配且无法切换至新版本的问题求助
我从源码编译安装了最新版的gnupg,但使用gpg生成密钥时弹出了如下警告:
gpg: WARNING: server 'gpg-agent' is older than us (2.2.27 < 2.4.5)
gpg: Note: Outdated servers may lack important security fixes.
gpg: Note: Use the command "gpgconf --kill all" to restart them.
按照提示执行gpgconf --kill all后,警告依然存在。我尝试用sudo apt install gpg-agent gnupg更新,得到的结果是:
gnupg is already the newest version (2.2.27-3ubuntu2.1).
gpg-agent is already the newest version (2.2.27-3ubuntu2.1).
我查了gpg-agent --version显示版本是2.4.5,which gpg-agent指向/usr/local/bin/gpg-agent,但用ps查看进程时,发现运行的是/usr/bin/gpg-agent。我手动杀掉这个旧进程,尝试启动/usr/local/bin/gpg-agent,但再次查看进程时,还是/usr/bin/gpg-agent在运行。我甚至尝试卸载gnupg和gpg-agent,但遇到了依赖问题(提示“The following packages have unme...”)。
解决思路
看起来你遇到的是系统默认路径和源码安装路径冲突的问题,我之前也碰到过类似情况,给你几个可行的解决办法:
调整环境变量优先级
系统会按PATH环境变量里的顺序查找可执行文件,默认/usr/bin在/usr/local/bin前面,所以优先调用旧版本。你可以把源码安装的路径放到最前面:- 临时生效(仅当前终端):执行
export PATH=/usr/local/bin:$PATH,之后重启gpg-agent测试 - 永久生效:编辑你的
~/.bashrc(如果用zsh就编辑~/.zshrc),添加上述命令,保存后执行source ~/.bashrc使配置生效
- 临时生效(仅当前终端):执行
指定gpg使用新版agent
编辑(或新建)gnupg的agent配置文件~/.gnupg/gpg-agent.conf,添加一行:path /usr/local/bin/gpg-agent然后执行
gpgconf --kill gpg-agent终止旧进程,再手动启动新版agent:/usr/local/bin/gpg-agent --daemon阻止系统自动拉起旧agent
大概率是systemd服务管理器在你杀掉旧agent后自动重启了它。可以先禁用相关服务:- 查看关联服务:
systemctl list-unit-files | grep gpg-agent - 禁用自动启动:
sudo systemctl disable --now gpg-agent.service gpg-agent.socket
完成后再启动新版agent,就不会被系统强制换回旧版本了
- 查看关联服务:
处理卸载依赖问题
如果想彻底移除系统自带的旧版本,遇到依赖报错时,可以尝试:sudo apt remove --purge gnupg gpg-agent若仍有依赖问题,加上
--auto-remove自动清理无用依赖:sudo apt remove --purge --auto-remove gnupg gpg-agent注意:这个操作要谨慎,避免误删其他必要的系统依赖包
备注:内容来源于stack exchange,提问作者sheep44

