自制 PPA 国内加速镜像

最近把服务器系统从 CentOS 更改为 Ubuntu,Ubuntu 系统本身的源可以用阿里云或者 tuna 的镜像,速度很快很稳定。但是搜了一圈却没有发现有 ppa 的镜像,更别说国内的镜像了。ppa 上有许多官方仓库中没有的包,或者官方仓库并不提供某些包的最新版本,但可以在 ppa 上找到,比如官方源里的 php 版本目前是 7.0,而 ppa 上的是 7.1

在 google 的搜索结果中发现了一份 gist 代码,功能就是制作一个 ppa 镜像,简单看了下代码,发现是使用 wget 命令直接递归下载 ppa 服务器上的文件,这说明 ppa 仓库就是一堆静态文件。

这就很简单了,用国内 CDN 指向 ppa 域名即可。经过测试,国内阿里云的 CDN 回源速度比较理想,在阿里云 CDN 控制台创建一个新的 CDN 域名,如 ppa.leo108.com,源站类型选择“源站域名”,填入 ppa.launchpad.net,端口 80 即可。等 CDN 配置完成,将 ppa.leo108.com cname 到指定的域名就完成了 CDN 的配置。

接下来测试一下这个镜像能否正常运行:

1.在服务器上执行 LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php 添加一个 ppa 的 php 源。
2.修改 /etc/apt/sources.list.d/ppa_ondrej_php_{{ distribution_release }}.list 文件,将里面的 ppa.launchpad.com 替换为 ppa.leo108.com
3.执行 apt update && apt install -y php7.1-cli

目测平均下载速度在 200K 以上,比起直连 ppa 还是要稳定得多。

注:

add-apt-repository 命令会自动添加 ppa 仓库的 pgp key 到系统中。如果直接修改 sources.list 则在执行 apt install 的时候会提示 The following signatures couldn't be verified because the public key is not available: NO_PUBKEY XXXX,这种情况下需要执行 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEY_ID,再次执行 install 即可。