apt源文件格式解析与换源
我们都知道,许多开源软件的源都在国外,直连下载速度十分感人。而国内有许多镜像站,切换软件源后可以大幅提升下载速度。
换源其实十分容易,不过源文件具体格式是如何,怎样找到镜像站中的文件的呢?本文简单探讨一下这点。
apt源
源文件格式解析
apt的源文件位于/etc/apt/source.list
文件内。
使用cat
/nano
/vim
查看,nano
和vim
会有高亮
有许许多多不同的条目,其中井号是注释
每一条都为固定的格式:
1 | deb [ 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目录:
dists中包含了所有软件的索引,进入dists文件夹:
可以看到很多文件夹。这一级的文件夹名对应了suite
。其中前缀为ubuntu发行版的开发代号,可以在wiki上查看对应的版本。可以看到bionic
对应着18.04 LTS
。
后缀根据Ubuntu的更新版本有着不同的区别,一般来说出了backports都可以用,具体区别详见参考资料
我们进入bionic文件夹后,几个文件夹名对应着component
可以填多个。四种版本的区别:
- Main - Canonical-supported free and open-source software.
- Universe - Community-maintained free and open-source software.
- Restricted - Proprietary drivers for devices.
- Multiverse - Software restricted by copyright or legal issues.
继续深入main文件夹,其中的文件夹名很容易发现是各个架构:
我们进入binary-amd64
文件夹,找到了Packages.gz
。下载并解压出Packages
,是个文本文件:
稍微分析一下不难看出这是一个索引文件,记录了所有软件包的位置,版本,哈希值等信息。
简单来讲,当我们执行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 | # 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