since2012/04/23

     
 
简易 APT/YUM  服务器设定
本文已不再维护,更新文章请参考此处
最近更新日期:2004/06/23
用不惯 Tarball 安装套件却又担心 RPM 的属性相依问题吗?如果有一种套件管理工具可以克服 RPM 属性相依的方法该有多好!有没有这种工具?呵呵!有的,那就是 APT 与 YUM 这两个服务器了。APT (Advanced Package Tool) 是由 debian 这个 distribution 所发展的一个套件管理工具,其目的在克服 RPM 套件的属性相依问题,让用户可以透过 APT 的分析直接安装/升级/删除相关联的套件喔。另一个很好用的就是 YUM (Yellow dog Updater, Modified) 这个咚咚,他是由 Duke University 所发起的计划,目的则与 APT 相似,都是在克服 RPM 的属性相依问题,方便用户进行套件的安装、升级等等工作。由于 APT/YUM 这一类的服务器在『系统升级/管理』上面的功能发挥的很好,所以目前很多的 distributions 都把这两个服务器作为预设的服务喔。在这个章节当中,我们要介绍如何在您的 Linux 服务器上面建置一个 ATP 或 YUM 服务器,并且提供更新的 RPM 套件给 Client 端来使用!


大标题的图示前言:
    如果您曾经自行安装过某些套件的话,那么您或许会觉得:『RPM 是比 Tarball 好安装没有错啦,但是每次为了解决套件之间的属性相依问题,真的是很烦,尤其是 RPM 档案在不同的操作系统版本之间也无法兼容!』是的!没错!为了要解决这个套件之间的属性相依问题,又要保留 RPM 套件的易安装与查询的特性,所以就有一些套件管理方法出来啦!比较有名的就是 APT 与 YUM 这两个咚咚啦。(注:当然,Mandrake 的 urpmi 也是很棒的工具。)
     

    小标题的图示甚么是 APT/YUM 呢?他们如何运作?
     
      众所皆知的, RPM 是目前 Linux 世界里面用的最多的套件安装方式。不过,由于 RPM 所管理的套件在安装的时候必须要考虑到不同套件之间的相依性,这在系统管理员处理系统的升级/更新上面是很讨厌的!为了克服这个问题,所以有 APT/YUM 之类的计划出来。APT ( Advanced Package Tool ) 最早是由 debian 这个 distribution 所发展出来的,而 YUM ( Yellow dog Updater, Modified ) 则是由 Duke University 所发起的计划之一,这两者的目的都是『为了要解决安装 RPM 套件时的属性相依问题!』,而不是额外再建立一个套件安装模式喔。首先,我们谈一谈为甚么 RPM 套件会有属性相依的问题?又,甚么是属性相依的问题啊?
       
      • 属性相依的问题大多来自于函式库的引用,举例来说,我们前面 SSH 与 Telnet 服务器章节中提到的 SSH 服务器需要使用到 SSL 这个套件的加密机制,所以自然就需要 SSL 的函式库,这个时候,如果您没有安装 SSL 的话,那么 SSH 就不会让您安装了!这就是属性相依的问题啦。也就是说,当我们要安装 A 套件,结果 RPM 套件管理员告诉你还需要 B 套件,而安装 B 套件时,却又发现还缺少 C 套件~真是环环相扣啊!讨厌死了~
     
      • 要知道某个套件的最低要求是哪些套件时,可以使用 rpm -qR packagename ,至于某个套件提供哪些档案则可以使用 rpm -q --provides packagename 。这些信息都纪录在 RPM 套件里面。
       
      如果对于 RPM 还有疑问,请参考基础学习篇RPM 与 SRPM 那个章节啰。好了,既然每一个 RPM 套件的标头 (header)里面都会纪录该套件的属性相依关系,那么如果我们可以将该标头的内容纪录下来并且进行分析,不就可以得知每个套件在安装之前需要额外安装哪些基础套件吗?也就是说,我们在服务器上面先以分析工具将所有的 RPM 档案进行分析,然后将该分析纪录下来,只要在进行安装或升级时先查询该纪录的档案,就可以知道所有相关联的套件档案!没错!是这样。他的整个运作流程有点像这样:
       
      服务器端:
      1. 首先,在 APT/YUM 服务器上面放置了所有的 RPM 套件(这包括来自原版光盘与供货商发行的升级套件);
      2. 然后以相关的功能去分析各个 RPM 档案的相依性,这些纪录可以解决所谓的属性相依问题,然后将这些数据记录成档案存放在服务器的某特定目录内;
       
      客户端:
      1. Client 端如果需要安装/升级/删除某个程序时,会先下载服务器上面记载的属性相依档案(利用的协议则是 WWW 或者是 FTP);
      2. 经由比对服务器端传来的纪录数据进行分析,然后取得所有相关的套件,一次全部下载下来进行升级安装。
       
      如此一来则克服了属性相依的问题啰!是的!就这么简单啊!整个图示如下:

