第二十三章、软件安装: RPM, SRPM YUM 功能
最近升级日期:2009/09/18

大标题的图示重点回顾
  • 为了避免使用者自行编译的困扰,开发商自行在特定的硬件与操作系统平台上面预先编译好软件, 并将软件以特殊格式封包成文件,提供终端用户直接安装到固定的操作系统上,并提供简单的查询/安装/移除等流程。 此称为软件管理员。常见的软件管理员有 RPM 与 DPKG 两大主流。
  • RPM 的全名是 RedHat Package Manager,原本是由 Red Hat 公司所发展的,流传甚广;
  • RPM 类型的软件中,所含有的软件是经过编译后的 binary program ,所以可以直接安装在使用者端的系统上, 不过,也由於如此,所以 RPM 对於安装者的环境要求相当严格;
  • RPM 除了将软件安装至使用者的系统上之外,还会将该软件的版本、名称、文件与目录配置、系统需求等等均记录於数据库 (/var/lib/rpm) 当中,方便未来的查询与升级、移除;
  • RPM 可针对不同的硬件等级来加以编译,制作出来的文件可於扩展名 (i386, i586, i686, x86_64) 来分辨;
  • RPM 最大的问题为软件之间的相依性问题;
  • SRPM 为 Source RPM ,内含的文件为 Source code 而非为 binary file ,所以安装 SRPM 时还需要经过 compile ,不过,SRPM 最大的优点就是可以让使用者自行修改配置参数 (makefile/configure 的参数) ,以符合使用者自己的 Linux 环境;
  • RPM 软件的属性相依问题,已经可以藉由 yum 或者是 APT 等方式加以克服。 CentOS 使用的就是 yum 机制。
  • yum 服务器提供多个不同的容器放置个别的软件,以提供用户端分别管理软件类别。

大标题的图示本章习题
  • 情境模拟题一:实际安装 php, php-mysql, php-devel, httpd-devel 等软件的方式

    • 目标:利用 rpm 查询软件是否已安装,利用 yum 进行线上查询;
    • 目标:你的 Linux 必须要已经接上 Internet 才行;
    • 需求:最好了解磁碟容量是否够用,以及如何启动服务等。

    这个模拟题的目的是想要安装一套较为完整的 WWW 服务器,并且此服务器可以支持外挂的其他网页服务器模块。 所以需要安装的就会有网页程序语言 php 与数据库软件 MySQL ,以及未来开发用的 php-devel, httpd-devel 等软件。 整个流程会有点像这样:

    1. 检查所需要的软件是否存在?最好直接使用 rpm ,因为可以直接取得 RPM 的数据库内容:
      [root@www ~]# rpm -q httpd httpd-devel php php-devel php-mysql
      httpd-2.2.3-22.el5.centos
      package httpd-devel is not installed  <==没有安装的软件!
      php-5.1.6-23.el5
      package php-devel is not installed    <==没有安装的软件!
      package php-mysql is not installed    <==没有安装的软件!
      
      经过上面的分析,我们知道 httpd-devel, php-devel, php-mysql 等软件并没有安装!那么该如何安装 可以使用 yum 直接线上安装。不过我们必须要先有网络才行!

    2. 确认网络的可行性:
      [root@www ~]# ifconfig eth0
      eth0      Link encap:Ethernet  HWaddr 08:00:27:11:3B:75
                inet addr:192.168.201.201  Bcast:192.168.201.255  Mask:255.255.255.0
      ....(底下省略)....
      # 你可以看到我们的主机是有 IP 存在的!再来看看有没有路由配置存在?
      
      [root@www ~]# route -n
      Kernel IP routing table
      Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
      192.168.201.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
      0.0.0.0         192.168.201.254 0.0.0.0         UG    0      0        0 eth0
      # 确实是有路由器 (Gateway) 存在的!那么该路由器是否配置正确呢?
      
      [root@www ~]# ping -c 2 192.168.201.254
      PING 192.168.201.254 (192.168.201.254) 56(84) bytes of data.
      64 bytes from 192.168.201.254: icmp_seq=1 ttl=64 time=0.325 ms
      64 bytes from 192.168.201.254: icmp_seq=2 ttl=64 time=0.281 ms
      # 路由器有回应!表示可以连接到路由器!那么 TCP/IP 设好了,
      # 但是主机名称解析器统 (DNS) 该如何处理?
      
      [root@www ~]# dig www.google.com
      
      ; <<>> DiG 9.3.4-P1 <<>> www.google.com
      ;; global options:  printcmd
      ....(中间省略)....
      ;; QUESTION SECTION:
      ;www.google.com.                        IN      A
      ....(中间省略)....
      ;; ANSWER SECTION:
      www.google.com.         522933  IN      CNAME   www.l.google.com.
      www.l.google.com.       107     IN      A       72.14.203.103
      ....(中间省略)....
      ;; Query time: 5 msec
      ;; SERVER: 120.114.150.1#53(120.114.150.1)
      ;; WHEN: Fri Sep 18 13:14:45 2009
      ;; MSG SIZE  rcvd: 340
      # 确实有查到 Google 的 IP ,且是由 120.114.150.1 那部 DNS 主机帮忙解析的!
      
    3. 网络配置妥当之后,那我们就能够直接使用 yum 罗!可以这样直接进行安装的:
      [root@www ~]# yum install httpd httpd-devel php php-devel php-mysql
      
      然后接著一步一步进行安装即可。


