만쥬의 개발일기

본 포스팅에서는 원격 서버에 도커 설치 중 발생한 에러에 대해 다룬다.

 

도커를 설치하려고 하면, 우선 apt-get update를 실행하게 되는데 이 때 gpg error가 발생할 때가 있다.

 

에러상황:

$ sudo apt-get update
Hit:1 <http://ppa.launchpad.net/deadsnakes/ppa/ubuntu> bionic InRelease
Get:2 <https://deb.nodesource.com/node_8.x> bionic InRelease [4,595 B]
Get:3 <http://dl.google.com/linux/chrome/deb> stable InRelease [1,825 B]
Err:3 <http://dl.google.com/linux/chrome/deb> stable InRelease
  The following signatures couldn't be verified because the public key is not available: 
NO_PUBKEY 4EB27DB2A3B88B8B

그 에러를 해결하던 중 내가 겪은 모든 에러에 대해 다뤄보겠다.

에러 원인

GPG란 GNU프로젝트의 결과물로서, GNU의 pgp 암호화 프로그램이다.

만약 NVIDIA측에서 public key를 변경 중이라면, PGP 공개키가 서버에 등록되지 않은 상태이고, 이러한 GPG 에러가 발생하게 된다. 따라서 수동으로 공개키를 키 서버에 업로드 해주어야 한다.

PGP 공개키와 키 서버 등에 대한 내용은 따로 자세히 알아보자.

해결법

Step 1. public key를 수동으로 업로드해준다.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B

그러나 그 과정에서 다음과 같은 에러가 발생할 수 있다.

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B
Executing: /tmp/apt-key-gpghome.12GsEQj5m8/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B
gpg: keyserver receive failed: Server indicated a failure

이유는 keyserver의 포트가 80인데 이를 default로 잡지 못해서기 때문이다.

 

Step 2. 다음과 같이 프로토콜과 포트를 덧붙여서 다시 시도한다.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 4EB27DB2A3B88B8B

이번엔 뭔가 작동이 된 모습이다.

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 4EB27DB2A3B88B8B
Executing: /tmp/apt-key-gpghome.dfiYKVncXl/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 4EB27DB2A3B88B8B
gpg: key 7721F63BD38B4796: 10 duplicate signatures removed
gpg: key 7721F63BD38B4796: 17 signatures not checked due to missing keys
gpg: key 7721F63BD38B4796: "Google Inc. (Linux Packages Signing Authority) <linux-packages-keymaster@google.com>" 19 new signatures
gpg: key 7721F63BD38B4796: "Google Inc. (Linux Packages Signing Authority) <linux-packages-keymaster@google.com>" 2 new subkeys
gpg: Total number processed: 1
gpg:            new subkeys: 2
gpg:         new signatures: 19

다시 도커 설치를 시도해보자.

$ curl -fsSL <https://get.docker.com/> | sudo sh
# Executing docker install script, commit: e5543d473431b782227f8908005543bb4389b8de
+ sh -c apt-get update -qq >/dev/null
W: GPG error: <http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64> 
 InRelease: The following signatures couldn't be verified because the public key is not 
available: NO_PUBKEY A4B469963BF863CC
.
.
.

여전히 에러가 발생한다.

그러나 PUBKEY가 바뀐 모습이다.

같은 방법으로 다시 시도해보자.

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys A4B469963BF863CC
Executing: /tmp/apt-key-gpghome.o5lkaFjeTS/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys A4B469963BF863CC
gpg: keyserver receive failed: Address family not supported by protocol

또 새로운 에러가 발생했다.

이는 GPG 키를 가져오기 위해 사용하는 키 서버에 연결하는 과정에서 발생하는 문제로서, 주로 인터넷 연결이나 방화벽 설정과 관련이 있다.

 

Step3. IPv6 비활성화

이러한 프로토콜 문제는 대부분 IPv6를 비활성화 함으로서 해결되므로,

이전 포스팅에서처럼 다음 명령어로 IPv6를 비활성화를 시도해본다.

sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1

그러나 이번엔 다음과 같은 에러가 발생한다.

$ sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl: cannot stat /proc/sys/net/ipv6/conf/all/disable_ipv6: No such file or directory

왠진 모르겠지만 원격 서버에는 IPv6를 disable하는 설정 파일이 없었다.

다른 방법으로 비활성화를 해보자.

 

Step3-2. grub 파일 수정

다음 명령어로 grub 파일에 접근한다.

sudo vi etc/default/grub

이후 다음 문장을 적어준다.

만약 GRUB_CMDLINE_LINUX_DEFAULT가 이미 존재해도, 다음 내용으로 변경하고 저장해준다.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ipv6.disable=1"

다시 PUBKEY를 등록하자, 이번엔 다시 정상적으로 작동했다.

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys A4B469963BF863CC
Executing: /tmp/apt-key-gpghome.KNSpb3w8on/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys A4B469963BF863CC
gpg: key A4B469963BF863CC: public key "cudatools <cudatools@nvidia.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1

도커 설치를 다시 해본 결과, 드디어 정상적으로 해결된 모습이다.

$curl -fsSL <https://get.docker.com/> | sudo sh
.
.
.
+ sh -c docker version
Client: Docker Engine - Community
 Version:           24.0.2
 API version:       1.43
 Go version:        go1.20.4
 Git commit:        cb74dfc
 Built:             Thu May 25 21:52:13 2023
 OS/Arch:           linux/amd64
 Context:           default
.
.
.

 

 

reference

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!