ROS 저장소 GPT(GPG) KEY 오류 해결 방법

대상: Ubuntu에서 ROS(또는 ROS2)를 설치/업데이트하다가 GPG error, NO_PUBKEY, The following signatures couldn't be verified 같은 키 관련 오류가 뜨는 사람
환경 예시:

  • Ubuntu 18.04 + ROS Melodic
  • Ubuntu 20.04/22.04 + ROS2 (Foxy / Humble 등)
  • sudo apt update 실행 시 ROS 저장소에서만 오류 발생

ROS 설치 튜토리얼을 따라가다 보면, 어느 날 갑자기 sudo apt update에서 이런 메시지가 뜰 수 있다.

Err: http://packages.ros.org/ros/ubuntu bionic InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F42ED6FBAB17C654
...
E: The repository 'http://packages.ros.org/ros/ubuntu bionic InRelease' is not signed.

또는 ROS2의 경우:

Err: http://packages.ros.org/ros2/ubuntu jammy InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY ...

정리하면:

ROS 패키지 저장소의 서명(GPG) 키가 없거나, 만료됐거나, 위치가 잘못 잡혀서 APT가 “이 저장소를 믿을 수 없다”고 막고 있는 상황이다.

이 글에서는 이 오류를

  1. 어떤 식으로 나타나는지 (에러 메시지)
  2. 왜 생기는지 (원인)
  3. Ubuntu 18.04 / 20.04 / 22.04에서 공통으로 쓸 수 있는 해결 순서
  4. 나중에 같은 문제를 피하려면 어떻게 관리하면 좋은지
  5. Notion 에러 / 문제 로그에 정리할 때 예시

까지 한 번에 정리한다.


1. 에러/증상 요약

대표적으로는 다음과 같은 형태로 등장한다.

1) NO_PUBKEY 오류

W: GPG error: http://packages.ros.org/ros/ubuntu bionic InRelease: 
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F42ED6FBAB17C654
E: The repository 'http://packages.ros.org/ros/ubuntu bionic InRelease' is not signed.

2) GPG Error (ROS2)

Err: http://packages.ros.org/ros2/ubuntu jammy InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY ...
E: The repository 'http://packages.ros.org/ros2/ubuntu jammy InRelease' is not signed.

공통점:

  • ROS/ROS2 저장소 주소(packages.ros.org/...) 옆에 에러가 붙는다.
  • NO_PUBKEY, not signed, GPG error 같은 단어가 보인다.
  • 다른 저장소(우분투 기본, CUDA 등)는 정상인데 ROS 관련 저장소만 에러인 경우가 많다.

2. 이 에러가 왜 발생하는지 (원인)

APT는 각 저장소가 제공하는 서명(GPG key)를 이용해
“이 패키지를 신뢰해도 되는지”를 검증한다.

ROS 저장소도 예외가 아니라:

  • 예전 방식: apt-key add를 통해 /etc/apt/trusted.gpg 등에 키를 저장
  • 최근 권장 방식: /usr/share/keyrings/ros-archive-keyring.gpg에 키를 저장하고
    signed-by=...ros-archive-keyring.gpg 형태로 참조

문제가 생기는 대표적인 이유는:

  1. ROS GPG 키가 아예 등록되지 않은 경우
    • 설치 튜토리얼 중 키 추가 단계가 빠짐
  2. 키가 등록돼 있지만 만료되거나, 다른 파일로 옮겨진 경우
    • ROS 프로젝트에서 키를 갱신한 뒤, 로컬 환경이 오래된 상태
  3. 키 파일 경로가 바뀌었는데, APT 설정이 옛 경로를 보고 있는 경우
    • 예: /etc/apt/trusted.gpg/usr/share/keyrings/ros-archive-keyring.gpg로 바뀌었는데
      sources.list.d 안의 설정이 갱신되지 않은 상태
  4. (가끔) GitHub/네트워크 문제로 키 다운로드가 중간에 끊긴 경우
    • 키를 받아오는 URL이 GitHub에 있을 때, 일시적으로 타임아웃이 날 수 있다.

