[开源] 分享一个自己改的 Debian / Ubuntu 镜像源自动快速获取+测速+修改工具: apt-smart

2019-09-19 10:03:55 +08:00
 mx8

不知这里用 Linux 的人多吗

大家用哪个镜像源呢?我换了好几次镜像源都不是很满意,都有不是这样就是那样的问题。

我认为一个好的镜像源应该具备快速、稳定、更新及时这 3 个特点。怎么知道一个镜像源是否都具备这 3 个特点呢?难道真的要一个一个自己试过来?毕竟自己的网络环境只有自己试才知道。

恰巧我在知乎上看到这个问题,

开源镜像站的组织和维护是纯公益的吗?有没有什么利益呢?

答主基本上都是国内知名镜像源的创建者 /维护者,其中一些确实很认真地想把这件事做好。那么有木有一个量化的对比来客观评价他们是不是做得好?做得好的能得到鼓励,做得还不够好的也能针对性地找到不足来提高,这样对大家以及整个开源生态都有好处。

于是乎我找到了一个老外已经弃坑的项目,在国内的网络环境中体验很差,而且不够智能。但经过我的研究和改进,速度、准确性、健壮性都有很大提升。项目地址是 https://github.com/martin68/apt-smart (方便的话顺手给个 star,抱拳致谢!)

已上传至 pypi,所以安装很方便,到项目的 readme (可以找到我翻译的中文版)里复制粘贴那一小段命令到终端即可。

功能之一:

-----------------------------------------------------------------------------------------------------
| Rank | Mirror URL                       | Available? | Updating? | Last updated    | Bandwidth     |
-----------------------------------------------------------------------------------------------------
|    1 | http://archive.ubuntu.com/ubuntu | Yes        | No        | Up to date      | 16.95 KB/s    |
|    2 | http://mirrors.cqu.edu.cn/ubuntu | Yes        | No        | 3 hours behind  | 427.43 KB/s   |
|    3 | http://mirrors.nju.edu.cn/ubuntu | Yes        | No        | 5 hours behind  | 643.27 KB/s   |
|    4 | http://mirrors.tuna.tsinghua.e...| Yes        | No        | 5 hours behind  | 440.09 KB/s   |
|    5 | http://mirrors.cn99.com/ubuntu   | Yes        | No        | 13 hours behind | 2.64 MB/s     |
|    6 | http://mirrors.huaweicloud.com...| Yes        | No        | 13 hours behind | 532.01 KB/s   |
|    7 | http://mirrors.dgut.edu.cn/ubuntu| Yes        | No        | 13 hours behind | 328.25 KB/s   |
|    8 | http://mirrors.aliyun.com/ubuntu | Yes        | No        | 23 hours behind | 1.06 MB/s     |
|    9 | http://ftp.sjtu.edu.cn/ubuntu    | Yes        | No        | 23 hours behind | 647.2 KB/s    |
|   10 | http://mirrors.yun-idc.com/ubuntu| Yes        | No        | 23 hours behind | 526.6 KB/s    |
|   11 | http://mirror.lzu.edu.cn/ubuntu  | Yes        | No        | 23 hours behind | 210.99 KB/s   |
|   12 | http://mirrors.ustc.edu.cn/ubuntu| Yes        | Yes       | 8 hours behind  | 455.02 KB/s   |
|   13 | http://mirrors.sohu.com/ubuntu   | No         | No        | Unknown         | 90.28 bytes/s |
-----------------------------------------------------------------------------------------------------

据我近一个月的观察,某著名互联网公司的镜像源虽然速度最快但是更新滞后最长超过一周;某著名互联网公司的镜像源一直不可用,返回的数据都是不对的;某著名高校的镜像源相当一部分时间处于更新中的状态,用户下载软件包时可能会出现hash sum mismatch(校验和不符)的错误,维护者应该检查一下。

值得表扬的是 cqu 重庆大学的镜像源,更新一直最及时,而且速度很快,下载大文件时能跑满 100 兆光纤,稳定性的话我观察时间还少不敢下断言。

这里可能需要提醒一下为什么更新及时很重要。试想一下一个严重安全漏洞或者严重 bug 出现,开发者熬夜修补就是为了早点释出,结果镜像源晚近一天才更新,让开发者白白熬夜,也让用户更长时间暴露于风险。Ubuntu 的官方镜像源根据官方文档是一天更新四次,很多镜像源貌似设置的是一天一次更新。

以上只是其中一个功能,给它不同参数它还能自动做后续的修改 /etc/apt/sources.list,做到一键切换镜像源。不知不觉写了这么长了,还找得到我的项目地址吗?再贴一次: https://github.com/martin68/apt-smart (方便的话顺手给个 star,抱拳致谢!)欢迎留言提出意见建议,或者疑问,我将尽力回答。

