一台跑了三年的 Ubuntu 20.04,执行 apt update 一批 404 Not Found,报错里却带着 bionic 的路径。系统明明是 focal,源列表还留着上一版的代号,当初照着旧教程复制进去,一直没改。

sources.list 就一个文件,路径 /etc/apt/sources.list,每行四段:包类型、仓库地址、发行版代号、组件。看懂这四段,换源和排错都不用再翻教程。

一行源的四个部分

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse

deb 是二进制包,deb-src 是源码包,一般用不上,注释掉能省一半索引下载时间。代号用 lsb_release -cs 查,20.04 叫 focal,22.04 叫 jammy,24.04 叫 noble。组件里 main 和 universe 覆盖绝大多数软件,multiverse 放受限驱动,restricted 放显卡之类的闭源驱动。

换镜像要连代号一起换

很多人只把 archive.ubuntu.com 换成 mirrors.aliyun.com,代号忘了动,索引对不上就报 404。国内常用的还有 mirrors.cloud.tencent.com 和 mirrors.ustc.edu.cn,路径都是 /ubuntu/,末尾斜杠别漏。

架构也要对:ARM 机器(云厂商的 ARM 实例、树莓派)走 ports.ubuntu.com,照抄 amd64 的源一样是 404。

404 和 NO_PUBKEY 是两回事

404 一般是代号写错、组件不存在,或者镜像站还没同步。先用 curl -I 直接请求 Release 文件,返回 200 才说明地址对。NO_PUBKEY 是签名验证失败,缺 GPG 密钥,新版推荐把密钥放到 /etc/apt/keyrings 再用 signed-by 引用,apt-key 已经废弃。

  • 改之前先 cp sources.list sources.list.bak 备份
  • apt update 之后看哪个源报错,单独注释掉再试
  • 24.04 起可以用 sources.list.d 下的新格式,字段是 Types、URIs、Suites、Components

生产机换源要谨慎,镜像站同步有延迟,安全更新可能晚几小时。急着补漏洞时临时切回官方源更稳,别为了下载快把补丁耽误了。