图一、APT/YUM 服务器的架构。
      您的 APT/YUM 服务器上面可以拥有多个版本的 Linux distributions 的 RPM 套件,并且需要提供 WWW/FTP 等服务,而 Client 端则是藉由主机的 WWW/FTP 等协议来进行 RPM 档案的取得喔。
     

    小标题的图示是否需要架设 APT/YUM 服务器
     
      APT/YUM 的功能也只是在管理 RPM 套件而已,只是他比单纯的 RPM 指令要好的地方在于他克服了属性相依的问题,所以客户端可以很方便的进行安装/升级与移除的动作。那么是否意味着我就得要架设 APT 或 YUM 服务器呢?
       
      这可不一定吶。如果您只有一部主机,而且上面的网络服务很少,并且也没有提供甚么重要的服务,那么架设 APT/YUM 服务器就没有这么需要了。为甚么呢?因为很少用到 APT 的机制啊,而且直接找网络上面有的 APT/YUM 服务器即可,无须架设啦!要注意的是,架设 APT/YUM 服务器时,您必须要有够用的硬盘空间、够用的带宽以及提供至少 WWW 或者是 FTP 的网络服务呢!这对只有一部主机的您来说,真的不必要费心思去管理的啦!但如果您的网络环境是如下的模样,可能就得要架设一部 APT/YUM 服务器比较好啰!
       
      • 您的网络里面有相当多的同样版本的 Linux distribution 系统;
      • 您的局域网络对外带宽不高,且内部有多部 Linux 主机系统;
      • 您的 Linux distributions 在国内并没有相对应的 APT/YUM 服务器提供服务,而对国外联机的带宽又很低时;
       
      也就是说,如果您拥有多部 Linux 主机,或者是您连接到 APT/YUM 服务器的带宽太低时,就可以考虑架设 APT/YUM 服务器了。以上面图一来说,如果您的连外网络带宽太低,那么架设一部 APT/YUM 服务器后,所有的 Linux 是连接到该部 APT/YUM 服务器进行升级/安装,速度当然比连外要快很多啦!
        
      所以说,如果您是上层的系统管理员(例如学校的网管老师或者县网、区网的网管人员),为了您的整个网域的 Linux 主机来打算,那么架设 APT/YUM 是蛮需要的,因为真的可以节省很多连外的带宽;相反的,如果您是一般用户,拥有的了不起就是两三部 Linux 主机而已,那么似乎没有架设 APT 主机的必要性呢!因为由上面的说明来看,架设 APT 主机所需要的『硬盘空间』可是不能省的,对于一般的用户来说,架设 APT 主机实在是没有什么必要性说
     

    小标题的图示架设之前,您所需要启用的服务
     
      就如同前面的说明,您要架设 APT/YUM 时,请先记得在您的 APT/YUM 主机上面启用 WWW 或者是 FTP 服务了才行!因为 APT/YUM 是利用 WWW/FTP 来进行 RPM 档案在 Server 与 Client 之间的传送的!此外,您的 APT/YUM 主机上面最好将最靠近您主机的 Linux 版本更新套件的网站设定为映像站台 ( mirror ),如此一来,您就可以让系统自动的更新您的 Linux distributions 所需要的更新档案,而不必手动来更新呢!
       
      此外,由于完整的 APT/YUM 服务器包含了原本的 Linux distributions 的原版光盘内容,所以需要的硬盘空间是很高的!至少需要 3~5 GB 以上,最好能够有 10GB 以上的硬盘空间
       
      好了,底下我们就来开始安装与设定 APT/YUM 服务器吧!