7094 次点击
所在节点    分享创造
23 条回复
ziding
2019-09-19 10:43:05 +08:00
这个不错,问下作者,我使用代理服务器的环境里面,可以使用这个工具进行测速么,原来用 apt-select 不支持代理服务器。
mx8
2019-09-19 11:28:37 +08:00
@ziding 感谢支持,这是个好问题,待会儿我会加入 readme 里。与网络相关的代码全部在这 https://github.com/martin68/apt-smart/blob/master/apt_smart/http.py
用的是 python 标准库里的 urlopen 函数,根据 https://stackoverflow.com/a/3168244/12074740 可以用
export http_proxy='http://myproxy.example.com:1234'
export https_proxy='http://myproxy.example.com:1234'
来设定环境变量使 apt-smart 走代理(注意终端里设置环境变量的有效性,关了该终端就失效了)
当然你还可以自己改代码,例子:
proxies = {'http': 'http://myproxy.example.com:1234'}
print "Using HTTP proxy %s" % proxies['http']
response = urlopen("http://www.google.com", proxies=proxies)
mx8
2019-09-19 12:09:58 +08:00
@ziding 刚才试了一下你提到的 apt-select,不是我故意黑它,它的问题跟我 fork 的母 repo 一毛一样——依赖于 https://launchpad.net/ubuntu/+archivemirrors 来判断某镜像更新是否及时,这带来两个严重问题:
1. 速度太慢(至少在国内环境),launchpad 的那个网页很大而且在国外,白天要十几秒下载完,晚上几十秒甚至超时,而我的方法白天比它快 3 倍,晚上快 10 倍
2. launchpad 的那个网页上的更新是否及时( up-to-date )的数据是错的(至少国内镜像如此),而我的方法是实际下载镜像上 InRelease 文件提取里面的 Date 数据,跟官方镜像比较,无疑准确度高。举例:apt-select 刚才给我推荐上海交大的镜像源,但是我的 apt-smart 实测它落后官方镜像源 5 小时。就此刻来说,华为、清华、重庆大学、南京邮电大学的镜像源是 up-to-date,表扬!
emonber
2019-09-19 13:03:46 +08:00
请问能手动添加其他的镜像么?
mx8
2019-09-19 13:12:24 +08:00
@emonber 目前不行哦,不过这是个好功能,列入计划中啦。你想要哪种形式的手动添加?从文件添加还是从命令参数添加?
顺便提一下,程序会自动地把你当前正在使用的镜像源加入列表中测速,如果是你当前正在使用的最好,那么你就继续用着好了
emonber
2019-09-19 13:17:39 +08:00
文件的形式?保存在配置目录里。与官方镜像、当前使用的镜像合并后再测试。
Humorce
2019-09-19 13:24:01 +08:00
任何发行版的 ~security repo 都是不建议修改为第三方源的。
MaiKuraki
2019-09-19 13:30:41 +08:00
吼啊
mx8
2019-09-19 13:34:06 +08:00
@Humorce 谢谢回复,debian 的话的确是没有 security repo 的镜像源,只能官方。但是我从某个版本的 Ubuntu ( Kubuntu 还是 Lubuntu 忘了)的自带工具换源,是会更改 security repo 为非官方镜像源的。如果能通过我的 apt-smart 确保镜像源 up-to-date,用非官方镜像源应该不会有什么风险,同时速度快太多了。现在国内晚上连国外网速几 KB/s,安全更新超时失败不是也有安全风险么
mx8
2019-09-19 13:43:57 +08:00
@emonber 好的,文件的形式。新版出来后 @你
ziding
2019-09-19 16:50:27 +08:00
@mx8 感谢,我下载来试试看
mx8
2019-09-20 15:21:37 +08:00
7.0.4 发布,解决在 EOL( End of life)系统比如 Ubuntu 14.04 的问题,在这些不再支持的系统运行出现问题请更新,谢谢
mx8
2019-09-20 20:13:31 +08:00
@ziding 你试了吗?我试了可以走代理的。这么看的话 apt-smart 多了一个功能——代理测速工具,哈哈哈
apt-select 的确走不了代理:
https://github.com/jblakeman/apt-select/issues/45
mx8
2019-09-21 15:45:16 +08:00
@emonber apt-smart 7.0.5 发布啦! 升级后可以运行 apt-smart -l -F ~/mirrors.txt 来实现你说的文件里自定义镜像源与官方镜像、当前使用的镜像合并后再测试。
其中 mirrors.txt 的路径和文件名都可以自定义但不能有空格而且必须是绝对路径,mirrors.txt 里一行一个镜像地址。
欢迎测试反馈
reus
2019-09-25 16:16:02 +08:00
腾讯也有软件源: https://mirrors.cloud.tencent.com/

更新时间和同步状态都直接显示了
mx8
2019-09-25 17:40:02 +08:00
@reus 因为腾讯没有加入 Ubuntu 的官方镜像列表,所以我的程序获取不到。但是你可以像我在 14 楼里说的那样,用 apt-smart -l -F ~/mirrors.txt 来自定义镜像源到文件里,与官方镜像、当前使用的镜像合并后再测速
jason94
2019-09-26 13:24:24 +08:00
刚好遇到这个问题就解决了。已 Star😀
mx8
2019-09-26 18:25:38 +08:00
@jason94 哈哈哈,这么巧
mx8
2019-09-30 17:57:05 +08:00
7.0.7 发布啦!修正了 Python 3 下改动 sources.list 出错的问题
mx8
2019-11-01 15:41:12 +08:00
7.1.0 发布啦!增加对 Linux Mint 的支持。
Linux Mint 需要两个软件仓库,一个是自己的,另一个是上游 Ubuntu 的。为此,apt-smart 特在 Linux Mint 下增加了叫 Ubuntu Mode , 专门处理上游 Ubuntu 的镜像源。

举例, 在 Linux Mint 下 运行 apt-smart --list-mirrors --ubuntu 或者 apt-smart -lU,就可以列出上面一样的测速表格( Ubuntu 的镜像源), 运行 apt-smart -aU 就可以自动把最好的 Ubuntu 镜像源写入到 Linux Mint 系统。当然,操作 Linux Mint 自己的镜像源时不带 -U 参数即可。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/602041

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX