在使用小魚fish提供的系統鏡像文件,sudo apt update系統更新時遇到了以下報錯,即ROS 2 倉庫的 GPG 密鑰已過期,以及 Docker 倉庫使用了過時的密鑰存儲方式
fishros@fishros-linux:~$ sudo apt update
獲取:1 http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy InRelease [4,682 B]
錯誤:1 http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy InRelease 下列簽名無效: EXPKEYSIG F42ED6FBAB17C654 Open Robotics <info@osrfoundation.org>
命中:2 https://mirrors.ustc.edu.cn/ubuntu jammy InRelease
獲取:3 https://mirrors.ustc.edu.cn/ubuntu jammy-updates InRelease [128 kB]
命中:4 https://packages.microsoft.com/repos/code stable InRelease
獲取:5 https://mirrors.ustc.edu.cn/ubuntu jammy-backports InRelease [127 kB]
獲取:6 https://mirrors.ustc.edu.cn/ubuntu jammy-security InRelease [129 kB]
命中:7 https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu jammy InRelease
獲取:8 https://mirrors.ustc.edu.cn/ubuntu jammy-updates/main amd64 DEP-11 Metadata [114 kB]
獲取:9 https://mirrors.ustc.edu.cn/ubuntu jammy-updates/restricted amd64 DEP-11 Metadata [212 B]
獲取:10 https://mirrors.ustc.edu.cn/ubuntu jammy-updates/universe amd64 DEP-11 Metadata [359 kB]
獲取:11 https://mirrors.ustc.edu.cn/ubuntu jammy-updates/multiverse amd64 DEP-11 Metadata [940 B]
獲取:12 https://mirrors.ustc.edu.cn/ubuntu jammy-backports/main amd64 DEP-11 Metadata [7,056 B]
獲取:13 https://mirrors.ustc.edu.cn/ubuntu jammy-backports/restricted amd64 DEP-11 Metadata [212 B]
獲取:14 https://mirrors.ustc.edu.cn/ubuntu jammy-backports/universe amd64 DEP-11 Metadata [24.3 kB]
獲取:15 https://mirrors.ustc.edu.cn/ubuntu jammy-backports/multiverse amd64 DEP-11 Metadata [212 B]
獲取:16 https://mirrors.ustc.edu.cn/ubuntu jammy-security/main amd64 DEP-11 Metadata [54.6 kB]
獲取:17 https://mirrors.ustc.edu.cn/ubuntu jammy-security/restricted amd64 DEP-11 Metadata [208 B]
獲取:18 https://mirrors.ustc.edu.cn/ubuntu jammy-security/universe amd64 DEP-11 Metadata [125 kB]
獲取:19 https://mirrors.ustc.edu.cn/ubuntu jammy-security/multiverse amd64 DEP-11 Metadata [208 B]
已下載 1,071 kB,耗時 4秒 (244 kB/s)
正在讀取軟件包列表... 完成
正在分析軟件包的依賴關系樹... 完成
正在讀取狀態信息... 完成
所有軟件包均為最新。
W: 校驗數字簽名時出錯。此倉庫未被更新,所以仍然使用此前的索引文件。GPG 錯誤:http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy InRelease: 下列簽名無效: EXPKEYSIG F42ED6FBAB17C654 Open Robotics <info@osrfoundation.org>
W: https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/dists/jammy/InRelease: 密鑰存儲在過時的 trusted.gpg 密鑰環中(/etc/apt/trusted.gpg),請參見 apt-key(8) 的 DEPRECATION 一節以了解詳情。
W: 無法下載 http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu/dists/jammy/InRelease 下列簽名無效: EXPKEYSIG F42ED6FBAB17C654 Open Robotics <info@osrfoundation.org>
W: 部分索引文件下載失敗。如果忽略它們,那將轉而使用舊的索引文件。
修復步驟:
1. 修復 ROS 2 GPG 密鑰過期問題
# 刪除舊的無效密鑰
sudo apt-key del F42ED6FBAB17C654# 下載并添加新的 ROS 2 密鑰
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg# 更新倉庫源文件
sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null << EOF
deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu $(lsb_release -cs) main
EOF
?2. 修復 Docker 倉庫的密鑰存儲問題
# 創建專用密鑰環目錄
sudo mkdir -p /etc/apt/keyrings# 遷移 Docker 密鑰
sudo mv /etc/apt/trusted.gpg /etc/apt/keyrings/docker.gpg# 更新 Docker 源文件
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null << EOF
deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable
EOF
3. 更新并驗證
# 更新軟件包列表
sudo apt update# 檢查錯誤是否解決
apt policy | grep "ros2\|docker"# 修復可能的依賴問題
sudo apt install -f
關鍵說明:
-
密鑰過期原因:
-
ROS 2 密鑰定期輪換(通常每年一次)
-
清華鏡像源的密鑰緩存可能未及時更新
-
-
密鑰存儲變更:
-
Ubuntu 22.04 開始棄用全局
trusted.gpg
-
推薦使用
signed-by
指定每個源的密鑰
-
-
替代鏡像源(如果清華源仍然有問題):
# 使用中科大 ROS 2 鏡像 sudo sed -i 's|tuna.tsinghua.edu.cn|ustc.edu.cn|g' /etc/apt/sources.list.d/ros2.list
?