npcomet 发表于 2007-10-12 11:43:37

smart使用教程(原文题目When urpmi is becoming smart)

转发这篇帖子是这里包含的 smart的介绍,网上关于 smart介绍的文章太少了,此篇文章是05年fundawang为Mandriva Linux 2006写的,
现在仍然有很高的参考价值。


在即将发布的Mandriva Linux 2006中,urpmi和smart两种不同的依赖关系解决方案会同时出现,并且很有可能在2007中,smart取代urpmi成为系统默认的软件管理器。所以,我决定现在对smart进行一番研究。

事实上,apt在很大程度上沾了dpkg和Debian的光,软件包的格式、软件仓库的格式以及发行版的打包规则,这些超强的闪光点将apt的缺点绝妙地掩藏了起来。事实上,如果没有Debian的软件仓库的话,apt的智能程度可能接近urpmi,稍好于yum和red-carpet。进行更加智能的软件包依赖关系处理,这是smart的研究初衷。

在smart中,软件仓库被称为channel。你可以根据自己的需要添加多个类型完全不同的channel,比如混合添加Mandriva的urpmi仓库,Fedora Core的yum仓库,Debian的apt-deb仓库。当然,为了安全起见,没有人会在一种发行版中使用另外一个发行版的软件仓库。

smart 的语法类似于yum,所有功能都由smart这个命令独立实现。添加一个channel的语法是:

smart channel --add <name> type=<repotype> baseurl=<baseurl> hdlurl=<hdlist>

这个语法可能有点复杂。不过如果用过urpmi的话,这两条命令是等价的:

urpmi.addmedia mainsig \
http://mirror.averse.net/pub/Mandrakelinux/devel/cooker/i586/media/main \
with media_info/synthesis.hdlist.cz

smart channel --add mainsig type=urpmi \
baseurl=http://mirror.averse.net/pub/Mandrakelinux/devel/cooker/i586/media/main \
hdlurl=media_info/synthesis.hdlist.cz

安装软件和卸载软件,语法也很简单:

smart install eva
smart remove gaim

npcomet 发表于 2007-10-12 11:47:17

smart的另外一个优点是更好的解决了镜像的问题。

实际上,urpmi是没有镜像功能的,它所谓的镜像是通过添加多个软件仓库实现的。而在对多个软件仓库进行考量的时候,只有软件版本的高低而已:存放着高版本软件的仓库将被使用,如果存放的软件版本相同,则使用配置文件中靠前的一个。据我所知,apt的策略与此类似,yum不详。

smart中对镜像的管理是完全并行的。正如我在Part I中介绍的那样,smart的软件仓库叫做channel。通常情况下,Mandriva的channel有两个:main和contrib。也就是:

$ smart channel --show

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


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://[email protected]/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中安装,由于[email protected]只能与/devel/cooker/i586匹配,无法匹配 /official/10.2/i586/media/main/这个路径,所以只能从前三台服务器中下载。当然,实际从哪台服务器上下载,也取决于 smart历史中对每个镜像记录的成功次数和速度。比如在我这里,虽然添加了ftp.sunet.se这个服务器,但由于这个服务器太慢,我历次下载的时候smart都没有考虑过它。

npcomet 发表于 2007-10-12 11:49:20

也许你永远不会用到mysql的shell模式,但是如果你是一个smart的用户,一定会对它的shell模式赞赏有加。你可以在shell模式中向smart发出多条指令,然后用一个commit执行之。比如:

# smart --shell
Smart Package Manager 0.39 - Shell Mode

Loading cache...
Updating cache...               ########################################

smart> update
Fetching information for 'mainpri'...

Fetching information for 'contribpri'...

Updating cache...               ########################################

smart> info eva
Name: eva
Version: 0.3.1-4mdk@i586
Priority: 0
Group: Networking/Instant messaging
Installed Size: 3.3MB
Reference URLs: http://www.sourceforge.net/projects/evaq
Flags:
Channels: RPM Database; mainpri
Summary: Eva is an IM client compatible with QQ protocol based on QT
Description:
Eva is an IM client compatible with QQ protocol based on QT and KDE.

smart> upgrade


Upgrading packages (57):
Installed packages (1):

780.7kB will be used.

Confirm changes? (Y/n): y

smart> commit

Upgrading packages (57):
Installed packages (1):

780.7kB will be used.

Confirm changes? (Y/n): y

Fetching packages...

当然,你在smart的shell模式中可以使用Tab键来补全软件包名称,也可以使用通配符来指定软件包。

mandrakechina 发表于 2007-10-14 20:47:24

这下你知道为什么我后来不想写文章了吧。因为除了少数几个人之外,从来没有人写点什么东西,大多数人都是东抄一点西凑一点。

npcomet 发表于 2007-10-14 23:09:27

:lol: :lol: :lol:
不是在说我吧:cry: :cry: :cry:
页: [1]
查看完整版本: smart使用教程(原文题目When urpmi is becoming smart)