服务器架设篇 - RedHat 9

第八章、Linux 网络套件升级

up2date 的注册、使用方法,以及 RPM 的方法!

最近更新时间: 2003/08/22

本文数据主要针对 RedHat 9 的系统进行说明,要注意的是,RedHat 9 与 Red Hat Enterprise Linux (RHEL) 是完全不同的东西!RedHat 9 在 2003 年推出,在 2004 年就不再维护了!这部份网站更新到 2005 年,也没有再维护过! 因此,建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 RedHat 9 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!
在现在的 Internet 上面,Cracker 实在是太多了!这些 Cracker 利用已知道的 Linux 上面的套件漏洞,来进行侦测、入侵您的主机,因此,除了未来架设防火墙之外,最重要的 Linux 日常管理工作,莫过于套件的升级了!不过,经由每日观察网络安全通报所告知的套件漏洞,以及等待各大 distribution 针对这些漏洞来提供 RPM 文件,以使 Client 来升级的过程中,实在是有点缓慢啊!因此,目前就有很多在线直接更新的机制出现了!有了这些在线直接更新 RPM 的手段与方法,我们系统管理员在管理主机系统上面,可就轻松的多啰!赶紧来看看吧!

为何我的 Linux 要升级?

    网络上面常常听到:『大家好,我的 Linux 好像怪怪的,因为没有办法以 root 的身份登录了!』呵呵!几乎不要怀疑的可以跟这位朋友说:『您的 Linux 主机被入侵了!』『瞎米!』早上才刚刚安装完 Linux 系统,下午立刻被入侵,这是真的还是假的!?呵呵!当然『系金A!』,没有错!由于这个网络世界越来越复杂化,互联网的组成份子也就越来越多样化了~里面不乏很多所谓的『网络闲人』,天天在侦测人家的系统漏洞,并借以宣称自己是『高手!』。对于这些人的想法,实在是觉得很奇怪!算了!不管怎么说,我们还是得防备一下这些不速之客啊!
     
    一般来说,这些不速之客到底是怎么入侵您的 Linux 主机的呢?排除一些高级黑客的入侵手法,通常,一些低级怪客 ( Cracker ) 最喜欢直接由网络上面取得所谓的入侵软件( 不要怀疑,这些入侵软件真的随手可得!),然后直接以这种入侵软件来进行 Linux 主机的攻击的!不过,这些攻击软件到底是怎么来的?!基本上,由于 Linux 上面的套件太多了,总是有些套件可能在设计之初没有想到一些可能被利用的程序漏洞,所以,当这样的程序发布之后,如果漏洞被利用,则可能会产生系统的危害。某些人士就针对这样的系统漏洞来写成一些程序,这些程序就可以直接利用这些套件的漏洞来攻击 Linux 主机了!也就是说,利用套件的漏洞就能够取得您主机上面的 root 的权限或者一些功能。所以啦!安装完 Linux 系统后,第一件要做的事情就是赶紧去升级您的系统套件啰
     
    事实上,套件的漏洞倒不是一定是会被利用来进行入侵,有的时候,某些套件的漏洞可能导致您 Linux 主机的运行不良或者是容易产生系统当机等等的问题呢!所以,一个好的 Linux 主机,他的套件最好是随时保持在较新的版本上面,这样还是比较好一点的啦!关于安全漏洞的通报您可以参考底下的网站:
       
    了解了需要套件升级的基本理由之后,接下来要了解的是:『那么我要如何升级我的套件啊?!』说的好!先来理解一下您的 Linux 系统上面是使用哪一种方式来安装您的套件的呢?!一般来说,有底下这几种方式:
     
    • RPM:这个是最早由 Red Hat 公司发展的,后来成为 Linux 上面使用最为广泛的一种套件制作与安装的方式;
    • Tarball:使用原代码在您的系统上面编译出可以运行的文件,以成功的安装该套件;
    • dpkg:与 RPM 有点类似的方式,是 Debian 的套件管理员。
     
    我们不谈哪一种套件管理方式好,只是要了解的是,这几种方式是常见的套件安装方法。好了,既然有这些套件安装的方式,所以啦,如果您的套件要升级,就需要依据当初安装这个套件所使用的方法来加以考量了!举个例子来说,如果您的邮件服务器套件 sendmail 是经由 RPM 来安装的,那么当您要将 sendmail 这个套件『直接』升级时,就需要使用原始的 distribution 那家公司所发布的 Sendmail 的 RPM 文件来安装啰!那么我可以使用 Tarball 来升级 sendmail 吗?!当然可以!不过,那就需要花比较多的时间去一个步骤一个步骤的完成升级的手续了! ( 因为还需要经过主机搜索、编译、安装与设置等等过程) 。
     
    不管怎说,反正如果是手动升级的话,那么您就必须要(1)先到网络上面下载最新的文件(2)根据各个不同的方法来进行安装手续(3)额外的设置档设置。唉!真是麻烦。难道说,真的套件升级只能使用 RPM/Tarball/dpkg 这些手动的方式吗?!
     
    我们都晓得在 Windows 底下有个 update 的选项,这个 update 的选项可以随时将您的 Windows 保持在最新套件的环境中。此外,在一些杀毒软件的附属功能中,由于病毒随时在变种,所以杀毒软件也提供了在线直接更新的功能 ( Live Update )。咦!那我的 Linux 可不可以利用这样的功能来自动升级我的 Linux 套件啊?!如果可以的话,那就真的是太好了! ^_^ !呵呵!果真是太好了!目前在 Internet 上面就有多种的 Linux 套件在线更新方式呢!例如:
     
    • Red Hat 提供的 up2date 这个套件升级方式;
    • Mandrake 提供的 urpmi 升级方式;
    • APT 的套件升级方法。
     
    这些套件升级的方式都是在线直接更新的呢!不过要小心的是,这些套件更新的方法几乎都是针对各个 distribution 自家的系统平台喔!例如 up2date 这个功能就只能在 Red Hat 的 distribution 上面工作,而 APT 的方式则需要找到自己能够使用的 APT Server 才行!此外,这些方法几乎都是针对已经打包完成的 RPM 文件来升级的哩!而且 up2date, urpmi 与 APT 都已经克服了 RPM 的文件相依属性的问题了喔!真是不错!然而,这些方法都是针对 RPM ,因此, Tarball 的套件是无法经由 up2date, urpmi 或者 APT 来升级的呢!还是得自己来手动升级的啦!
     
    底下我们就来谈一谈目前常见的几种在线直接升级的方法,以及鸟哥自己写的一支在线升级的 BASH script 喔!

