smart的另外一个优点是更好的解决了镜像的问题。
实际上,urpmi是没有镜像功能的,它所谓的镜像是通过添加多个软件仓库实现的。而在对多个软件仓库进行考量的时候,只有软件版本的高低而已:存放着高版本软件的仓库将被使用,如果存放的软件版本相同,则使用配置文件中靠前的一个。据我所知,apt的策略与此类似,yum不详。
smart中对镜像的管理是完全并行的。正如我在Part I中介绍的那样,smart的软件仓库叫做channel。通常情况下,Mandriva的channel有两个:main和contrib。也就是:
复制内容到剪贴板
代码:
$ smart channel --show
[mainpri]
type = urpmi
baseurl = http://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/devel/cooker/i586/media/main
hdlurl = http://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/devel/cooker/i586/media/main/media_info/synthesis.hdlist.cz复制内容到剪贴板
代码:
[contribpri]
type = urpmi
baseurl = http://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/devel/cooker/i586/media/contrib
hdlurl = http://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/devel/cooker/i586/media/contrib/media_info/synthesis.hdlist.cz实际上,在全球的各个服务器上存放了Mandriva Linux的镜像,而这些镜像的目录结构都是完全相同的。为了将同样软件仓库的镜像纳入smart的考虑,我们要将所有镜像对应的URL添加到smart的mirror里:
复制内容到剪贴板
代码:
# smart mirror --add \
http://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/ \
http://mirror.averse.net/pub/Mandrakelinux/这条命令的意思是说,carroll和mirror这两台服务器在指定目录以下的目录结构中完全相同。类似的,我们可以添加多个mirror:
复制内容到剪贴板
代码:
$ smart mirror --show
http://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/
http://mirror.averse.net/pub/Mandrakelinux/
http://ftp.sunet.se/pub/os/Linux/distributions/mandrakelinux/
http://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/devel/cooker/i586
ftp://cooker@mirror.mandrakelinux.cn/i586相信大家可以看到,mirror的功能是不区分协议的,这意味着你可以将本地目录添加为网上仓库的mirror。而smart在进行mirror查找的时候,只会进行模式匹配的字符串替换。
在你设置了多个mirror之后,smart在进行大量更新的时候,会尝试同时下载多个文件。至于是从多个服务器同时下载,还是从一个服务器多线下载,取决于你设置了多少个mirror。我来举一个例子
复制内容到剪贴板
代码:
$ smart query OpenOffice.org-l10n-zh_CN --show-requires
OpenOffice.org-l10n-zh_CN-1:1.1.5-0.rc4.2mdk@i586
Requires:
OpenOffice.org = 1:1.1.5
fonts-ttf-gb2312
locales-zh
myspell-dictionary我们可以看到,这个软件包有四个依赖关系。那么按照我们上面的设置,如果你是在cooker中安装这个软件包,就可以匹配包括 mirror.mandrakelinux.cn在内的四台服务器;如果你要在2005 official中安装,由于cooker@mirror.mandrakelinux.cn只能与/devel/cooker/i586匹配,无法匹配 /official/10.2/i586/media/main/这个路径,所以只能从前三台服务器中下载。当然,实际从哪台服务器上下载,也取决于 smart历史中对每个镜像记录的成功次数和速度。比如在我这里,虽然添加了ftp.sunet.se这个服务器,但由于这个服务器太慢,我历次下载的时候smart都没有考虑过它。