2025年5月でROS1はEOLを迎えました。
2025年6月1日以降、ROSインストール済みの環境でapt-get updateするときにGPG errorが発生する場合があります。
W: GPG error: http://packages.ros.org/ros/ubuntu focal InRelease: The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics <info@osrfoundation.org>E: The repository 'http://packages.ros.org/ros/ubuntu focal InRelease' is not signed.原因と対処方法
原因は今まで使用されていた公開鍵が2025年5月末で期限切れになっていることです。
$ gpg --show-keys /usr/share/keyrings/ros-archive-keyring.gpgpub rsa4096 2019-05-30 [SC] [expired: 2025-06-01] C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654uid Open Robotics <info@osrfoundation.org>5月28日にros/rosdistroリポジトリに新しい公開鍵が追加されています。 5月28日以降にROS/ROS 2をインストールした場合は、この新しい公開鍵をダウンロードしているはずなのでこれ以降に紹介する手順は一切不要なはずです。 それ以外の場合は、この新しい公開鍵への差し替えが必要になります。
apt-key addで公開鍵を追加していた場合
apt-keyで公開鍵を追加していた場合は、以下のコマンドで公開鍵を差し替えます。
sudo apt-key del C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654curl -sS https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | sudo apt-key add -余談ですが、apt-keyは非推奨になっており、後述のSigned-Byでリポジトリと公開鍵を紐付ける方法が推奨されています。
Signed-By でリポジトリと公開鍵を紐付けていた場合
Signed-By で下記のようにリポジトリと公開鍵を紐付けていた場合は、
deb [arch=amd64 signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros/ubuntu focal maindeb [arch=amd64 signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu jammy main以下のコマンドで公開鍵を差し替えます。
sudo curl -sS https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg確認
新しい公開鍵は2030年6月まで使えることと、apt updateが成功することが確認できます。
$ gpg --show-keys /usr/share/keyrings/ros-archive-keyring.gpgpub rsa4096 2019-05-30 [SC] [expires: 2030-06-01] C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654uid Open Robotics <info@osrfoundation.org>その他
あとからコピペできるように実際の使用例をメモしておきます。
Dockerfile
新規でROSをインストールする場合はビルドしなおせばOKです。
既存のDockerイメージをベースにそのままDockerfileに追記する場合は、以下のようにします。
ROS 1
# Update gpg keyRUN \ rm -rf /etc/apt/sources.list.d/ros1-latest.list && \ apt-get update -q && \ apt-get install -yq --no-install-recommends curl && \ curl -sS https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg && \ apt-key del C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 && \ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros/ubuntu $( . /etc/os-release && echo $UBUNTU_CODENAME ) main" > /etc/apt/sources.list.d/ros1-latest.list && \ rm -rf /var/lib/apt/lists/*ROS 2
# Update gpg key# ROS 2 Documentationに記載されている方法では /etc/apt/sources.list.d/ros2.list# 古い ros:jazzy-ros-base などのDockerイメージでは /etc/apt/sources.list.d/ros2-latest.list# 新しい ros:jazzy-ros-base などのDockerイメージでは /etc/apt/sources.list.d/ros2.sources# 新しい Dockerイメージでは更新された公開鍵がとりこまれているので、本来は更新不要# https://github.com/ros-infrastructure/ros-apt-source/pull/8RUN \ rm -rf /etc/apt/sources.list.d/ros2-latest.list && \ rm -rf /etc/apt/sources.list.d/ros2.list && \ rm -rf /etc/apt/sources.list.d/ros2.sources && \ apt-get update -q && \ apt-get install -yq --no-install-recommends curl && \ curl -sS https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg && \ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $( . /etc/os-release && echo $UBUNTU_CODENAME ) main" > /etc/apt/sources.list.d/ros2.list && \ rm -rf /var/lib/apt/lists/*ShellScript
apt-key addで公開鍵を追加した場合も、Signed-Byでリポジトリと公開鍵を紐付けていた場合も、以下のコマンドでシェルスクリプトを使って公開鍵を差し替えることができます。ROS 1/2両方対応しています。
curl -sS https://raw.githubusercontent.com/Tiryoh/ros_gpg_key_update/refs/heads/master/run.sh -o ros-gpg-key-update.shsh ros-gpg-key-update.sh# 一応こちらでも実行可能ですcurl -sSL git.io/ros-gpg-key-update | sh呼び出しているシェルスクリプトは以下です。CC-0ライセンスで公開しているので、ご自由にご利用ください。
2019年にROSのbuild farmでのGPG Key差し替えになったときに公開したものですが、まさかまた使うことになるとは思いませんでした。
これもまた余談ですが、ROS NoeticがEOLになったことから、ROS Noetic環境でrosdep updateするときには今後は
rosdep update --rosdistro=noeticとするか、rosdep update --include-eol-distrosとする必要があります。
参考

更新履歴
2025年6月2日(1)
- DockerfileとShellScriptのコードを追加
- ROS 1/2両方影響するのでNoetic限定についての記述を削除
2025年6月2日(2)
- Xで教えていただいたROS Discourseの記事を追記
https://twitter.com/ReMIX28395705/status/1929487380991332451
2025年6月10日
- 新しいDockerイメージでは
/etc/apt/sources.list.d/ros2.sourcesになっているので、その旨を追記
関連記事
- ROSをインストールしてたUbuntu 18.04を20.04にアップグレードするROS Melodic/DashingをインストールしていたGPU搭載ノートPCをUbuntu 18.04から20.04にアップグレードした手順と、apt-key非推奨にともなうsources.list修正のメモ。
- docker-composeからRVizを起動するNVIDIAのGPUが有効なLinux環境でdocker-composeからRVizを起動するための設定方法。NVIDIA_VISIBLE_DEVICESとNVIDIA_DRIVER_CAPABILITIESの環境変数設定とdocker-compose.yamlの書き方をdocker-composeバージョン別にまとめた。
- (Updated )ROS/ROS2のGUIをWebブラウザ経由でお手軽に試せるDockerfileを公開しましたROS/ROS 2のGUIをWebブラウザ経由でお手軽に試せるDockerfileとDockerイメージを公開しています。その特徴と使用方法を紹介します。
- [2020年1月版] ROS2の環境構築方法この記事は2019年4月に書いた「[[2019年4月版] ROS2の環境構築方法](/archives/2150)」の改訂版です。
- (Updated )[2019年4月版] ROS2の環境構築方法[2020年2月18日追記] 2020年1月版を公開しています。