以 up2date 进行 Linux 网络套件升级

    为了让自家的 Linux 操作系统可以更安全更无后顾之忧,而且为了让用户更方便来进行系统的套件升级,Red Hat 首先推出的就是 up2date 这个好用的家伙了! up2date 可以让用户在进行过注册的进程之后,直接以在线升级的方式进行套件的升级,相当的方便好用。不过,奇怪了, Red Hat 本身就已经有套件漏洞与错误通报网站,也就是底下这个网站:
     
     
    用户可以直接以浏览器连接到此网站,然后下载所需要的套件,就可以立刻升级了!既然如此,为何还需要使用 up2date 呢?有两个基本的原因啦!首先,由于在过去的经验中,用户在进行 Red Hat 的 RPM 升级时,最容易发生的升级问题就是:『套件的属性相依问题!』如果对于『鸟哥的 Linux 私房菜 -- 基础学习篇』还有印象的话,那就应该还记得 RPM 与 Tarball 套件管理员那一章节吧!?我们知道 RPM 是已经经过编译过的可运行文件( binary file ),因此,他只能够在适合自己的版本与相关文件都已经安装的环境中,才可以被正确且正常的安装完毕!不过,用户常常会忽略掉一些基本的套件安装,因此导致常常无法顺利升级,总是要找好几个需要一起同时升级的套件,啊!真是麻烦啊!再来,如果是自己到网站上去下载,由于是手动的方式,总是觉得不方便,尤其是当系统管理员同时管理好几部主机时,很有可能会不小心遗忘了某几部主机啊!伤脑筋~所以,这个时候就有 up2date 的推出了!
     
    up2date 的工作原理中:
     
    • 首先会针对您的系统上面的套件进行分析,然后通过 Red Hat 的 up2date 网站进行交叉比对分析,并同时将所有需要的相依属性的套件一起记录下来;
    • 之后将上面的记录中所有需要的套件,包括那些相依属性的套件通通下载到您的 Linux 系统上面;
    • 最后,就是直接在您的 Linux 上面进行升级的动作啦! ^_^
     
    太好了!如此一来我们可以不必考虑套件的属性相依的问题,因为 up2date 已经帮我们克服了!因此,我们的系统就可以自动的给他升级了!而不需要系统管理员手动的升级呢!闲话就不多说了,谈一谈 up2date 的使用流程吧!基本上, up2date 实作的过程很简单,不过由于还需要进行 up2date 的网站注册动作,所以您必须:
    1. 下载并更新 up2date 与 rhn_register 套件(注:在 Red Hat 9 以后, rhn_register 这个套件的功能已经集成到 up2date 里面去了, 所以 Red Hat 9 以后的版本只要 up2date 这个套件而已。);
    2. 确定可以登录 Internet ,可能的话,并找寻可支持的近端 proxy ;
    3. 运行 rhn_register 在线注册;
    4. 运行 up2date 更新套件。
    这样就可以啰。不过有几件事情必须说明一下:
     
    • up2date 是 Red Hat 公司为了自己的 Linux 系统所推出的,所以当然仅支持 Red Hat Linux 而已,如果您不是 Red Hat Linux 的 Linux 用户,不要使用 up2date 喔!
    • up2date 套件在 Red Hat 7.2 以后已经缺省安装好在您的 Linux 系统上面了,但是旧版本的 Red Hat 本身并没有 up2date 的套件 ( 例如 Red Hat 6.1 ),所以如果您是 Red Hat 系统的旧用户,那么您必须先安装 up2date 套件;
    • 由于 up2date 套件使用之前必须先登录 Red Hat 公司的 up2date 网站,所以您必须先注册才行。 Red Hat 使用的注册程序,即为 rhn_register !因此,整个流程就是先注册,然后就可以在线更新啰。
    • 附加一点,目前 Red Hat 已经针对不同的用户进行 up2date 的在线更新流量限制,所以如果像我们这一种免费的用户,有可能会比较难登录 up2date Server 去进行更新的动作呦!这点请特别留意啰!所以,如果您的 ISP 或者网络环境不利于连接到国外的话,请记得使用 Proxy 喔!
    • 此外的此外,由于 rpm 套件只有 root 可以来变更系统,所以以下的指令都必须以 root 的身份来安装
     
    底下我们就一步一步来进行 up2date 的使用吧!
     

    安装或更新 up2date 与 rhn_register 套件:
     
    理论上, Red Hat 所发布的各版本 Linux 系统均有提供 up2date 的服务,不过,由于 up2date 是最近这几年才提供的服务,大约是在 Red Hat 7.x 以后才出现的玩意儿,所以说,那个 Red Hat 6.x 以前的版本实在是太旧了点,如果您仍然使用的是 Red Hat 6.x 以前的版本,那么我想,为了克服一些套件的漏洞,您的系统里面应该已经大多使用了 Tarball 所安装的套件了!呵呵!因此,说实在的,没有什么动力还要去玩 up2date 呢(因为 up2date 仅针对 Red Hat 自家公司所推出的 RPM 套件来进行更新而已!)!所以啰,底下的文档部分,鸟哥仅提供 Red Hat 7.x 以后的版本中,本来就含有 up2date 的环境底下的实作方式。原则上, Red Hat Linux 安装完毕之后,就已经提供了 up2date 的功能啰!我这里以 Red Hat 9 进行介绍啰!
     
    如果您的 Red Hat 版本是在 8.0 以前的话,那么您的系统当中应该会需要 rhn_register 与 up2date 两个套件,不过,如果是在 Red Hat 9 这个版本当中,那么只需要 up2date 即可!因为 rhn_register 这个套件的功能已经被集成到 up2date 里面去了!一般来说,当您安装好 Red Hat Linux 的时候,应该 up2date 会自动的安装上去,这个套件是缺省选项会安装的呐~如果万一不幸没有安装上去的话,这个时候,请拿出您的 Red Hat 原版光盘,mount 他,然后直接安装吧!嗄!原版光盘不见了~伤脑筋,不过不要紧,请到中山大学去瞧一瞧吧!:
       
    使用 rpm 将 up2date 或/与 rhn_register 两个套件安装起来吧!安装完毕之后,应该可以看到 up2date 在您的系统当中喔!以我的 Red Hat 9 为例:
     
    [root@test root]# rpm -qa | grep up2date
    up2date-3.1.23-1
     
    :由于 Red Hat 在 2003/08 更新 up2date 套件时,出了点小问题,导致用户无法直接连接上 Red Hat 的 up2date 网站,所以,请先手动至 Red Hat 官方网站( https://#/apps/support/errata/ ) 进行 up2date 程序的下载,并以 rpm -Uvh update-xxx.rpm 来升级后,才能继续下列的动作喔!
     

    注册:
     
    up2date 的注册方式有两种方法,一种是直接以浏览器来在线注册,另外一种则是以 up2date 的程序功能 ( rhn_register ) 来进行直接注册!底下分别谈一谈注册的方法吧!
     
    • 以浏览器来在线注册:

    • up2date 的在线注册网站在这里:http://rhn.redhat.com/network ,连接之后如下图所示:
       

       
      因为尚未创建过注册的数据,所以当然要选择上面箭头的部分『Create Account』(创建帐号)啰!
       

       
      Red Hat 提供三种注册的帐号给用户选择,分别是个人式帐号、公司帐号与学术研究帐号。因为我们是一般用户啊!所以我们这里以个人式帐号来进行说明!给他按下『Create a new personal account』之后,出现下面画面,并请在有红色星号的空白处填写正确喔!并且在最右下方的按钮处按下『Create Account』。
       

       
      最后完成的画面就如同下面图标所示,这样就已经完成了注册了!注意!因为我们没有提供我们的操作系统给注册网站知道,因此,他并没有显示出目前我们 Red Hat 主机的数据!所以,您应该将注册时填写的帐号与密码记录下来,因为这个是未来主机要连接时所必须要填写的数据!
       
       
    • 使用主机提供的 rhn_register 功能注册:

    • 虽然使用浏览器来注册是比较方便一些,不过毕竟由于没有提供我们 Red Hat Linux 主机的信息,结果导致还要在注册完毕之后去改写 up2date 的设置档数据,有点小麻烦啊!因此,使用 Linux 上面的 rhn_register 来注册不失为一个好主意!在主机上面注册的方式,先登录主机,打开一个终端机 (console) ,依步骤输入底下的数据:
       
      1. 重建 RPM 数据库:

      2. 因为我们必须告诉 Red Hat 的注册网站关于目前我们 Linux 主机的 RPM 套件信息,这样一来, Red Hat 的网站才能依照我们的 RPM 数据给予我们 Linux 系统的升级!所以,可能的话,最好是先重建一下 Linux 的 RPM 数据库:
        [root@test roo]# rpm --rebuilddb
         
      3. 首次注册进程:

      4. 就使用 rhn_register 这一支程序吧!
        [root@test roo]# rhn_register
        0.  debug              No
        1.  rhnuuid            6b1058dc-82ee-11d7-9acb-cd7c6dfdb7bc
        2.  isatty             Yes
        3.  showAvailablePacka No
        4.  depslist           []
        5.  retrieveOnly       No
        6.  enableRollbacks    No
        7.  pkgSkipList        ['kernel*']
        8.  storageDir         /var/spool/up2date
        9.  adminAddress       ['root@localhost']
        10. noBootLoader       No
        11. serverURL          https://xmlrpc.rhn.redhat.com/XMLRPC
        12. fileSkipList       []
        13. sslCACert          /usr/share/rhn/RHNS-CA-CERT
        14. noReplaceConfig    Yes
        15. noReboots          None
        16. useNoSSLForPackage No
        17. systemIdPath       /etc/sysconfig/rhn/systemid
        18. enableProxyAuth    No
        19. retrieveSource     No
        20. versionOverride
        21. headerFetchCount   10
        22. networkRetries     5
        23. enableProxy        No
        24. proxyPassword
        25. noSSLServerURL     http://xmlrpc.rhn.redhat.com/XMLRPC
        26. keepAfterInstall   No
        27. proxyUser
        28. removeSkipList     ['kernel*']
        29. useGPG             Yes
        30. gpgKeyRing         /etc/sysconfig/rhn/up2date-keyring.gpg
        31. httpProxy
        32. headerCacheSize    40
        33. forceInstall       No
        34. noReboot           No
         
        Enter number of item to edit <return to exit, q to quit without saving>: 
        这个时候可以按下 Enter 来离开!而且,这个画面只有在第一次才会出现!
        此外,不同的版本出现的画面不太相同!不过原理都一样的啦!需要特别留意的
        是上面几个不同字体的部分!不过不要紧,可以先保持默认值,其他的
        未来再手动来设置。
         
        Your GPG keyring does not contain the Red Hat, Inc. public key.
        Without it, you will be unable to verify that packages Update Agent 
        downloads are securely signed by Red Hat.
        Your Update Agent options specify that you want to use GPG.
        To install the key, run the following as root:
         
           rpm --import /usr/share/rhn/RPM-GPG-KEY
        这里在说明我们的注册程序没有 Red Hat 的 GPG 公钥(Public Key),
        所以需要手动来制作一份!直接输入上面的字眼即可!
        [root@test root]# rpm --import /usr/share/rhn/RPM-GPG-KEY
        上面的动作进行完毕后,如果您有信息想要更改,例如上图的 31 httpProxy 这个项目,如果您了解您使用的网络的上层代理服务器(Proxy)的话,可以填写这个数据!在哪里填写呢?!在底下这个文件内喔!
        /etc/sysconfig/rhn/up2date
         
      5. 开始编写与发送注册数据:

      6. 好了!基本的数据做完之后,可以开始发送与编写您的注册数据啰!再运行 rhn_register 一次后,会出现下面的画面喔!
         

         
        按下 Next 之后,会出现如下的 Red Hat 公司的隐私声名,请详细看完之后,按下 Next 吧!
         

         
        在出现了如下的注册画面后,呵呵!填写您的注册数据吧!是否跟刚刚上面浏览器的申请一模一样呢?!没错啦!确实一样喔!填写完毕后,请输入 Next 吧!
         

         
        呵呵!接下来就是要将我们主机的(1)硬件数据与(2)操作系统的信息给他上传给 Red Hat 的注册网站啰!如下所示,如果一切都没有问题的话,就给他 Next 吧!(使用 Tab 按键)。
         

         
        好了!在创建好我们的主机套件信息后,呵呵!在底下的画面按下 Next 吧!
         


         
        终于将一些信息收集完毕,呵呵!要将数据传上 Red Hat 啰!还是按下 Next 吧!
         



        看到上面的 Finish 就表示,哈哈!『挖出温啊!』(我出运了)恭喜您!注册完毕啰!准备使用 up2date 的强大功能吧! ^_^

    开始使用 up2date 功能:
     
    只有在第一次使用 up2date 之前才需要注册,未来您的主机就可以直接使用 up2date 而不需要再次的注册啰喔!好了,来使用 up2date 的功能吧!您可以使用 man up2date 来了解 up2date 的所有功能,不过,这里只几个可能比较常用的:
     
    [root@test /root]# up2date -l     <==列出所有可以升级的套件
    [root@test /root]# up2date --showall <==列出您的版本中,有没有可以升级的套件
    [root@test /root]# up2date -i packages<==直接升级 packages 那个套件!例如:
    [root@test /root]# up2date -i gdb <==直接连到 Red Hat 主机升级 gdb 这个套件
    [root@test /root]# up2date -u  <==全部的套件升级!等于升级您的 Red Hat !
     
    举个常见的例子来进行 up2date 的更新动作好了:
     
    # 1. 先检查一下我的主机需要进行更新的套件有哪些?
    [root@test /root]# up2date -l
    Fetching package list for channel: redhat-linux-i386-9...
    ########################################

    Fetching Obsoletes list for channel: redhat-linux-i386-9...
    ########################################

    Fetching rpm headers...
    ########################################

    Name                                    Version        Rel
    ----------------------------------------------------------
    redhat-config-date                      1.5.15         1
    unzip                                   5.50           14

    注:因为我曾经更新过,所以这里显示出来的套件有点少喔! ^_^

    # 2. 针对 unzip 这个套件来更新一下:
    [root@test /root]# rpm -q unzip
    unzip-5.50-7
    [root@test /root]# up2date -i unzip

    Fetching package list for channel: redhat-linux-i386-9...
    ########################################

    Fetching Obsoletes list for channel: redhat-linux-i386-9...
    ########################################

    Fetching rpm headers...
    ########################################

    Testing package set / solving RPM inter-dependencies...
    ########################################
    unzip-5.50-14.i386.rpm:     ###############          1 k/sec, 00:00:34 rem.
    unzip-5.50-14.i386.rpm:     ########################## Done.

     

    结语
     
    其实我个人对于 up2date 的评价还不错!因为他解决了在 Red Hat 使用的 RPM 套件当中,属性相依的这个最麻烦也最讨厌的问题了!使得用户与系统管理员可以轻松的无痛的进行系统套件的升级!不过,并不是每个人都适合使用 up2date 来进行套件的升级的啦!怎么说呢?
     
    • 网络问题:由于『知识服务无价!』所以,Red Hat 确实是有针对不同的用户限制 up2date 的流量的!有付费的注册会员会有较大的使用带宽喔!当 Red Hat 注册主机流量不足时,当然,我们这些散兵游勇就不可能有带宽可以进行升级了!因此,呵呵!小流量的我们的主机,想使用 up2date 来升级,会花上很长的一段时间的!
     
    • 套件安装问题:如果您喜欢自己使用 Tarball 进行自己的套件修补的话,那么 up2date 对您而言可能根本没有什么用处的!因为他只针对 Red Hat 自家出品的 RPM 文件进行升级而已喔!
     
    不过,无论如何,鸟哥还是相当建议您去进行注册的!为什么呢?因为网络上面的安全通报很多,我们可能没有什么时间去关心一下网络安全的问题!这个时候, up2date 的好处就来啦!因为每次 up2date 发现您的套件(在注册的时候不是有提供您系统上面的套件吗?!就是那个啦!)可能有漏洞,并且也已经推出修补的程序时,就会发送 email 到您的信箱去!该封 email 列有相当详细的问题解析与如何升级的方式,呵呵!光是这些信息,对于系统管理员的我们来说,就具有相当棒的好处啦!您说是吧! ^_^
     
    反正,能够以 Linux 上网之后,第一件事情,请您赶快进行 Linux 系统之套件的升级吧!以免有些漏洞造成您系统整体的问题!

Mandrake 的 urpmi 升级

    相对于 Red Hat 的 up2date , Mandrake 也自行推出了一个 urpmi 的套件,这个套件也可以用来进行网络升级喔!事实上, urpmi 是个很不错用的套件,相对于 up2date 一定需要到 Red Hat 的 up2date 上面去进行升级, urpmi 则可以自行选择提供 RPM 文件的服务器来源 ( 在 urpmi 里面称为媒体, media ),而且与 up2date 相同的是, urpmi 也会自动的由远程服务器 ( 远程的媒体 ) 上面的套件去分析各个 RPM 文件之间的相依属性 (dependence ) 之后,然后再下载所需要的套件,并据以升级自己的套件!所以,我们只要:
     
    1. 选择最靠近我们主机的 FTP 网站,并以 urpmi.addmedia 指令将该网站(媒体)加入到 urpmi 分析的媒体当中;
    2. 将上面登录的媒体当中,所有的套件信息写到我们的主机上面 (使用 urpmi.update 指令 );
    3. 利用 urpmi 指令来进行套件升级。
     
    全部的动作就是这么简单喔! ^_^
     

    urpmi 的套件结构
     
    urpmi 相关的设置档与运行指令有:
     
    • /var/lib/urpmi/list.*:刚刚上面不是提到了媒体吗?这个媒体有可能是原版光盘、 FTP 服务器网站以及 WWW 网站等等。而这些媒体上面的信息都会被纪录到 urpmi 的纪录档当中,那就是这个文件的功能啦!当我们选择了媒体,并且使用 urpmi.addmedia 之后,相关的 list.媒体名称 就会被创建,而当使用 urpmi.update 则该文件就会被更新!也就是说,每一个媒体都会具有一个信息纪录文件。举例来说,我的 Mandrake 9.0 有三块光盘,这三块光盘的信息就分别在:
      • list.Installation CD 1 (x86) (cdrom1)
      • list.Installation CD 2 (x86) (cdrom2)
      • list.International CD (x86) (cdrom3)
      上面三个文件分别记录了三块光盘的内容,当我以 urpmi 要安装某个程序时, urpmi 就会到这这三个文件内去搜索我要的套件,然后自己分析出相依属性的套件,我只要顺着屏幕的数据放入原版光盘即可!不再需要自己去搞定 RPM 的属性相依问题了。
       
    • /var/lib/urpmi/hdlist.*/var/lib/urpmi/synthesis.*:与 list.* 类似的,主要的文件内容仍在于将媒体的信息记录下来,好让 urpmi 可以顺利的进行套件的属性相依分析与下载升级等动作!

    •  
    • /etc/urpmi/urpmi.cfg:这个文件记录了各个媒体的说明而已,例如缺省的情况下,这个文件内有三块原版光盘的说明而已。

    •  
    • /etc/urpmi/skip.list:这个文件里面如果有列出某些套件名称(可以使用正规表示法来表示套件名称),则该套件就不能以 urpmi 来自动升级了。这样可以避免一些比较危险的套件安装。缺省的情况下这个文件里面不会有任何套件名称存在。

    •  
    • /etc/urpmi/inst.list:列出您需要安装,而不是升级的套件!

    •  
    • /usr/sbin/urpmi:这个就是安装的主程序啦!

    •  
    • /usr/sbin/urpme:这个就是移除的主程序啦!

    •  
    • /usr/sbin/urpmq:这个就是用来查找媒体里面包含的套件信息!

    •  
    • /usr/sbin/urpmi.addmedia/usr/sbin/urpmi.update :这两个指令的主要功能就是用来添加 RPM 放置的媒体 ( 不论是保存媒体还是网站 ),以及将媒体上面的信息更新到自己的 /var/lib/urpmi 目录下的文件当中!
     
    基本上,最常用到的就是 urpmi 咯,而不要忘记了刚开始使用 urpmi 的时候需要选择媒体,那么 urpmi.addmedia 也需要学会喔!
     

    选择 RPM 文件的媒体
     
    虽然在 /var/lib/urmpi/list.* 已经具有原版光盘的 RPM 文件信息存在了,但是老是抽换光盘总是觉得蛮讨厌的!所以在这里,我依然选择了一个 Internet 上面的 Mandrake 原版 RPM 文件的网站,另外,也选择了一个升级网站 (update 网站,或者是 patch 网站) ,好让我可以自由自在的经过 Internet 来安装或升级我的系统。考虑到我在南部,所以我选择了中山大学这个 FTP 网站,而这个网站关于 Mandrake 的路径为:(请注意,我以 Mandrake 9.0 为范例喔!如果您是 Mandrake 9.1 或者其他版本,请自行寻找对应的网站路径!)
       
    特别注意到上面,每个 Mandrake 发布的 RPM 都会附上一个 hdlist.cz 的文件来记录 RPM 的相关性,这个 hdlist.cz 文件相当的重要,我们在底下介绍 urpmi.addmedia 来添加媒体时时,就是以这个 hdlist.cz 做为我们分析 RPM 属性的依据来源!通常这个文件放置的地点会是在每个 RPM 文件放置的路径上层的一个名为 base 的目录下,例如 /PATH/Mandrake/RPMS 放置了所有的 RPM 文件,而这些 RPM 文件的相关性则放置在 /PATH/Mandrake/base/hdlist.cz 里面啦!也就是说,他的相对路径其实通常是在 ../base/hdlist.cz 喔! ^_^
     
    而刚刚在 urpmi 的架构中,我们知道 /var/lib/urmpi/list.* 等等的文件是一个媒体为一个文件名,在这个地方,我们其实是选择了两个媒体喔(当然,您可以选择更多的媒体!),好了,我这里将这两个媒体命名为(您可以自行设置媒体名称):
     
    • 原本的 RPM 文件路径:packages.ftp.nsysu
    • 升级的 RPM 文件路径:update.ftp.nsysu
     
    好了,让我们将上面这两个媒体信息给他拷贝到我们的 Mandrake 系统上吧!
     
    [root@test root]# urpmi.addmedia [name] [url] with [属性相关性文件]
    参数说明:
    [name]:为您要为这个媒体设置的一个容易记忆的名称
        设置好之后,会将该名称写入 /etc/urpmi/urmpi.cfg 里面
    [url] :就是 ftp 服务器的完整路径!
    [属性相关文件]:刚刚上面我们不是提到一个 hdlist.cz 吗?就是那个文件
            相对于 [url] 的相对路径与文件名!
    范例:
    [root@test root]# urpmi.addmedia package.ftp.nsysu  \
    > ftp://ftp.nsysu.edu.tw/Linux/Mandrake/mandrake-old/9.0/i586/Mandrake/RPMS \
    > with ../base/hdlist.cz
    [root@test root]# urmpi.addmedia update.ftp.nsysu \
    > ftp://ftp.nsysu.edu.tw/Linux/Mandrake/mandrake/updates/9.0/RPMS  \
    > with ../base/hdlist.cz
    # 上面的动作进行完毕之后,会更动 /etc/urpmi/urmpi.cfg 以及
    # /var/lib/urpmi/ 目录下的内容喔!
     
    # 察看一下 /etc/urpmi/urpmi.cfg 的内容可以发现:
    [root@test root]# more /etc/urpmi/urpmi.cfg
    package.ftp.nsysu  {
      hdlist: hdlist.package.ftp.nsysu.cz
      with_hdlist: ../base/hdlist.cz
      list: list.package.ftp.nsysu
    }

    update.ftp.nsysu  {
      hdlist: hdlist.update.ftp.nsysu.cz
      with_hdlist: ../base/hdlist.cz
      list: list.update.ftp.nsysu
    }
    # 看到了吧!两个媒体已经加入了我们的搜索啰!

      
    如果您想要将刚刚的媒体,或者是原版 CD 的信息移除的话,那么您就可以这样做:
     
    [root@test root]# urpmi.removemedia [name]
    参数说明:
    [name]:为媒体的名称
    范例:
    [root@test root]# urpmi.removemedia package.ftp.nsysu
     
    # 事实上,我蛮讨厌原版光盘还在 /etc/urpmi/urpmi.cfg 里面的,
    # 所以我都会将他移除说!
      

    进行升级: urpmi.update, urpmi
     
    在进行升级之前,有没有想到一件事情,网络上面的 update 修补套件是一直在公告的,所以前一个小节提到的 /PATH/Mandrake/base/hdlist.cz 其实『是一直在更动的!』,亦即每次 Mandrake 公司发布新版的修补套件后,就会同时更新 hdlist.cz ,然而我们的 /var/lib/urpmi/* 只有第一次增加媒体的时候才会主动创建!那么怎么更新套件的信息呢?因为一定要更新套件的信息啊,不然新发布的套件就不会被我们的 urpmi 捉到了!更新的步骤真是太简单了:
     
    [root@test root]# urpmi.update [name]
    参数说明:
    [name]:为媒体的名称
    范例:
    [root@test root]# urpmi.update update.ftp.nsysu
      
    注意一下,因为原版发布的 RPM 文件并不会被更动,所以没有必要对 package.ftp.nsysu 进行 urpmi.update 的动作!但是 update.ftp.nsysu 这个媒体则『每次在进行升级前,都需要 urpmi.update 一次』。好了,更新完毕之后,就来给他升级吧!
     
    [root@test root]# urpmi [options] [套件名称]
    参数说明:
    [options]:主要的参数有:
      --media 媒体名称:以哪一个媒体来进行搜索 RPM 的动作?
      --auto:自动进行升级的动作,而不会再询问用户
      --auto-select:自动将属性相依的文件安装起来;
    [套件名称]:就是要进行升级的套件!
    范例:
     
    # 将 tcpdump 升级一下!
    [root@test root]# urpmi --media update.ftp.nsysu tcpdump
     
    # 自动将所有的套件都给他升级一下:
    [root@test root]# urpmi --media update.ftp.nsysu --auto --auto-select
      

    每日自动升级
     
    如果说要让系统每日进行升级的话,那么您可以使用 cron 这个 daemon 的辅助啊!如果先以手动方式确定 urpmi.update 与 urpmi 运行都没有问题,就可以这样做:
     
    [root@test root]# vi /etc/crontab
    # 在这个文件当中添加一行:
    30 5 * * * root /usr/sbin/urpmi.update update.ftp.nsysu > /dev/null ; /usr/sbin/urpmi --media update.ftp.nsysu --auto --auto-select > /dev/null
    # 特别注意,上面是同一行啊!
     
    通过这样的一个手段后,您的 Mandrake 可以很便利的进行自我升级呢!很不赖吧! ^_^

APT 的使用

    除了 up2date 与 urpmi 之外,其实我们也可以通过 APT 来进行套件的升级喔。事实上, APT 主机的动作与 urpmi 有点类似的,我们要以 APT 服务器提供的功能来自我套件升级时,同样的需要通过 Server 与我们 Linux 主机的套件比对之后,才能够进行套件的安装与升级!我以我的 Red Hat 9 作为范例,要以 APT 网络升级套件时,我们应该这么做:
     
    1. 先寻找适合我们 Linux 系统的 apt 套件,并且安装:

    2. 如果是 Red Hat 系统,可以使用底下的网站提供的 RPM 文件来安装喔:
      http://apt.freshrpms.net/
      以我的 Red Hat 9 为例,要安装的动作为:
      [root@test root]# rpm -ivh \
      > http://ftp.freshrpms.net/pub/freshrpms/redhat/9/apt/apt-0.5.5cnc6-fr1.i386.rpm
      [root@test root]# rpm --import \
      > ftp://linux.sinica.edu.tw/redhat/redhat-9/en/os/i386/RPM-GPG-KEY
      [root@test root]# rpm --import http://ftp.freshrpms.net/pub/freshrpms/RPM-GPG-KEY
      这样就可以直接网络上安装该套件了!一般来说,我们在安装了 RPM 之后,为了要信任来源网站,所以要将该网站提供的 Public Key 读进我们的 linux 系统当中,那就是上面为何需要 import 的原因了!
       
    3. 寻找合适的更新主机:sources.list

    4. 既然 APT 是去到 APT Server 来下载我们 Client 端所需要的套件,所以当然就要寻找我们所需要的 APT 主机啦!如果您是以上面的 APT 套件来安装您的 APT 的话,那么缺省的 APT 主机设置在 /etc/apt/sources.list 里面,内容有点像这样:
      [root@test root]# vi /etc/apt/sources.list
      # Red Hat Linux 9
      rpm http://ayo.freshrpms.net redhat/9/i386 os updates freshrpms
      #rpm-src http://ayo.freshrpms.net redhat/9/i386 os updates freshrpms
      # 里面料的格式为:
      # rpm <APT服务器地址> <相对于服务器的路径> <目录一> <目录二> <目录三> ...
      # 以上面的例子来说,事实上 RPM 放置的目录在:
      # http://ayo.freshrpms.net/redhat/9/i386/RPMS.os
      # http://ayo.freshrpms.net/redhat/9/i386/RPMS.updates
      # http://ayo.freshrpms.net/redhat/9/i386/RPMS.freshrpms
      我们使用缺省的路径即可!当然,您可以自行去 Internet 上面搜索最靠近我们的 APT 服务器,这样可以让我们的 RPM 下载速度比较快啦!
       
    5. 更新 Client 与 APT Server 的对应清单:

    6. 在每次更新之前,请务必将您的主机上面的 RPM 属性清单与 APT 服务器上面同步更新,这样才能下载到最新的套件啊!更新的方式很简单:
      [root@test root]# apt-get update
       
    7. 开始更新与每日更新:

    8. 要安装与更新来自 APT 主机的 RPM 文件真的很简单,只要一个指令 apt-get 即可!工作的方法如下:
      [root@test root]# apt-get <options> <更新项目> <套件名称>
      参数说明:
      options:关于参数有底下几个较常见的:
        -q 不要输出消息,安静一点比较好吗?! ^_^
        -y 如果 apt-get 在工作过程中需要用户回应,这个参数可以直接回答 yes 
      更新项目:更新的动作有底下几个:
        update:就是刚刚我们上个动作说的,要更新 Client 与 Server 的清单对应
        install:安装某个套件,后面接套件名称
        dist-upgrade:自动升级我们系统上面已经安装的所有 RPM 套件喔
        clean:将下载自 APT 主机的的 RPM 文件删除哩!
      范例:
      [root@test root]# apt-get install tcpdump  # 安装 tcpdump 这个套件
      [root@test root]# apt-get -y dist-upgrade  # 升级我们系统上面的所有 RPM 套件
      [root@test root]# apt-get clean 
       
      # 至于每日更新的话,可以写入 /etc/crontab 喔
      [root@test root]# vi /etc/crontab
      40 5 * * * root apt-get update; apt-get -y dist-upgrade ; apt-get clean
       
    呵呵!这么简单的方法就可以自动的更新我们的 Linux 啰!当然啦,我这里是以 Red Hat 系统为范例,如果您的系统并非为 Red Hat ,那么您就得要自行到 Internet 上面去搜索您的 distributions 的 APT Server 咯!至于如果您想要自行架设 APT 主机的话,请参考后续章节的 APT 服务器架设

VBird 的自动更新程序

    套件的升级真的很重要,而通过在线直接升级则是一个很不错的方式,例如前面介绍的 up2date, urpmi 与 APT 等方法。不过,您是否思考过,既然每一个 Linux distribution 在发现漏洞之后都会发布相关的套件修补版本,并且公告在 Internet 上面,而台湾地区很多好的站台都会将这些数据保留下来,以方便台湾地区的 Linux 爱好者可以很快速的进行下载与升级的动作!而由于各大 Linux distribution 在发布他们修改过的套件时,均同时会将相关的属性相依的套件问题一起解决,所以啦!只要将同时间发布的套件下载下来,并且同时予以升级,一般来说,都不会有属性相依的困扰呢
     
    根据这样的考量,让 VBird 思考了一件事情,既然我们可以用手动的方式来将国内 FTP 网站的 RPM 文件捉下来,然后在 Linux 上面进行套件更新,那么是否我们可以通过 scripts 来帮我们分析新发布的文件,并且依据这些数据来进行在线的自动更新呢?!
     
    呵呵!在经过一段时间的改写之后,终于使用 lynx 以及 wget 完成了一个可以自动更新 Linux 系统的 script 了!我是利用中山大学的 FTP 网站来进行 RPM 文件的下载与分析的!而由于这个程序是使用 FTP 网站的数据,并且利用比对的方式来找出自己所需要的套件,所以呢,基本上程序应该是能够符合使用 RPM 安装的 Linux 系统的,目前我在 Red Hat 以及 Mandrake 系统上面测试过这个程序,都没有问题!理论上, Open Linux 以及其他使用 RPM 方式来安装套件的 Linux 系统应该都可以使用这支程序才是!
     
    这支程序主要的工作流程图是这样的:
     

     
    1. 由国内 FTP 网站上面,搜索符合自己系统相关的 RPM 套件;
    2. 以上面的步骤所取得的 RPM 文件信息中,比对与自己目前已经下载过的 RPM 文件,如果没有添加的文件,那么程序就会停止;
    3. 如果 FTP 上面的添加文件,其实是我们主机所需要的 RPM 升级套件之一,那么就将 FTP 网站上面添加的文件下载下来;
    4. 将上面的步骤中所自动产生的 bash scripts 运行他,使我们的 Linux 自动的去下载新的套件到目前所在的目录中;
    5. 可以设置忽略某些套件的下载与安装,利用 ignore 这个参数!
    6. 可以设置是否需要系统自动的帮您升级系统内的 RPM 套件!
    7. 升级成功后, RPM 文件可视情况自动删除!
     
    您可以在底下的网页找到下载这支程序的地方:
    http://vbird.org.cn/download/#zzgetrpm
    整个程序的安装方法也是很简单的!
     
    1. 先查到您的 Linux 的 distribution 的 FTP 网站的网址,建议可以到中山大学的 FTP 网站 ( ftp://ftp.nsysu.edu.tw/Linux/ ) 上面寻找相关的网址!请注意,必须使用 ftp://website 的网址!不要使用 http://website 的网址,因为 lynx 判断会失误喔!以我为例,我的 Red Hat 9 就使用底下的网址啦:

    2. ftp://ftp.nsysu.edu.tw/Linux/RedHat/updates/9/en/os/i386/
      在程序当中我列出了 Red Hat 7.1~9 以及 Mandrake 9.0~9.1 的网址列,您可以直接将属于您的 OS 该行前面的 # 拿掉即可!注意, url 仅能有一个喔!
       
    3. 创建一个目录,注意,该目录最好能够有 500 MB 以上的空间!以我为例,我都会额外规划出一个 partition 进行备份与升级的工作,这个 partition 通常命名为 /mybackup ,而我的升级目录就可以创建成为:

    4. mkdir -p /mybackup/update9
       
    5. 将 zzgetrpm.sh 放置到该目录下,并且更改属性成为可以运行喔!

    6. cp /your/full/path/zzgetrpm.sh /mybackup/update9
      chmod 755 /mybackup/update9/zzgetrpm.sh
       
    7. 将 zzgetrpm.sh 里面的几个变量更改成为您的环境,例如:

    8. basedir=/mybackup/update9
      url=ftp://ftp.nsysu.edu.tw/Linux/RedHat/updates/9/en/os/i386/
       
    9. 选择是否需要自动更新,亦即 autoupdate 那个变量的设置值!缺省的情况下是需要自动更新的呢!

    10.  
    11. 尝试运行看看有没有错误消息:

    12. /mybackup/update9/zzgetrpm.sh
      如果运行完毕并且没有发生任何错误时,那么就可以将这个程序写入 /etc/crontab 当中了!最好是每天运行一次就好了!每次有自动更新之后,程序会主动的寄出一封信给 email 变量后面的邮件主机喔!在 /etc/crontab 里面可以这样写:
      30 5 * * * root /mybackup/update9/zzgetrpm.sh > /dev/null
       
    有了这支程序,呵呵!鸟哥的日字过的可是挺开心的! ^_^

重点回顾

  • 将 Linux 系统上面的套件随时保持在较新的版本,较能够避免被 Cracker 入侵的问题;
  • 套件的升级可以通过手动以 RPM 或 Tarball 来升级,也可以通过 Red Hat 的 up2date 以及 Mandrake 的 urpmi 来升级,亦可以通过 apt 服务器来升级;
  • up2date 为 Red Hat 公司发布的网络升级程序,需要通过登录到 Red Hat up2date 主网站注册后,就可以进行 RPM 套件的升级;
  • urpmi 为 Mandrake 公司发展出来的在线升级程序,可以自行选择媒体来进行套件升级;
  • APT 也是一种通过网络提供的辅助来进行套件升级的方法。

参考资源


课后练习

  • 请依照您的 Linux 系统进行适合的网络套件升级进程(一个步骤一个步骤写下来),并说明为何您需要选择这样的网络升级进程?
修改历史:
2002/08/02:第一次完成日期!
2003/06/29:加入自己写的自动更新 RPM 的 bash scripts 功能!
2003/07/01:重新编写一些内容介绍,此外,由于 Red Hat 6.x 有点老旧了,已经将 up2date 关于 Red Hat 6.x 以前的数据消除了!
2003/08/22:加入 Mandrake 的 urpmi 以及 APT Client 的设置方法
其他链接
环境工程模式篇
鸟园讨论区
鸟哥旧站

今日 人数统计
昨日 人数统计
本月 人数统计
上月 人数统计