다행히, 대부분의 경우 키 파일을 다시 받아서 올바른 위치에 놓고, APT 설정을 맞춰주면 해결된다.


3. 해결 순서 (Ubuntu 18.04 / 20.04 / 22.04 공통 패턴)

아래 순서는 “지금 쓰는 ROS 저장소가 ROS1인지 ROS2인지에 따라 URL만 바뀌고
나머지 흐름은 거의 비슷하다”고 생각하면 된다.

3-1. ROS GPG 키를 다시 다운로드

ROS1/ROS2 모두 공통으로 사용하는 키는 보통 ros.key 또는 ros-archive-keyring.gpg 형태로 제공된다.

ROS 공식 키를 다시 받는 대표적인 예시는 아래와 같다.

sudo mkdir -p /usr/share/keyrings

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key   -o /usr/share/keyrings/ros-archive-keyring.gpg

이 한 줄로 해결됐다는 사례도 많다. (ROS2 Humble, Ubuntu 22.04 기준)

키 파일이 잘 내려왔는지 확인하려면:

ls -l /usr/share/keyrings/ros-archive-keyring.gpg

정상이라면 몇 KB 정도짜리 바이너리 파일이 보일 것이다.

3-2. APT 소스 리스트에서 signed-by 설정 확인

ROS1/ROS2 저장소가 APT에 어떻게 등록됐는지 확인해 보자.

grep -R "packages.ros.org" /etc/apt/sources.list.d /etc/apt/sources.list

예상되는 형태는 대략 이런 식이다.

ROS1 (Melodic, Ubuntu 18.04 예시)

deb [arch=amd64,arm64,armhf signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros/ubuntu bionic main

ROS2 (Humble, Ubuntu 22.04 예시)

deb [arch=amd64,arm64,armhf signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu jammy main

만약 signed-by=... 부분이 없거나, 다른 keyring 파일을 가리키고 있다면
위처럼 /usr/share/keyrings/ros-archive-keyring.gpg를 가리키도록 수정해준다.

예:

sudo nano /etc/apt/sources.list.d/ros1-latest.list
# 또는 ros2.list 등 실제 파일 이름에 맞게 수정

파일 안의 deb 라인을 위 예제 형태로 맞춘다.

3-3. 예전 방식(apt-key)로 들어간 키를 keyring으로 옮겨야 하는 경우

과거 튜토리얼을 따라 했다면, 키가 /etc/apt/trusted.gpg 등에 들어가 있을 수 있다.
이 경우에는 아래처럼 기존 키를 복사해서 keyring으로 옮길 수도 있다.

sudo cp /etc/apt/trusted.gpg /usr/share/keyrings/ros-archive-keyring.gpg

이 방법은 “빠르게 임시 해결”용으로 쓸 수 있지만,
앞으로는 curl ... ros.key -o ros-archive-keyring.gpg 방식이 더 깔끔하다.

3-4. 다시 업데이트 확인

이제 APT를 다시 업데이트해 보자.

sudo apt update

이때 더 이상 ROS 관련 GPG 오류가 나오지 않으면 성공이다.


4. 그래도 안 될 때 체크할 것들

4-1. 네트워크 / GitHub 접속 문제

가끔은 GPG 에러처럼 보이지만, 실제로는 GitHub 접속 문제인 경우도 있다.

  • 키 URL이 GitHub에 있는 경우,
    회사/학교 네트워크에서 GitHub가 막혀 있거나,
    프록시 때문에 타임아웃이 나는 경우도 있다.

이럴 때는:

  • 같은 URL을 브라우저에서 직접 열어보기
  • ping github.com, curl https://raw.githubusercontent.com/... 등으로 테스트

를 해보면 네트워크 이슈인지 확인하는 데 도움이 된다.

4-2. ROS 배포판 지원 종료(EOL)

일부 오래된 ROS/ROS2 배포판(Foxy 등)은 더 이상 공식적으로 지원되지 않으면서
APT 저장소 구성이 바뀌거나, 키가 갱신되지 않는 경우도 있다.

  • 이런 경우에는 가능하면 지원 중인 배포판(Humble 등)으로 올라가는 것이 장기적으로 안정적이다.

댓글 남기기