V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
mx8
V2EX  ›  分享创造

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

  •  
  •   mx8 ·
    martin68 · 2019-09-19 10:03:55 +08:00 · 6639 次点击
    这是一个创建于 1652 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知这里用 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,抱拳致谢!)欢迎留言提出意见建议,或者疑问,我将尽力回答。

    23 条回复    2019-11-28 12:34:32 +08:00
    ziding
        1
    ziding  
       2019-09-19 10:43:05 +08:00   ❤️ 1
    这个不错,问下作者,我使用代理服务器的环境里面,可以使用这个工具进行测速么,原来用 apt-select 不支持代理服务器。
    mx8
        2
    mx8  
    OP
       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
        3
    mx8  
    OP
       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
        4
    emonber  
       2019-09-19 13:03:46 +08:00   ❤️ 1
    请问能手动添加其他的镜像么?
    mx8
        5
    mx8  
    OP
       2019-09-19 13:12:24 +08:00
    @emonber 目前不行哦,不过这是个好功能,列入计划中啦。你想要哪种形式的手动添加?从文件添加还是从命令参数添加?
    顺便提一下,程序会自动地把你当前正在使用的镜像源加入列表中测速,如果是你当前正在使用的最好,那么你就继续用着好了
    emonber
        6
    emonber  
       2019-09-19 13:17:39 +08:00 via Android   ❤️ 1
    文件的形式?保存在配置目录里。与官方镜像、当前使用的镜像合并后再测试。
    Humorce
        7
    Humorce  
       2019-09-19 13:24:01 +08:00   ❤️ 1
    任何发行版的 ~security repo 都是不建议修改为第三方源的。
    MaiKuraki
        8
    MaiKuraki  
       2019-09-19 13:30:41 +08:00   ❤️ 1
    吼啊
    mx8
        9
    mx8  
    OP
       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
        10
    mx8  
    OP
       2019-09-19 13:43:57 +08:00   ❤️ 1
    @emonber 好的,文件的形式。新版出来后 @你
    ziding
        11
    ziding  
       2019-09-19 16:50:27 +08:00   ❤️ 1
    @mx8 感谢,我下载来试试看
    mx8
        12
    mx8  
    OP
       2019-09-20 15:21:37 +08:00
    7.0.4 发布,解决在 EOL( End of life)系统比如 Ubuntu 14.04 的问题,在这些不再支持的系统运行出现问题请更新,谢谢
    mx8
        13
    mx8  
    OP
       2019-09-20 20:13:31 +08:00
    @ziding 你试了吗?我试了可以走代理的。这么看的话 apt-smart 多了一个功能——代理测速工具,哈哈哈
    apt-select 的确走不了代理:
    https://github.com/jblakeman/apt-select/issues/45
    mx8
        14
    mx8  
    OP
       2019-09-21 15:45:16 +08:00   ❤️ 1
    @emonber apt-smart 7.0.5 发布啦! 升级后可以运行 apt-smart -l -F ~/mirrors.txt 来实现你说的文件里自定义镜像源与官方镜像、当前使用的镜像合并后再测试。
    其中 mirrors.txt 的路径和文件名都可以自定义但不能有空格而且必须是绝对路径,mirrors.txt 里一行一个镜像地址。
    欢迎测试反馈
    reus
        15
    reus  
       2019-09-25 16:16:02 +08:00   ❤️ 1
    腾讯也有软件源: https://mirrors.cloud.tencent.com/

    更新时间和同步状态都直接显示了
    mx8
        16
    mx8  
    OP
       2019-09-25 17:40:02 +08:00
    @reus 因为腾讯没有加入 Ubuntu 的官方镜像列表,所以我的程序获取不到。但是你可以像我在 14 楼里说的那样,用 apt-smart -l -F ~/mirrors.txt 来自定义镜像源到文件里,与官方镜像、当前使用的镜像合并后再测速
    jason94
        17
    jason94  
       2019-09-26 13:24:24 +08:00   ❤️ 1
    刚好遇到这个问题就解决了。已 Star😀
    mx8
        18
    mx8  
    OP
       2019-09-26 18:25:38 +08:00
    @jason94 哈哈哈,这么巧
    mx8
        19
    mx8  
    OP
       2019-09-30 17:57:05 +08:00
    7.0.7 发布啦!修正了 Python 3 下改动 sources.list 出错的问题
    mx8
        20
    mx8  
    OP
       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 参数即可。
    mx8
        21
    mx8  
    OP
       2019-11-04 20:31:34 +08:00
    一直忘了说,如果要升级 apt-smart 执行
    pip install apt-smart --upgrade
    即可
    mx8
        22
    mx8  
    OP
       2019-11-04 23:01:35 +08:00
    更正:
    升级应该是加 --user 更不容易出现报错
    pip install apt-smart --upgrade --user
    mx8
        23
    mx8  
    OP
       2019-11-28 12:34:32 +08:00
    7.1.2 发布啦!支持 Python 3.8。-x 参数拉黑功能对官方镜像源也有效了, 因为经常存在只有官方镜像源是 up-to-date 的情况,官方镜像源总是经常排第一而被程序自动选择为最佳镜像源,此时它虽然最新但是最慢,所以用 -x *ubuntu.com* 就可以拉黑它啦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1127 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:54 · PVG 06:54 · LAX 15:54 · JFK 18:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.