大标题的图示APT 服务器:
    底下开始来谈一谈 APT 服务器吧!
     

    小标题的图示APT 服务器利用的机制
     
      就如同前言说明的, APT 主机可以将已经存在的 RPM 档案进行分析,并且将各个套件的相关系记录下来,以便让用户依据这个套件的相关性纪录档案来更新与安装他们的 Linux 系统。那么这些档案放在哪里呢?其实因为这些档案被需要让 Client 端可以下载,而且 APT 并不是额外再启用其他的 port ,而是透过 WWW 或者是 FTP 的方式来让 Client 端下载的,所以 APT 的 RPM 档案当然就需要放在可以让 WWW 或者让 FTP 来存取的目录啰
       
      在很多 Linux distributions 的 WWW 预设主页是放在 /var/www/html 这个目录下的( 例如 Red Hat 9, Fedora Core I/II, Mandrake 等等 ),所以,除非您想要自行架设虚拟主机,或者是利用链接档的方式来让 RPM 档案放置的目录可以让 WWW 读取,否则您都应该要将 APT 管理的 RPM 档案放置在 /var/www/html 底下。假设我有两个 Linux 的版本要这部 APT 主机管理时,一版是 Mandrake 9.1 一版是 Red Hat 9 ,那么我可以这样编排我的 RPM 档案放置的目录:
       
      表一、APT 主机相关 RPM 档案放置的目录示意表
      /var/www/html/apt/redhat9
                   |--RPMS.os
                   |--RPMS.updates
                   |--SRPMS.os (非必备目录)
                   |--SRPMS.updates (非必备目录)
                   `--base
                     |--pkglist.os.bz2
                     |--pkglist.updates.bz2
                     |--release
                     |--release.os
                     `--release.updates
      /var/www/html/apt/mdk9.1
                  |--RPMS.os
                  |--RPMS.updates
                  |--SRPMS.os (非必备目录)
                  |--SRPMS.updates (非必备目录)
                  `--base
                    |--pkglist.os.bz2
                    |--pkglist.updates.bz2
                    |--release
                    |--release.os
                    `--release.updates
       
      如上所示,我独立出一个名为 apt 的目录来管理我的 APT 档案,另外,因为有两个版本,所以我将 apt 又分为两个目录,因为两个目录的格式一样,所以我以 Red Hat 9 那个 /var/www/html/apt/redhat9 目录来介绍。里面至少会有三个目录才对,分别是 RPMS.os, RPMS.updates, base 这三个目录,其中:
       
      • RPMS.os 的内容为 Red Hat 9 的原本光盘中的 RPM 档案(i386);
      • RPMS.updates 的内容为 Red Hat 公司针对 Red Hat 9 这一版所释出的修补套件;
      • base 这个目录里面的数据则是由 APT 服务器所自动产生的,前面我们提到的 APT 会去分析 RPM 档案而将档案信息记录下来,记录下来的咚咚就是放置在这个目录下的啦!
       
      您还会看到其实还有 SRPMS.os 以及 SRPMS.updates 等目录,呵呵!那个就是 Source RPM (SRPM) 档案放置的目录了。因为我们直接可以透过 Binary 来升级,所以我预设不放 SRPM 在我的 APT 服务器里面啰!
       
      OK!所以我们需要怎么来架设我们的 APT 以及利用 APT 来升级呢?
       
      1. 先将所有来自 Linux 原版光盘的 RPM 档案复制到 /full/path/RPMS.os 档案中;
      2. 再将来自原 Linux 版本公司释出的 RPM 修补套件由 Internet 下载到 /full/path/RPMS.updates 当中;
      3. 利用 APT 的功能进行 /full/path/base 这个目录里面信息的更新;
      4. 到 Client 端上面,以 APT 的功能更新 Client 自己的套件信息,使与 APT 主机的 /full/path/base 这个目录里面的套件记录信息同步化;
      5. 到 Client 端上面,可以利用 APT 的功能来更新或者是安装套件了!当然,所使用来下载 RPM 档案的协议当然是 WWW 或是 FTP 啰!而且, Client 端分析的是自己的 RPM 信息喔,所以每次进行更新之前,应该将 Client 端的 RPM 信息与 APT Server 端来同步化才行!否则 Server 新增的档案在 Client 端是无法取得信息的喔!
       
      所以啰,其实在 APT 主机设定上面最重要的步骤应该是在于主机硬盘的规划、档案的复制与 updates 档案的随时自动更新(可以利用映像站台的功能),以及 /full/path/base 目录下的信息更新等等步骤!只要这边没有问题,其他的流程就简单咯!
     

    小标题的图示安装 APT 软件
       

    小标题的图示APT 服务器的套件结构
     
      APT 服务器里面有很多的档案,说明如下:
     
    • 配置文件案:

    •  
      • /etc/apt/apt.conf:这个并不是 APT Server 的记录文件,而是当我们在指令列模式下达 APT 的指令时 (如底下执行档部分会介绍的 apt-get ),该指令的环境参数。一般来说,使用默认值就可以了!不需要更动他。这个档案的内容当中:

      •  
        批注符号为两个斜线( slash ):『//』
        主要至少分为三大群组,分别为 APT(环境参数), Acquire(下载相关参数) 与 RPM(RPM相关参数),而每个群组之内又分别具有多个参数,每个参数的设定值最后以分号『;』隔开,例如下面的范例:
        [root@test root]# vi /etc/apt/apt.conf
        APT    //第一个大群组
        {
          // Options for apt-get
          Get   //第一个大群组里面的第一个参数
          {
            Download-Only "false";  //第一个参数的项目与该项目之设定值
            Show-Upgraded "true";   //第二个参数的项目与该项目之设定值
          };
        };
        除了上面的格式外,也可以利用底下的格式来进行设定:
        主群组::参数::项目 "设定值";
        例如上面的范例中,可以将第一个设定值写成:
        APT::Get::Download-Only "false";
         
        另外,如果您想要使用 Proxy 来加快您的网络传输时,可以修改里面的内容,因为 Proxy 是在 Acquire 里面的 Http 参数,所以您可以使用如下的设定值(注:我以成大的 proxy.ncku.edu.tw:3128 为例):
         
        1. 利用原本的设定技巧:
        [root@test root]# vi /etc/apt/apt.conf
        // 找到底下的参数
        Acquire
        {
          // 底下加入这些数据:
          Http
          {
            Proxy "http://proxy.ncku.edu.tw:3128";
          };
          Retries "0";
        };
         
        2. 或者您也可以改用底下的参数设定:
        [root@test root]# vi /etc/apt/apt.conf
        //在最后一行加入,注意,不要被括号 {} 括住了!
        Acquire::Http::Proxy "http://proxy.ncku.edu.tw:3128";
         
        上面两种方法都是行的通的啦!
         
      • /etc/apt/sources.list:这个档案就真的重要了!此档案的作用在于『选择适合您的 APT 主机』啰!所以这个档案与 Client 的关系比较大。内容有点像这样:

      •  
        [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
        # 而至于 rpm-src 则是放置 SRPM 档案的服务器与目录喔!
         
        如果您是由鸟哥面推荐的 RPM 安装您的 APT 时,这里可以保持默认的路径,不过,如果您知道台湾地区有更快速的映射站台,这里就可以修改成您所找到的 APT 服务器啰。
         
    • 执行档案:

    •  
      • apt-get:这个是最主要的执行档了!大部分的时候都是给 Client 端用的,语法如下:

      •  
        [root@test root]# apt-get <options> <更新项目> <套件名称>
        参数说明:
        options:关于参数有底下几个较常见的:
          -q 不要显示 apt-get 运作时的输出讯息,安静一点比较好吗?! ^_^
          -y 如果 apt-get 在工作过程中需要使用者响应,这个参数可以直接回答 yes 
        更新项目:更新的动作有底下几个:
          update:这个动作很重要,就是我们上面有提到的,Client 端要更新与 APT Server
              套件相关性档案的清单对应表,就得要使用这个项目了!基本上,
              每次进行 apt-get 来下载 APT Server 的档案前,最好都先 apt-get update 
          install:安装某个套件,后面接套件名称
          dist-upgrade:自动升级我们系统上面已经安装的所有 RPM 套件喔
          clean:将下载自 APT 主机的的 RPM 档案删除哩!
          remove:移除已经安装在我们系统的某个套件!
        范例:
        [root@test root]# apt-get update       # 将 RPM 档案相关性清单更新!