简答题部分:
  • 如果你曾经修改过 yum 配置档内的容器配置 (/etc/yum.repos.d/*.repo) ,导致下次使用 yum 进行安装时老是发现错误, 此时你该如何是好?
    先确认你的配置档确实是正确的,如果没问题,可以将 yum 的缓存清除,使用『yum clean all』即可。 事实上, yum 的所有缓存、下载软件、下载软件的表头数据,都放置於 /var/cache/yum/ 目录下。
  • 简单说明 RPM 与 SRPM 的异同?
    RPM 文件是由程序打包者 (通常是由 distribution 的开发商) 藉由程序的原始码,在特定的平台上面所编译成功的 binary program 的数据,并将该数据制作成为 RPM 的格式,以方便相同软、硬件平台的使用者之安装使用。 在安装时显的很简单,因为程序打包者的平台与使用者所使用的平台默认为相同。
    至於 SRPM 则是藉由与 RPM 相同的配置档数据,不过将原始码直接包在 SRPM 文件当中,而不经过编译。 因为 SRPM 所内含的数据为原始码,所以安装时必须要再经过编译的行为才能成为 RPM 并提供使用者安装。
  • 假设我想要安装一个软件,例如 pkgname.i386.rpm ,但却老是发生无法安装的问题,请问我可以加入哪些参数来强制安装他?
    可以加入 --nodeps 等参数。例如 rpm -ivh --nodeps pkgname.i386.rpm
  • 承上题,你认为强制安装之后,该软件是否可以正常运行?为什么?
    一般来说,应该是『不能运行』的,因为该软件具有相依属性的问题, 某些时刻该软件的程序可能需要呼叫外部的函式库,但函式库可能未安装,因此当然无法运行成功。
  • 有些人使用 OpenLinux 3.1 Server 安装在自己的 P-166 MMX ,却发现无法安装,在查询了该原版光盘的内容,发现里面的文件名称为 ***.i686.rpm 。请问,无法安装的可能原因为何?
    因为 P-166MMX 为 i586 的硬件平台,而 OpenLinux 为针对 i686 的硬件平台进行最佳化, 因此很可能由於下达的参数无法支持的问题,导致无法安装成功。
  • 请问我使用 rpm -Fvh *.rpm 及 rpm -Uvh *.rpm 来升级时,两者有何不同?
    -Uvh 后面接的软件,如果原本未安装,则直接安装,原本已安装时,则直接升级;
    -Fvh 后面接的软件,如果原本未安装,则不安装,原本已安装时,则直接升级;
  • 假设有一个厂商推出软件时,自行处理了数码签章,你想要安装他们的软件所以需要使用数码签章,假设数码签章的档名为 signe, 那你该如何安装?
    rpm --import signe
  • 承上,假设该软件厂商提供了 yum 的安装网址为: http://their.server.name/path/ ,那你该如何处理 yum 的配置档?
    可以自行取个档名,在此例中我们使用『 vim /etc/yum.repos.d/their.repo 』,扩展名要正确! 内容有点像这样即可:
    [their]
    name=their server name
    baseurl=http://their.server.name/path/
    enable=1
    gpgcheck=0
    然后使用 yum 去安装该软件看看。

大标题的图示参考数据与延伸阅读

 
     
http://linux.vbird.org is designed by VBird during 2001-2011. ksu.edu 

本网页主要以Firefox配合解析度 1024x768 作为设计依据     鸟哥自由软件整合应用研究室