apt源文件格式解析与换源

我们都知道,许多开源软件的源都在国外,直连下载速度十分感人。而国内有许多镜像站,切换软件源后可以大幅提升下载速度。

换源其实十分容易,不过源文件具体格式是如何,怎样找到镜像站中的文件的呢?本文简单探讨一下这点。

apt源

源文件格式解析

apt的源文件位于/etc/apt/source.list文件内。

使用cat/nano/vim查看,nanovim会有高亮

有许许多多不同的条目,其中井号是注释

每一条都为固定的格式:

1
2
deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]
deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]

deb http://us.archive.ubuntu.com/ubuntu/ bionic universe为例

deb代表二进制文件仓库位置,deb-src代表源代码仓库位置。一般我们只需要拖二进制文件,因此deb-src行都被注释掉了。

option用于指定如何从源中获取数据,一般省略

接下来的uri代表具体的仓库位置。一般是个网址(http/https协议),但也可以使用file:ftp:等协议。

我们直接访问这个网址http://us.archive.ubuntu.com/ubuntu/,可以看到一个Apache起的index目录:

01.bmp

dists中包含了所有软件的索引,进入dists文件夹:

02.bmp

可以看到很多文件夹。这一级的文件夹名对应了suite。其中前缀为ubuntu发行版的开发代号,可以在wiki上查看对应的版本。可以看到bionic对应着18.04 LTS

后缀根据Ubuntu的更新版本有着不同的区别,一般来说出了backports都可以用,具体区别详见参考资料

我们进入bionic文件夹后,几个文件夹名对应着component

03.bmp

可以填多个。四种版本的区别:

  1. Main - Canonical-supported free and open-source software.
  2. Universe - Community-maintained free and open-source software.
  3. Restricted - Proprietary drivers for devices.
  4. Multiverse - Software restricted by copyright or legal issues.

继续深入main文件夹,其中的文件夹名很容易发现是各个架构:

04.bmp

我们进入binary-amd64文件夹,找到了Packages.gz。下载并解压出Packages,是个文本文件:

05.bmp

稍微分析一下不难看出这是一个索引文件,记录了所有软件包的位置,版本,哈希值等信息。

简单来讲,当我们执行apt update命令时,就下载了这份记录着所有软件包的索引文件并更新索引文件。

使用apt install命令会去索引文件对应的filename位置下载,同时还有版本哈希值等校验。

这也就是为什么一定要隔一段时间更新一下索引文件,同时换源后一定要更新索引文件,不然换源等于没换。

换源

介绍完了源文件的格式,再进行换源就十分简单易懂了。

无论如何先进行备份:

1
sudo cp /etc/apt/source.list /etc/apt/source.list.bak

用root权限使用文本编辑器修改(vim,nano甚至gedit都可以,用的习惯即可)source.list

1
sudo nano /etc/apt/source.list

最简单粗暴的方法就是将文件内所有的uri替换为国内镜像站的uri,比如将所有的

1
http://us.archive.ubuntu.com/ubuntu/

替换为

1
https://mirrors.aliyun.com/ubuntu/

注释掉的部分其实可以不用管,如果怕错的话可以全部替换。

保存并退出,之后一定不要忘了更新索引文件:

1
sudo apt update

常用软件源网址:

1
2
3
4
5
6
7
8
9
10
11
12
13
# Ubuntu 官方(国内较慢)
http://archive.ubuntu.com/ubuntu/
# Ubuntu 官方中国(目前是阿里云)
http://cn.archive.ubuntu.com/ubuntu/
# 阿里云(北京萬網/浙江杭州阿里云服務器雙線接入)
http://mirrors.aliyun.com/ubuntu/

# 中科大 LUG v4
http://mirrors4.ustc.edu.cn/ubuntu/
# 中科大 LUG v6
http://mirrors6.ustc.edu.cn/ubuntu/
# 清华
http://mirrors.tuna.tsinghua.edu.cn/ubuntu/

参考资料

  • Ubuntu发行版本历史: https://en.wikipedia.org/wiki/Ubuntu_version_history
  • Ubuntu更新版本:https://help.ubuntu.com/community/UbuntuUpdates
  • Ubuntu source.list说明:http://manpages.ubuntu.com/manpages/eoan/man5/sources.list.5.html
  • Ubuntu四种仓库区别:https://help.ubuntu.com/community/Repositories/Ubuntu#The_Four_Main_Repositories
  • Ubuntu服务器列表:https://wiki.ubuntu.org.cn/%E6%A8%A1%E6%9D%BF:18.04source