apt for Advanced Package Tool,是debian类系统的包管理系统,apt是很多工具的后端(back-end),例如apt-get,aptitude,synaptic。
apt系统使用gpg为认证工具,每一个package source都包含Release文件和Release.gpg文件配合gpg和apt来构建secure apt。package source的维护者发布一个gpg公钥,通常是发布在叫做keyserver的服务器上,例如keyserver.ubuntu.com,apt-key工具用于管理这些公钥(叫做keyring),将这些keyring存放在/etc/apt/trustdb.gpg文件里,可以通过apt-key list命令来查看有现有哪些keyring。
我曾经遇到的2个关于apt前端工具和gpg的错误列举如下:
- Couldn't access keyring: 'No such file or directory'
- The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5
第1个错误提示不能访问keyring,具体原因是没有该文件,在知道了keyring是由apt-key通过trustdb.gpg文件来管理的这个知识后,我们就大体可以断定是trustdb.gpg文件不存在的缘故。这可能是你误删除了该文件了。去除这个错误提示很简单,可以通过apt-key list查看一下当前的keyring,apt-key会自动创建/etc/apt/trustdb.gpg文件(如果不存在的话),或者直接touch一个。
第2个错误提示key 40976EAF437D05B5不存在,意思是说这个key在/etc/apt/trustdb.gpg文件中找不到,那么解决的方法就是添加该key到这个文件,我们可以通过gpg工具从某个keyserver来查找该key,然后通过apt-key工具将其添加到/etc/apt/trustdb.gpg文件中:
gpg --keyserver keyserver.ubuntu.com --recv 40976EAF437D05B5
gpg --export --armor 437D05B5 | sudo apt-key add -
第一行命令从keyserver.ubuntu.com recv该key,第二行命令将该key export给apt-key,然后add到/etc/apt/trustdb.gpg文件中。
ps.关于keyserver,还可以直接登录这些服务器,上面一般都有页面可以直接搜索key和转换为二进制内容。
参考资料:
- Debian Security Infrastructure
- man gpg
- man apt-key
- man apt