QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3697|回复: 4

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

[复制链接]
发表于 2007-10-12 11:43:37 | 显示全部楼层 |阅读模式
转发这篇帖子是这里包含的 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的语法是:

  1. smart channel --add <name> type=<repotype> baseurl=<baseurl> hdlurl=<hdlist>
复制代码


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

  1. urpmi.addmedia mainsig \
  2. http://mirror.averse.net/pub/Mandrakelinux/devel/cooker/i586/media/main \
  3. with media_info/synthesis.hdlist.cz
复制代码

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

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

  1. smart install eva
  2. smart remove gaim
复制代码
 楼主| 发表于 2007-10-12 11:47:17 | 显示全部楼层
smart的另外一个优点是更好的解决了镜像的问题。

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

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

  1. $ smart channel --show
  2. [mainpri]
  3. type = urpmi
  4. baseurl = http://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/devel/cooker/i586/media/main
  5. hdlurl = http://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/devel/cooker/i586/media/main/media_info/synthesis.hdlist.cz
复制代码
  1. [contribpri]
  2. type = urpmi
  3. baseurl = http://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/devel/cooker/i586/media/contrib
  4. 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里:

  1. # smart mirror --add \
  2. http://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/ \
  3. http://mirror.averse.net/pub/Mandrakelinux/
复制代码


这条命令的意思是说,carroll和mirror这两台服务器在指定目录以下的目录结构中完全相同。类似的,我们可以添加多个mirror:

  1. $ smart mirror --show
  2. http://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/
  3.     http://mirror.averse.net/pub/Mandrakelinux/
  4.     http://ftp.sunet.se/pub/os/Linux/distributions/mandrakelinux/

  5. http://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/devel/cooker/i586
  6.     ftp://[email protected]/i586
复制代码


相信大家可以看到,mirror的功能是不区分协议的,这意味着你可以将本地目录添加为网上仓库的mirror。而smart在进行mirror查找的时候,只会进行模式匹配的字符串替换。

在你设置了多个mirror之后,smart在进行大量更新的时候,会尝试同时下载多个文件。至于是从多个服务器同时下载,还是从一个服务器多线下载,取决于你设置了多少个mirror。我来举一个例子

  1. $ smart query OpenOffice.org-l10n-zh_CN --show-requires
  2. OpenOffice.org-l10n-zh_CN-1:1.1.5-0.rc4.2mdk@i586
  3.   Requires:
  4.     OpenOffice.org = 1:1.1.5
  5.     fonts-ttf-gb2312
  6.     locales-zh
  7.     myspell-dictionary
复制代码


我们可以看到,这个软件包有四个依赖关系。那么按照我们上面的设置,如果你是在cooker中安装这个软件包,就可以匹配包括 mirror.mandrakelinux.cn在内的四台服务器;如果你要在2005 official中安装,由于[email protected]只能与/devel/cooker/i586匹配,无法匹配 /official/10.2/i586/media/main/这个路径,所以只能从前三台服务器中下载。当然,实际从哪台服务器上下载,也取决于 smart历史中对每个镜像记录的成功次数和速度。比如在我这里,虽然添加了ftp.sunet.se这个服务器,但由于这个服务器太慢,我历次下载的时候smart都没有考虑过它。
回复

使用道具 举报

 楼主| 发表于 2007-10-12 11:49:20 | 显示全部楼层
也许你永远不会用到mysql的shell模式,但是如果你是一个smart的用户,一定会对它的shell模式赞赏有加。你可以在shell模式中向smart发出多条指令,然后用一个commit执行之。比如:

  1. [root@localhost ~]# smart --shell
  2. Smart Package Manager 0.39 - Shell Mode

  3. Loading cache...
  4. Updating cache...               ######################################## [100%]

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

  7. Fetching information for 'contribpri'...

  8. Updating cache...               ######################################## [100%]

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

  21. smart> upgrade


  22. Upgrading packages (57):
  23. Installed packages (1):

  24. 780.7kB will be used.

  25. Confirm changes? (Y/n): y

  26. smart> commit

  27. Upgrading packages (57):
  28. Installed packages (1):

  29. 780.7kB will be used.

  30. Confirm changes? (Y/n): y

  31. Fetching packages...
复制代码


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

使用道具 举报

发表于 2007-10-14 20:47:24 | 显示全部楼层
这下你知道为什么我后来不想写文章了吧。因为除了少数几个人之外,从来没有人写点什么东西,大多数人都是东抄一点西凑一点。
回复

使用道具 举报

 楼主| 发表于 2007-10-14 23:09:27 | 显示全部楼层

不是在说我吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-5-5 23:38 , Processed in 0.093738 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表