DEB软件源的镜像

apt-get工具如何选择最快镜像

apt-get支持mirrors 模式,根据自己的locations来自动选择一个最好的镜像。
实现方式为通过一个mirrors.txt对提供的多个源做封装,apt会更具mirror字段自动解析并确定最合理的源地址。
/etc/apt/source.list 内容如下:

deb mirror://mirrors.ubuntu.com/mirrors.txt precise main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt precise-updates main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt precise-backports main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt precise-security main restricted universe multiverse

mirrors.txt文件内容示例:

http://ubuntu.uestc.edu.cn/ubuntu/
http://mirror.lzu.edu.cn/ubuntu/
http://ftp.sjtu.edu.cn/ubuntu/
http://mirrors.cn99.com/ubuntu/
http://mirrors.yun-idc.com/ubuntu/
http://mirrors.xjtu.edu.cn/ubuntu/
http://mirrors.skyshe.cn/ubuntu/
http://mirrors.tuna.tsinghua.edu.cn/ubuntu/
http://archive.ubuntu.mirrors.opensource.ynu.edu.cn/
http://mirrors.ustc.edu.cn/ubuntu/
http://mirrors.aliyun.com/ubuntu/
http://mirrors.cqu.edu.cn/ubuntu/
http://archive.ubuntu.com/ubuntu/

局限性

一个source.list里只能有一个mirrors.txt文件,如果存在多个不同的mirrors.txt文件,执行apt-get update会出错。举例来说,例如下面的sourcelis:

deb http://archive.ubuntu.com/ubuntu/ xenial main restricted
deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb http://archive.ubuntu.com/ubuntu/ xenial universe
deb http://archive.ubuntu.com/ubuntu/ xenial-updates universe

虽然有多个源,但是所有源的URL都是一样的,即http://archive.ubuntu.com/ubuntu/, 这种情况下,在source.list中必须如下写:

deb mirror://URL/mirror.txt xenial main restricted
deb mirror://URL/mirror.txt xenial-updates main restricted
deb mirror://URL/mirror.txt xenial universe
deb mirror://URL/mirror.txt xenial-updates universe

这样在mirror.txt里面按照不同镜像站写多个URL,apt就会自动探测并选择一个URL使用。但是source.list中允许如下写法:

deb mirror://URL1/mirror.txt xenial main restricted
deb mirror://URL2/mirror.txt xenial-updates main restricted

Ubuntu系统如何选择镜像

Ubuntu系统的源

Ubuntu系统中源内容大致如下:
以Ubuntu 16.04为例: livecd中,/etc/apt/source.list的内容大致如下:

deb http://archive.ubuntu.com/ubuntu/ xenial main restricted
deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb http://archive.ubuntu.com/ubuntu/ xenial universe
deb http://archive.ubuntu.com/ubuntu/ xenial-updates universe
deb http://archive.ubuntu.com/ubuntu/ xenial multiverse
deb http://archive.ubuntu.com/ubuntu/ xenial-updates multiverse
deb http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted
deb http://security.ubuntu.com/ubuntu xenial-security universe
deb http://security.ubuntu.com/ubuntu xenial-security multiverse

Ubuntu系统选择镜像

Ubuntu系统支持镜像选择,但是不是通过apt的mirror机制来实现的,而是在安装程序中,通过用户选择locale信息进行镜像的变换。

安装时选择中文,则source.list的内容如下:

deb http://cn.archive.ubuntu.com/ubuntu/ xenial main restricted
deb http://cn.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb http://cn.archive.ubuntu.com/ubuntu/ xenial universe
deb http://cn.archive.ubuntu.com/ubuntu/ xenial-updates universe
deb http://cn.archive.ubuntu.com/ubuntu/ xenial multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted
deb http://security.ubuntu.com/ubuntu xenial-security universe
deb http://security.ubuntu.com/ubuntu xenial-security multiverse

安装时选择日文,则变成:

deb http://jp.archive.ubuntu.com/ubuntu/ xenial main restricted
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb http://jp.archive.ubuntu.com/ubuntu/ xenial universe
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-updates universe
deb http://jp.archive.ubuntu.com/ubuntu/ xenial multiverse
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted
deb http://security.ubuntu.com/ubuntu xenial-security universe
deb http://security.ubuntu.com/ubuntu xenial-security multiverse

即对于Ubuntu的主站点来说,会在安装过程中通过用户选择的地域来更换镜像主站点。非主站点的则不变更。

Mint系统如何选择镜像

Mint源组成

Mint的源是由两部分组成的,一部分是Mint自身的源,一部分是上游的Ubuntu系统的源,它的源的内容主要如下:
以mint17.3为例:/etc/apt/source.list.d/official-package-repositories.list

# Do not edit this file manually, use Software Sources instead.

deb http://packages.linuxmint.com rosa main upstream import #id:linuxmint_main
deb http://extra.linuxmint.com rosa main #id:linuxmint_extra

deb http://archive.ubuntu.com/ubuntu trusty main restricted universed multiverse
deb http://archive.ubuntu.com/ubnutu trusty-updates main restricted universed multiverse

deb http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universed multiverse
deb http://archive.canonical.com/ubuntu trusty partner

从以上内容可以看出,mint自身的源来自两个URL:packages.linuxmint.com和extra.linuxmint.com, 而mint引用上游Ubuntu的源则来自两个URL:archive.ubuntu.com/ubuntu和archive.canonical.com/ubuntu。也就意味这整个Mint系统中,源的URL有四个。

而无论是在Livecd环境中,还是在已经安装的环境中(尝试了英文、中文两种语言环境),系统中的源都没有发生变化,也就是Mint本身是不在系统中做源镜像的切换的。那么Mint有没有提供源切换机制呢?

mint源切换方式

Mint系统本身安装的时候没有做镜像源的切换。不过mintsources中提供了一个python脚本,mint-switch-to-local-mirror, 我们查看这脚本的源码,可以知道它基本的思想如下:

通过系统的lsb-release信息获取系统的版本代号,例如rosa
以rosa为关键字,加上mint的components组合(main, upstream import), 从当前系统的sourcelist中获取mint主要仓库的URL(一般是http://packages.linuxmint.com
查询当前的locale信息,包含国家和地区
根据国家地区的信息从mintsources包中提供的mirror列表中选择URL
替换URL到source list文件中

小结

Mint系统中默认没有做源的切换,而且这个工具在Mint17.3系统中执行还有错误(可能还不成熟)。但从现有的debug情况看,对于Mint这种多个源URL的系统,工具只修改自身主要源的URL,其他URL则并不修改。

©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页