apt update 在 Arm 上的 Ubuntu 20.04 容器中引发签名错误

apt update 在 Arm 上的 Ubuntu 20.04 容器中引发签名错误

我正在尝试构建 Raspberry Pi docker 镜像,但总是遇到相同的错误,类似于这个这个这个

apt update当我以 root 身份运行该命令arm32v7/ubuntu:20.04(或者只是ubuntu:latest)时,我得到以下输出:

root@273d63597ce6:/# apt update
Get:1 http://ports.ubuntu.com/ubuntu-ports focal InRelease [265 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease [111 kB]
Get:3 http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease [98.3 kB]
Get:4 http://ports.ubuntu.com/ubuntu-ports focal-security InRelease [107 kB]
Err:1 http://ports.ubuntu.com/ubuntu-ports focal InRelease
  At least one invalid signature was encountered.
Err:2 http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease
  At least one invalid signature was encountered.
Err:3 http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease
  At least one invalid signature was encountered.
Err:4 http://ports.ubuntu.com/ubuntu-ports focal-security InRelease
  At least one invalid signature was encountered.
Reading package lists... Done
W: GPG error: http://ports.ubuntu.com/ubuntu-ports focal InRelease: At least one invalid signature was encountered.
E: The repository 'http://ports.ubuntu.com/ubuntu-ports focal InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: GPG error: http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease: At least one invalid signature was encountered.
E: The repository 'http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: GPG error: http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease: At least one invalid signature was encountered.
E: The repository 'http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: GPG error: http://ports.ubuntu.com/ubuntu-ports focal-security InRelease: At least one invalid signature was encountered.
E: The repository 'http://ports.ubuntu.com/ubuntu-ports focal-security InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

我尝试了建议的解决方案,清理 apt、清理 docker 和删除/重新创建,/var/lib/apt/lists但没有成功。 SD 卡为 32G,操作系统是全新安装的。df显示有 26G 可用。

更多信息:

  • 这是在 raspberry pi 4 B 上全新安装 2020-05-27-raspios-buster-lite-armhf 时发生的
  • 同样的错误发生在另一台运行 HypriotOS 的 Raspberry Pi 4 B 上
  • 同一张图片中的相同命令在安装了 Arch Linux 的 Raspberry Pi 3 B 上运行良好
  • ubuntu:18.04如果我使用旧版本的 ubuntu ( , 16.04, 14.04),则不会发生此错误

答案1

问题的根源在 libseccomp 中。较新的版本修复了这个问题,但它还没有在 Debian 的稳定存储库中提供。有两种方法可以解决这个问题:

方法 1

使用 启动容器--privileged。这会绕过docker的安全措施,所以不推荐使用。或者使用--security-opt seccomp:unconfined更安全一点。 docker run -it --security-opt seccomp:unconfined ubuntu:latest

方法 2

在主机系统上手动升级 libseccomp。从不稳定的存储库下载版本(我使用 2.4.3-1 进行了测试)这里

安装新版本:

sudo dpkg -i libseccomp2_2.4.3-1+b1_armhf.deb

注意:上述方法解决了基于 Raspbian 的系统的问题。该错误也发生在 Ubuntu 20.04 aarch64 系统上,@NeonLines 的回答对此有所帮助。

答案2

至少遇到一个无效签名

该错误表明其中一个文件/var/lib/apt/lists至少包含一个无效/损坏的签名(可能是由于apt-key误用或其他原因造成的)。

尝试使用调试消息运行 Apt update:

apt-get -oDebug::pkgAcquire::Worker=1 update

它应该指向损坏的文件,例如

0% [工作中] <- gpgv:400%20URI%20Failure%0aMessage:%20At%20least%20one%20invalid%20signature%20was%20encountered.%0aURI:%20gpgv:/var/lib/apt/lists/partial/CorruptedFile_InRelease

编辑文件,查找并删除损坏的部分,或删除整个文件,以便重新创建。

答案3

升级到 docker 版本 19.03.12 已经为我解决了这个问题。

答案4

TSpark、HyperCreeks 和 ibster1st123s 的答案确实对我在 Rasbian 10 和官方存储库中的最新 docker 版本有用。正如 NeonLines 指出的那样,您必须安装最新版本,因为它们不会遇到此问题。

大多数用户设置 Docker 的存储库并从中安装,以方便安装和升级任务。这是推荐的方法,Raspbian 除外。[…] 对于 Raspbian,尚不支持使用存储库进行安装。您必须改为使用便利脚本。 –docs.docker.com

总结

使用便捷脚本获取最新的 docker 版本。不过你应该检查一下上面的链接,有一些注意事项。

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

相关内容