情景描述
- 使用vagrant搭建了一个虚拟的ubuntu环境。
- 尝试在ubuntu上安装docker-engine。
- 使用ansible安装,
- name: Download docker mirror
script: down-docker.sh
become: true
- name: Download docker
become: true
shell: apt-get update && apt-get install docker-engine
down-docker.sh
#!/bin/sh
apt-key adv —keyserver hkp://p80.pool.sks-keyservers.net:80 —recv-keys 58118E89F3A912897C070ADBF76221572C52609D
echo "deb https://mirrors.tuna.tsinghua.edu.cn/docker/apt/repo ubuntu-trusty main" | tee /etc/apt/sources.list.d/docker.list
- 出现错误
GPG error: The following signatures couldn’t be verified because the public key is not available [duplicate]
问题思路
- Q1:首先错误中的GPG是什么,为什么会出现这样的错误?
- A1: 首先查看错误log,发现因为公钥无效导致签名无法认证这是什么错误,从来没有见过。
Q2:先分析问题,GPG是什么,是什么样的错误?是什么会导致这个错误?
-
A2:首先补充知识:
gpg:在Ubuntu Linux 下,用GPG命令就可以实现文件的加密和解密,而且GPG基本上每个发行版都会预装。可以对文件签名(表示文件确实事本人发出)。并且可以通过对方的公钥验证对方签名的文件是否为真。
因此,可以理解错误是这个意思:首先每个发行的软件包都会被GPG进行签名,而apt-get的时候需要使用本地的公钥对所有软件包进行验证,然而这里没有拿到dockre-engine的公钥,所以没有办法对docker-engine的软件包进行验证因此报错。所以下一步的目标就是在本地加上这个docker-engine的公钥。
- Q3:那么如何加上这个公钥呢?
- A3:经过查询发现可以使用
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3C962022012520A0
可以完全解决我的问题。
Q4:apt-key是什么?为什么需要这个东西才能进行apt-get update?
-
A4:这里先补充知识:
apt-key是Debian软件包的安全管理工具。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。
通常下载非官方的第三方库的时候都会出现公钥不存在,这是说在本地不存在这个仓库的公钥,
而使用了apt-key add
可以从远端仓库中获取到这个仓库的公钥,并且放到本地,我们也可以直接从报错中获取公钥然后使用apt-key adv
如上面的命令直接加载到本地中,就可以验证这个库拉。
Q5:既然docker-engine不是官方的,那么安装docker,为什么要安装docker-engine而不是docker呢?
-
A5:一直不太能区分这docker的各种版本,安装也是网上找的。了解后补充一下:
docker-engine和docker-ce以及docker-ee都是docker安装包的名字,只是功能的版本不同。原来的docker软件包的名字是docker-engine,现在这个包依旧能用但是不知道什么时候就会被废弃了。docker-engine 的版本号也变成了 17.03.0~ce-0 这种的版本号。docker-ce是社区办的软件包,docker-ee是企业版的都是最新的软件包名字。
因此我从网上找的安装方式已经过时了,应该严格按照官网的安装方式。去安装docker-ce
反思
- 作为一名程序员,完全没有安装最新包的素养和概念。使用老版本的包现在不一定有问题,万一以后弃用了呢。
- 网上找到的安装方式,每次都不管作用是啥一个劲的粘贴复制。安装好了还行,安装处bug都不知道怎么解决。
action
- 以后安装任何东西找官网,严格按照官网要求的安装步骤进行安装。
- 每个安装脚本都会告诉你每一步的作用是什么,认真看一下,也能在这个过程中学习一些脚本知识。