대상: 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가 “이 저장소를 믿을 수 없다”고 막고 있는 상황이다.
이 글에서는 이 오류를
- 어떤 식으로 나타나는지 (에러 메시지)
- 왜 생기는지 (원인)
- Ubuntu 18.04 / 20.04 / 22.04에서 공통으로 쓸 수 있는 해결 순서
- 나중에 같은 문제를 피하려면 어떻게 관리하면 좋은지
- 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형태로 참조
문제가 생기는 대표적인 이유는:
- ROS GPG 키가 아예 등록되지 않은 경우
- 설치 튜토리얼 중 키 추가 단계가 빠짐
- 키가 등록돼 있지만 만료되거나, 다른 파일로 옮겨진 경우
- ROS 프로젝트에서 키를 갱신한 뒤, 로컬 환경이 오래된 상태
- 키 파일 경로가 바뀌었는데, APT 설정이 옛 경로를 보고 있는 경우
- 예:
/etc/apt/trusted.gpg→/usr/share/keyrings/ros-archive-keyring.gpg로 바뀌었는데sources.list.d안의 설정이 갱신되지 않은 상태
- 예:
- (가끔) 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 등)으로 올라가는 것이 장기적으로 안정적이다.