前言

因为一些不可描述的原因,在中国绝大多数地区进行更新APT软件包列表(apt-get update)&安装APT软件包(apt-get isntall)、拉取Docker镜像(docker pull)、安装PyPI包(pip install)等操作都是一件非常痛苦的事:网络连接速度太慢了。万幸的是我们有许多开源软件镜像站点,合理设置镜像站点能够极大提升工作和学习效率。这篇文章介绍的就是在上述三种场景下如何设置镜像站点。
APT镜像加速
TUNA镜像站(清华大学开源软件镜像站)上介绍了绝大部分Linux发行版的镜像加速设置方法,这里只介绍Debian系发行版的APT镜像加速如何设置。
APT更新软件包列表的第一步是从本地源列表(/etc/apt/sources.list和/etc/apt/sources.list.d/*.list)中读取所有软件来源站点,所以我们只要更新本地源列表就可以实现镜像加速了(下面的源列表不包括源代码站点,如需完整站点可自行取消注释对应行)。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | # 备份已有源列表sudo cp /etc/apt/sources.list /etc/apt/sources.list.old
 distrib=$(lsb_release -is | awk '{print tolower($1)}')
 codename=$(lsb_release -cs)
 apt_src="https://mirrors.aliyun.com"
 # ↑阿里云源 ↓TUNA源
 # apt_src="https://mirrors.tuna.tsinghua.edu.cn"
 cat >sources.list<<EOF
 deb $apt_src/$distrib/ $codename main restricted universe multiverse
 deb $apt_src/$distrib/ $codename-security main restricted universe multiverse
 deb $apt_src/$distrib/ $codename-updates main restricted universe multiverse
 deb $apt_src/$distrib/ $codename-backports main restricted universe multiverse
 #deb-src $apt_src/$distrib/ $codename main restricted universe multiverse
 #deb-src $apt_src/$distrib/ $codename-security main restricted universe multiverse
 #deb-src $apt_src/$distrib/ $codename-updates main restricted universe multiverse
 #deb-src $apt_src/$distrib/ $codename-backports main restricted universe multiverse
 EOF
 sudo mv sources.list /etc/apt
 # 更新软件包列表
 sudo apt-get update
 
 | 
手动添加Ubuntu PPA源
PPA(Personal Package Archives)作为APT源的补充能让Ubuntu用户在第一时间体验到最新发布的软件。但在笔者的实际体验中,默认的PPA源添加命令(add-apt-repository)往往需要极长的时间才能添加完成。经过一段时间摸索,笔者发现可以通过简单的方式手动添加Ubuntu PPA源,在此分享给读者。

以上图(deadbeef-player : starws)为例,点开图中的”Technical details about this PPA”,在下拉列表中选择系统版本后,将下方的PPA源链接保存至本地源列表。
| 12
 
 | echo "deb http://ppa.launchpad.net/starws-box/deadbeef-player/ubuntu bionic main" > ppa-deadbeef.listsudo mv ppa-deadbeef.list /etc/apt/sources.list.d/
 
 | 
然后再点击上图中Signing key下方的链接,在出现的新页面(如下图所示)中复制sig公钥文件的地址。最后用apt-key添加这个公钥,这个PPA源就添加完成了。

| 12
 3
 
 | $ wget -qO - https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x446c82dc2dd154a1 | sudo apt-key add -OK
 $ sudo apt-get update && sudo apt-get install deadbeef
 
 | 
安装Docker(Ubuntu 16.04+)
Debian系统理论上可以兼容这些命令,不过笔者没有进行过测试。其它系统参见《Docker——从入门到实践》 安装Docker。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | # Ubuntu 16.04需要先安装这个依赖包,Ubuntu 18.04不用# wget http://launchpadlibrarian.net/344879847/libseccomp2_2.3.1-2.1ubuntu2~16.04.1_amd64.deb
 # sudo dpkg -i libseccomp2_2.3.1-2.1ubuntu2~16.04.1_amd64.deb
 # rm libseccomp2_2.3.1-2.1ubuntu2~16.04.1_amd64.deb
 
 # 卸载旧版本Docker
 sudo apt-get remove docker docker-engine docker.io
 # 添加Docker-ce源并安装Docker-ce
 echo "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/$(lsb_release -is | awk '{print tolower($1)}') $(lsb_release -cs) stable" > docker-ce.list
 sudo mv docker-ce.list /etc/apt/sources.list.d/
 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
 sudo apt-get update && sudo apt-get install docker-ce
 # 启动Docker服务并配置用户组
 sudo systemctl enable docker
 sudo systemctl start docker
 sudo groupadd docker
 sudo usermod -aG docker $USER
 # 退出当前终端并重新登录,测试Docker是否正常运行
 docker version
 
 | 
Docker镜像加速
Docker在安装完成后默认从DockerHub源站拉取镜像,而将拉取目标站点从源站改为镜像站往往能获得更快的镜像拉取速度。详细流程参见《Docker——从入门到实践》 镜像加速器。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | cat >daemon.json<<EOF{
 "registry-mirrors": [
 "https://dockerhub.azk8s.cn",
 "https://hub-mirror.c.163.com"
 ]
 }
 EOF
 sudo mv daemon.json /etc/docker/
 # 重启服务
 sudo systemctl daemon-reload
 sudo systemctl restart docker
 
 | 
此时可以通过docker info命令查看镜像加速设置是否生效。
| 12
 
 | $ docker info -f '{{json .RegistryConfig.Mirrors}}'["https://dockerhub.azk8s.cn/","https://hub-mirror.c.163.com/"]
 
 | 
PyPI镜像加速
详细说明参见TUNA pypi 镜像使用帮助。
| 12
 3
 4
 5
 6
 7
 8
 
 | mirror="https://mirrors.aliyun.com/pypi/simple/"# ↑阿里云源 ↓TUNA源
 # mirror="https://pypi.tuna.tsinghua.edu.cn/simple"
 # 临时安装
 pip install -i $mirror requests
 # 设为默认,需要升级pip到最新版本(>=10.0.0)
 pip install -i $mirror pip -U
 pip config set global.index-url $mirror
 
 |