北京快三开奖

  • <tr id="U9YkSO"><strong id="U9YkSO"></strong><small id="U9YkSO"></small><button id="U9YkSO"></button><li id="U9YkSO"><noscript id="U9YkSO"><big id="U9YkSO"></big><dt id="U9YkSO"></dt></noscript></li></tr><ol id="U9YkSO"><option id="U9YkSO"><table id="U9YkSO"><blockquote id="U9YkSO"><tbody id="U9YkSO"></tbody></blockquote></table></option></ol><u id="U9YkSO"></u><kbd id="U9YkSO"><kbd id="U9YkSO"></kbd></kbd>

    <code id="U9YkSO"><strong id="U9YkSO"></strong></code>

    <fieldset id="U9YkSO"></fieldset>
          <span id="U9YkSO"></span>

              <ins id="U9YkSO"></ins>
              <acronym id="U9YkSO"><em id="U9YkSO"></em><td id="U9YkSO"><div id="U9YkSO"></div></td></acronym><address id="U9YkSO"><big id="U9YkSO"><big id="U9YkSO"></big><legend id="U9YkSO"></legend></big></address>

              <i id="U9YkSO"><div id="U9YkSO"><ins id="U9YkSO"></ins></div></i>
              <i id="U9YkSO"></i>
            1. <dl id="U9YkSO"></dl>
              1. <blockquote id="U9YkSO"><q id="U9YkSO"><noscript id="U9YkSO"></noscript><dt id="U9YkSO"></dt></q></blockquote><noframes id="U9YkSO"><i id="U9YkSO"></i>

                鸟哥的 Linux 私房菜
                Linux 根底篇 | Linux 效劳器篇 | Linux 企业使用篇 | 平安办理
                     
                 
                第二十三章、软件装置: RPM, SRPM YUM 功用
                近来更新日期:2009/09/18
                固然运用原始码停止软件编译可以具有客制化的设定,但关于 Linux distribution 的公布商来说,则有软件办理不易的题目, 终究不是每团体都市停止原始码编译的。假如可以将软件事后在相反的硬体与作业零碎下面编译好才公布的话, 不就可以让相反的 distribution 具有完全分歧的软件版本吗?假如再加上浅易的装置/移除/办理等机制的话, 关于软件办理就会浅易的多。有这种工具吗?有的,那便是 RPM 与 YUM 这两个好用的咚咚。 既然这么好用,我们固然不克不及错过学习时机啰!赶忙来参详参详!


                大标题的图示软件办理员简介

                在前一章我们提到以原始码的方法来装置软件,也便是应用厂商释出的 Tarball 来停止软件的装置。不外,你应该很容易发明,那便是每次装置软件都需求探测作业零碎与情况、设定编译参数、实践的编译、 最初还要根据团体爱好的方法来装置软件到定位。这进程是真的很费事的,并且关于不熟整个零碎的冤家来说,还真是累人啊!

                那有没有想过,假如我的 Linux 零碎与厂商的零碎如出一辙,那么在厂商的零碎下面编译出来的实行档, 天然也就可以在我的零碎下面跑啰!也便是说,厂商先在他们的零碎下面编译好了我们运用者所需求的软件, 然后将这个编译好的可实行的软件间接释出给运用者来装置,云云一来,由于我们原本就运用厂商的 Linux distribution ,以是固然零碎 (硬体与作业零碎) 是一样的,那么运用厂商提供的编译过的可实行档就没有题目啦! 说的比拟文言一些,那便是应用相似 Windows 的装置方法,由顺序开辟者间接在已知的零碎下面编译好,再将该顺序间接给运用者来装置,云云罢了。

                那么假如在装置的时分还可以加上一些与这些顺序相干的资讯,将他树立成为材料库,那不就可以停止装置、反装置、 晋级与验证等等的相干功用啰 (相似 Windows 底下的‘新增移除顺序’)?的确云云,在 Linux 下面至多就有两种罕见的这方面的软件办理员,辨别是 RPM 与 Debian 的 dpkg 。我们的 CentOS 次要因此 RPM 为主,但也不克不及不晓得 dpkg 啦!以是底下就来大抵引见一下这两个玩意儿。


                小标题的图示Linux 界的两大主流: RPM 与 DPKG

                由于自在软件的发达开展,加上大型 Unix-Like 主机的弱小效能,让许多软件开辟者将他们的软件运用 Tarball 来释出。 厥后 Linux 开展起来后,由一些企业或社群将这些软件搜集起来制造成为 distributions 以公布这好用的 Linux 作业零碎。但厥后发明到,这些 distribution 的软件办理真实伤头脑, 假如软件有破绽时,又该怎样修补呢?运用 tarball 的方法来办理吗?又经常不知道究竟我们装置过了哪些顺序? 因而,一些社群与企业就开端考虑 Linux 的软件办理方法。

                好像方才谈过的方法,Linux 开辟商先在牢固的硬体平台与作业零碎平台下面将需求装置或晋级的软件编译好, 然后将这个软件的一切相干文件打包成为一个特别款式的文件,在这个软件文件内还包括了事后探测零碎与相依软件的剧本, 并提供纪录该软件提供的一切文件资讯等。终极将这个软件文件释出。用户端获得这个文件后,只需透过特定的指令来装置, 那么该软件文件就会按照外部的剧本来探测相依的先驱软件能否存在,若装置的情况契合需求,那就会开端装置, 装置完成后还会将该软件的资讯写入软件办理机制中,以告竣将来可以停止晋级、移除等举措呢。

                现在在 Linux 界软件装置方法最罕见的有两种,辨别是:

                • dpkg
                  这个机制最早是由 Debian Linux 社群所开辟出来的,透过 dpkg 的机制, Debian 提供的软件就可以复杂的装置起来,同时还能提供装置后的软件资讯,真实十分不错。 只需是衍生于 Debian 的其他 Linux distributions 大多运用 dpkg 这个机制来办理软件的, 包罗 B2D, Ubuntu 等等。

                • RPM
                  这个机制最早是由 Red Hat 这家公司开辟出来的,厥后真实很好用,因而许多 distributions 就运用这个机制来作为软件装置的办理方法。包罗 Fedora, CentOS, SuSE 等等着名的开辟商都是用这咚咚。

                如前所述,不管 dpkg/rpm 这些机制或多或少都市有软件属性相依的题目,那该怎样处理呢? 实在后面不是谈到过每个软件文件都有提供相依属性的反省吗?那么假如我们将相依属性的材料做成列表, 比及实践软件装置时,若发作有相依属性的软件情况时,比方装置 A 需求先装置 B 与 C ,而装置 B 则需求装置 D 与 E 时,那么当你要装置 A ,透过相依属性列表,办理机制主动去获得 B, C, D, E 来同时装置, 不就处理了属性相依的题目吗?

                没错!您真智慧!现在新的 Linux 开辟商都有提供如许的‘线上晋级’机制,透过这个机制, 原版光碟就只要第一次装置时需求用到罢了,其他时分只需有网络,你就可以获得本来开辟商所提供的任何软件了呢! 在 dpkg 办理机制上就开辟出 APT 的线上晋级机制,RPM 则依开辟商的差别,有 Red Hat 零碎的 yum , SuSE 零碎的 Yast Online Update (YOU), Mandriva 的 urpmi 软件等。

                distribution 代表软件办理机制运用指令线上晋级机制(指令)
                Red Hat/FedoraRPMrpm, rpmbuildYUM (yum)
                Debian/UbuntuDPKGdpkgAPT (apt-get)

                我们这里运用的是 CentOS 零碎嘛!以是说:运用的软件办理机制为 RPM 机制,而用来作为线上晋级的方法则为 yum !底下就让我们来谈谈 RPM 与 YUM 的相干阐明吧!


                小标题的图示什么是 RPM 与 SRPM

                RPM 全名是‘ RedHat Package Manager ’简称则为 RPM 啦!望文生义,现在这个软件办理的机制是由 Red Hat 这家公司开展出来的。 RPM 因此一种材料库记载的方法来将你所需求的软件装置到你的 Linux 零碎的一套办理机制。

                他最大的特点便是将你要装置的软件先编译过, 而且打包成为 RPM 机制的包装文件,透过包装好的软件外头预设的材料库记载, 记载这个软件要装置的时分必需具有的相依属性软件,当装置在你的 Linux 主机时, RPM 会先按照软件外头的材料盘问 Linux 主机的相依属性软件能否满意, 若满意则予以装置,若不满意则不予装置。那么装置的时分就将该软件的资讯整个写入 RPM 的材料库中,以便将来的盘问、验证与反装置!如许一来的长处是:

                1. 由于曾经编译完成而且打包终了,以是软件传输与装置上很方便 (不需求再重新编译);
                2. 由于软件的资讯都曾经记载在 Linux 主机的材料库上,很方便盘问、晋级与反装置

                但是这也形成些许的困扰。由于 RPM 文件是曾经包装好的材料,也便是说, 外面的材料曾经都‘编译完成’了!以是,该软件文件简直只能装置在本来预设的硬体与作业零碎版本中。 也便是说,你的主机零碎情况必需要与现在树立这个软件文件的主机情况相反才行! 举例来说,rp-pppoe 这个 ADSL 拨接软件,他必需要在 ppp 这个软件存在的情况下才干停止装置!假如你的主机并没有 ppp 这个软件,那么很负疚,除非你先装置 ppp 不然 rp-pppoe 便是不让你装置的 (固然你可以强迫装置,但是通常都市有点题目发作便是了!)。

                以是,通常差别的 distribution 所释出的 RPM 文件,并不克不及用在其他的 distributions 上。举例来说,Red Hat 释出的 RPM 文件,通常无法间接在 SuSE 下面停止装置的。更有甚者,相反 distribution 的差别版本之间也无法互通,比方 CentOS 4.x 的 RPM 文件就无法间接套用在 CentOS 5.x !因而,如许可以发明这些软件办理机制的题目是:

                1. 软件文件装置的情况必需与打包时的情况需求分歧或相称;
                2. 需求满意软件的相依属性需求;
                3. 反装置时需求特殊警惕,最底层的软件不行先移除,不然能够形成整个零碎的题目!

                那怎样办?假如我真的想要装置其他 distributions 提供的好用的 RPM 软件文件时? 呵呵!还好,另有 SRPM 这个工具!SRPM 是什么呢?望文生义,他是 Source RPM 的意思,也便是这个 RPM 文件外面含有原始码哩!特殊留意的是,这个 SRPM 所提供的软件内容‘并没有颠末编译’, 他提供的是原始码喔!

                通常 SRPM 的副档名因此 淫乱.src.rpm 这种款式来定名的。不外,既然 SRPM 提供的是原始码,那么为什么我们不运用 Tarball 间接来装置就好了?这是由于 SRPM 固然内容是原始码, 但是他依然含有该软件所需求的相依性软件阐明、以及一切 RPM 文件所提供的材料。同时,他与 RPM 差别的是,他也提供了参数设定档 (便是 configure 与 makefile)。以是,假如我们下载的是 SRPM ,那么要装置该软件时,你就必需要:

                • 先将该软件以 RPM 办理的方法编译,此时 SRPM 会被编译成为 RPM 文件;
                • 然后将编译完成的 RPM 文件装置到 Linux 零碎当中

                怪了,怎样 SRPM 这么费事呐!还要重新编译一次,那么我们间接运用 RPM 来装置不就好了?通常一个软件在释出的时分,都市同时释出该软件的 RPM 与 SRPM 。我们如今晓得 RPM 文件必需要在相反的 Linux 情况下才干够装置,而 SRPM 既然是原始码的款式,天然我们就可以透过修正 SRPM 内的参数设定档,然后重新编译发生能合适我们 Linux 情况的 RPM 文件,云云一来,不就可以将该软件装置到我们的零碎当中,而不用与原作者打包的 Linux 情况相反了?这便是 SRPM 的用途了!

                文件款式档名款式间接装置与否内含顺序范例能否修正参数并编译
                RPMxxx.rpm已编译不行
                SRPMxxx.src.rpm不行未编译之原始码
                Tips:
                为何说 CentOS 是‘社群维护的企业版’呢? Red Hat 公司的 RHEL 释出后,连带会将 SRPM 释出。 社群的冤家就将这些 SRPM 搜集起来偏重新编译成为所需求的软件,再反复释出成为 CentOS,以是才干号称与 Red Hat 的 RHEL 企业版同步啊!真要感激 SRPM 哩!假如你想要了解 CentOS 是怎样编译一支顺序的, 也可以透过学习 SRPM 内含的编译参数,来学习的啊!
                鸟哥的图示

                小标题的图示什么是 i386, i586, i686, noarch, x86_64

                从下面的阐明,如今我们晓得 RPM 与 SRPM 的款式辨别为:

                xxxxxxxxx.rpm   <==RPM 的款式,曾经颠末编译且包装完成的 rpm 文件;
                xxxxx.src.rpm   <==SRPM的款式,包括未编译的原始码资讯。
                

                那么我们怎样晓得这个软件的版本、实用的平台、编译释出的次数呢?只需透过档名就可以晓得了!比方 rp-pppoe-3.1-5.i386.rpm 这的文件的意义为:

                rp-pppoe -        3.1    -     5        .i386        .rpm
                软件称号   软件的版本资讯 释出的次数 合适的硬体平台 副档名
                

                除了前面合适的硬体平台与副档名外,次要因此‘-’来离隔各个局部,如许子可以很清晰的发明该软件的称号、 版本资讯、打包次数与操纵的硬体平台!好了,来谈一谈每个差别的中央吧:

                • 软件称号
                  固然便是每一个软件的称号了!下面的典范便是 rp-pppoe 。

                • 版本资讯
                  每一次更新版本就需求有一个版本的资讯,不然怎样晓得这一版是新是旧?这里通常又分为主版本跟次版本。以下面为例,主版本为 3 ,在主版本的架构下变动局部原始码内容,而释出一个新的版本,便是次版本啦!以下面为例,便是 1 啰!

                • 释出书本次数
                  通常便是编译的次数啦!那么为何需求反复的编译呢?这是由于统一版的软件中,能够由于有某些 bug 或许是平安上的顾忌,以是必需要停止小幅度的 patch 或重设一些编译参数。 设定完成之后重新编译并打包成 RPM 文件!因而就有差别的打包数呈现了!

                • 操纵硬体平台
                  这是个很好玩的中央,由于 RPM 可以实用在差别的操纵平台上,但是差别的平台设定的参数照旧有所差别性! 而且,我们可以针比照较高阶的 CPU 来停止最佳化参数的设定,如许才干够运用高阶 CPU 所带来的硬体减速功用。 以是就有所谓的 i386, i586, i686, x86_64 与 noarch 等的文件称号呈现了!

                  平台称号合适平台阐明
                  i386 简直实用于一切的 x86 平台,不管是旧的 pentum 或许是新的 Intel Core 2 与 K8 系列的 CPU 等等,都可以正常的任务!谁人 i 指的是 Intel 相容的 CPU 的意思,至于 386 不必说,便是 CPU 的品级啦!
                  i586 便是针对 586 品级的电脑停止最佳化编译。那是哪些 CPU 呢?包罗 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU (socket 7 插脚) 等等的 CPU 都算是这个品级;
                  i686 在 pentun II 当前的 Intel 系列 CPU ,及 K7 当前品级的 CPU 都属于这个 686 品级! 由于现在市道市情上简直仅剩 P-II 当前品级的硬体平台,因而许多 distributions 都间接释出这种品级的 RPM 文件。
                  x86_64 针对 64 位元的 CPU 停止最佳化编译设定,包罗 Intel 的 Core 2 以上品级 CPU ,以及 AMD 的 Athlon64 当前品级的 CPU ,都属于这一范例的硬体平台。
                  noarch 便是没有任何硬体品级上的限定。普通来说,这品种型的 RPM 文件,外面应该没有 binary program 存在, 较常呈现的便是属于 shell script 方面的软件。

                  沾恩于现在 x86 零碎的援助方面,新的 CPU 都可以实行旧型 CPU 所援助的软件,也便是说硬体方面都可以向下相容的, 因而最高等级的 i386 软件可以装置在一切的 x86 硬体平台下面,不管是 32 位元照旧 64 位元。但是反过去说就不可了。举例来说,现在硬体大多是 64 位元的品级,因而你可以在该硬体下面装置 x86_64 或 i386 品级的 RPM 软件。但在你的旧型主机,比方 P-III/P-4 32 位元呆板下面,就不克不及够装置 x86_64 的软件!

                依据下面的阐明,实在我们只需选择 i386 版原本装置在你的 x86 硬体下面就一定没题目。但是假如夸大效能的话, 照旧选择搭配你的硬体的 RPM 文件吧!终究该软件才有针对你的 CPU 硬体平台停止过参数最佳化的编译嘛!


                小标题的图示RPM 的长处

                由于 RPM 是透过事后编译并打包成为 RPM 文件款式后,再加以装置的一种方法,而且还可以停止材料库的纪录。 以是 RPM 有以下的长处:

                • RPM 内含曾经编译过的顺序与设定档等材料,可以让运用者免去重新编译的困扰;
                • RPM 在被装置之前,会先反省零碎的硬碟容量、作业零碎版本等,可防止文件被错误装置;
                • RPM 文件自身提供软件版本资讯、相依属性软件称号、软件用处阐明、软件所含文件等资讯,便于理解软件;
                • RPM 办理的方法运用材料库记载 RPM 文件的相干参数,便于晋级、移除、盘问与验证。

                为什么 RPM 在运用上很方便呢?我们后面提过, RPM 这个软件办理员所处置的软件,是由软件提供者在特定的 Linux 作业平台下面将该软件编译完成而且打包好。那运用者只需拿到这个打包好的软件, 然后将外头的文件安排到应该要摆放的目次,不就完成装置啰?对啦!便是如许!

                但是有没有想过,我们在前一章外面提过的,有些软件是有相干性的,比方要装置网络卡驱动顺序,就得要有 kernel source 与 gcc 及 make 等软件。那么我们的 RPM 软件能否肯定可以装置完成呢?假如该软件装置之后,却找不到他相干的先驱软件, 那不是挺费事的吗?由于装置好的软件也无法运用啊!

                为理解决这种具有相干性的软件之间的题目 (便是所谓的软件相依属性),RPM 就在提供打包的软件时,同时参加一些讯息登录的功用,这些讯息包罗软件的版本、 打包软件者、相依属性的其他软件、本软件的功用阐明、本软件的一切文件记载等等,然后在 Linux 零碎下面亦树立一个 RPM 软件材料库,云云一来,当你要装置某个以 RPM 型态提供的软件时,在装置的进程中, RPM 会去查验一下材料库外面能否曾经存在相干的软件了, 假如材料库表现不存在,那么这个 RPM 文件‘预设’就不克不及装置。呵呵!没有错,这个便是 RPM 范例的文件最为人所诟病的‘软件的属性相依’题目啦!


                小标题的图示RPM 属性相依的克制方法: YUM 线上晋级

                为了反复应用既有的软件功用,因而许多软件都市以函式库的方法释出局部功用,以方便其他软件的呼唤使用, 比方 PAM 模组的验证功用。别的,为了节流运用者的材料量,现在的 distributions 在释出软件时, 都市将软件的内容分为普通运用与开辟运用 (development) 两大类。以是你才会经常看到有相似 pam-x.x.rpm 与 pam-devel-x.x.rpm 之类的档名啊!而预设状况下,大局部的 software-devel-x.x.rpm 都不会装置,由于终端用户大局部不会去开辟软件嘛!

                由于有上述的景象,因而 RPM 软件文件就会有所谓的属性相依的题目发生 (实在一切的软件办理简直都有这方面的状况存在)。 那有没有方法处理啊?后面不是谈到 RPM 软件文件外部会记载相依属性的材料吗?那想一想,要是我将这些相依属性的软件先列表, 在有要装置软件需求的时分,先到这个列表去找,同时与零碎内已装置的软件相比拟,没装置到的相依软件就一口吻同时装置起来, 那不就处理了相依属性的题目了吗?有没有这种机制啊?有啊!那便是 YUM 机制的由来!

                CentOS 先将释出的软件安排到 YUM 效劳器内,然后剖析这些软件的相依属性题目,将软件内的记载资讯写上去 (header)。 然后再将这些资讯剖析跋文录成软件相干性的清单列表。这些列表材料与软件地点的地位可以称谓为容器 (repository)。 当用户端有软件装置的需求时,用户端主时机自动的向网络下面的 yum 效劳器的容器网址下载清单列表, 然后透过清单列表的材料与本机 RPM 材料库已存在的软件材料相比拟,就可以一口吻装置一切需求的具有相依属性的软件了。 整个流程可以复杂的如下图阐明:

                YUM 运用的流程表示图
                图 1.5.1、YUM 运用的流程表示图

                当用户端有晋级、装置的需求时, yum 会向容器要求清单的更新,比及清单更新到本机的 /var/cache/yum 外面后, 等一下更新时就会用这个本机清单与本机的 RPM 材料库停止比拟,如许就晓得该下载什么软件。接上去 yum 会跑到容器效劳器 (yum server) 下载所需求的软件,然后再透过 RPM 的机制开端装置软件啦!这便是整个流程! 谈到最初,照旧需求动到 RPM 的啦!以是下个大节就让我们来谈谈 RPM 这咚咚吧!

                Tips:
                为什么要做出‘容器’呢?由于 yum 效劳器提供的 RPM 文件内容能够有所差别,举例来说,原厂释出的材料有 (1)原版材料; (2)更新材料 (update); (3)特别材料 (比方第三方协力软件,或某些特别功用的软件)。 这些软件文件根本上不会安排到一同,那怎样辨别这些软件功用呢?就用‘容器’的观点来处置的啦! 差别的‘容器’网址,可以安排差别的软件功用之意!
                鸟哥的图示

                大标题的图示RPM 软件办理顺序: rpm

                RPM 的运用实在不难,只需运用 rpm 这个指令即可!鸟哥最喜好的便是 rpm 指令的盘问功用了,可以让我很随便的就晓得某个零碎有没有装置鸟哥要的软件呢!别的, 我们最好照旧得要晓得一下,究竟 RPM 范例的文件他们是将软件的相干文件安排在那边呢?另有,我们说的谁人 RPM 的材料库又是安排在那边呢?


                小标题的图示RPM 预设装置的途径

                普通来说,RPM 范例的文件在装置的时分,会先去读取文件内纪录的设定参数内容,然后将该材料用来比对 Linux 零碎的情况,以找出能否有属性相依的软件尚未装置的题目。比方 Openssh 这个连线软件需求透过 Openssl 这个加密软件的帮助,以是得先装置 openssl 才干装 openssh 的意思。那你的情况假如没有 openssl , 你就无法装置 openssh 的意思啦。

                若情况反省及格了,那么 RPM 文件就开端被装置到你的 Linux 零碎上。装置终了后,该软件相干的资讯就会被写入 /var/lib/rpm/ 目次下的材料库文件中了。 下面这个目次内的材料很紧张喔!由于将来假如我们有任何软件晋级的需求,版本之间的比拟便是来自于这个材料库, 而假如你想要盘问零碎曾经装置的软件,也是从这里盘问的!同时,现在的 RPM 也提供数位签章资讯, 这些数位签章也是在这个目次内记载的呢!以是说,这个目次得要留意不要被删除了啊!

                那么软件内的文件究竟是安排到那边去啊?固然与文件零碎有关对吧!我们在第六章的目次设置装备摆设谈过每个目次的意义, 这里再次的夸大啰:

                /etc 一些设定档安排的目次,比方 /etc/crontab
                /usr/bin 一些可实行文件
                /usr/lib 一些顺序运用的静态函式库
                /usr/share/doc 一些根本的软件运用手册与阐明档
                /usr/share/man 一些 man page 文件

                好了,底下我们就来针对每个 RPM 的相干指令来停止阐明啰!


                小标题的图示RPM 装置 (install)

                由于装置软件是 root 的任务,因而你得要是 root 的身份才干够操纵 rpm 这指令的。 用 rpm 来装置很复杂啦!假定我要装置一个档名为 rp-pppoe-3.5-32.1.i386.rpm 的文件,那么我可以如许:

                [root@www ~]# rpm -i rp-pppoe-3.5-32.1.i386.rpm
                

                不外,如许的参数实在无法表现装置的进度,以是,通常我们会如许下达装置指令:

                [root@www ~]# rpm -ivh package_name
                选项与参数:
                -i :install 的意思
                -v :观察更细部的装置资讯画面
                -h :以装置资讯列表现装置进度
                
                典范一:装置 rp-pppoe-3.5-32.1.i386.rpm
                [root@www ~]# rpm -ivh rp-pppoe-3.5-32.1.i386.rpm
                Preparing...     ####################################### [100%]
                   1:rp-pppoe    ####################################### [100%] 
                
                典范二、一口吻装置两个以上的软件时:
                [root@www ~]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm
                # 前面间接接上很多的软件文件!
                
                典范三、间接由网络下面的某个文件装置,以网址来装置:
                [root@www ~]# rpm -ivh http://website.name/path/pkgname.rpm
                

                别的,假如我们在装置的进程当中发明题目,或许曾经晓得会发作的题目, 而照旧‘执意’要装置这个软件时,可以运用如下的参数‘强迫’装置上去:

                rpm 装置时常用的选项与参数阐明
                可下达的选项代表意义
                --nodeps 运用机遇:当发作软件属性相依题目而无法装置,但你执意装置时
                风险性: 软件会有相依性的缘由是由于相互会运用到对方的机制或功用,假如强迫装置而不思索软件的属性相依, 则能够会形成该软件的无法正常运用!
                --replacefiles 运用机遇: 假如在装置的进程当中呈现了‘某个文件曾经被装置在你的零碎下面’的资讯,又大概呈现版本分歧的讯息 (confilcting files) 时,可以运用这个参数来间接掩盖文件。
                风险性: 掩盖的举措是无法恢复的!以是,你必需要很清晰的晓得被掩盖的文件是真的可以被掩盖喔!不然会欲哭无泪!
                --replacepkgs 运用机遇: 重新装置某个曾经装置过的软件!假如你要装置一堆 RPM 软件文件时,可以运用 rpm -ivh *.rpm ,但若某些软件曾经装置过了, 此时零碎会呈现‘某软件已装置’的资讯,招致无法持续装置。此时可运用这个选项来反复装置喔!
                --force 运用机遇:这个参数实在便是 --replacefiles 与 --replacepkgs 的综合体!
                --test 运用机遇: 想要测试一下该软件能否可以被装置到运用者的 Linux 情况当中,可找出能否有属性相依的题目。典范为:
                rpm -ivh pkgname.i386.rpm --test
                --justdb 运用机遇: 由于 RPM 材料库破坏或许是某些缘故发生错误时,可运用这个选项来更新软件在材料库内的相干资讯。
                --nosignature 运用机遇: 想要略过数位签章的反省时,可以运用这个选项。
                --prefix 新途径 运用机遇: 要将软件装置到其他非正轨目次时。举例来说,你想要将某软件装置到 /usr/local 而非正轨的 /bin, /etc 等目次, 就可以运用‘ --prefix /usr/local ’来处置了。
                --noscripts 运用机遇:不想让该软件在装置进程中自行实行某些零碎指令。
                阐明: RPM 的长处除了可以将文件安排到定位之外,还可以主动实行一些前置作业的指令,比方材料库的初始化。 假如你不想要让 RPM 帮你主动实行这一范例的指令,就加上他吧!

                普通来说,rpm 的装置选项与参数约莫便是这些了。通常鸟哥发起间接运用 -ivh 就好了, 假如装置的进程中发明题目,一个一个去将题目找出来,只管即便不要运用‘ 暴力装置法 ’,便是透过 --force 去强迫装置! 由于能够会发作许多不行预期的题目呢!除非你很清晰的晓得运用下面的参数后,装置的后果是你预期的!

                例题:
                在没有网络的条件下,你想要装置一个名为 pam-devel 的软件,你手边只要原版光碟,该如之奈何?
                答:
                你可以透过挂载原版光碟来停止材料的盘问与装置。请将原版光碟放入光碟机,底下我们实验将光碟挂载到 /media 当中, 并据以处置软件的下载啰:
                • 挂载光碟,运用: mount /dev/cdrom /media
                • 找出文件的实践途径:find /media -name 'pam-devel*'
                • 测试此软件能否具有相依性: rpm -ivh pam-devel... --test
                • 间接装置: rpm -ivh pam-devel...
                • 卸载光碟: umount /dev/cdrom
                在鸟哥的零碎中,恰好这个软件并没有属性相依的题目,因而最初一个步调可以顺遂的停止下去呢!


                小标题的图示RPM 晋级与更新 (upgrade/freshen)

                运用 RPM 来晋级真是太复杂了!就以 -Uvh 或 -Fvh 来晋级即可,而 -Uvh 与 -Fvh 可以用的选项与参数,跟 install 是一样的。不外, -U 与 -F 的意义照旧不太一样的,根本的差异是如许的:

                -Uvh 前面接的软件即便没有装置过,则零碎将予以间接装置; 若前面接的软件有装置过旧版,则零碎主动更新至新版;
                -Fvh 假如前面接的软件并未装置到你的 Linux 零碎上,则该软件不会被装置;亦即只要已装置至你 Linux 零碎内的软件会被‘晋级’!

                由下面的阐明来看,假如你想要少量的晋级零碎旧版本的软件时,运用 -Fvh 则是比拟好的作法,由于没有装置的软件才不会被不警惕装置进零碎中。但是需求留意的是,假如你运用的是 -Fvh ,偏偏你的呆板上尚无这一个软件,那么很负疚,该软件并不会被装置在你的 Linux 主机下面,以是请重新以 ivh 来装置吧!

                通常有的冤家在停止整个作业零碎的旧版软件修补时,喜好这么停止:

                1. 先到各开展商的 errata 网站或许是国际的 FTP 映像站捉上去最新的 RPM 文件;
                2. 运用 -Fvh 来将你的零碎内曾装置过的软件停止修补与晋级!(真是方便呀!)

                以是,在不知道 yum 功用的状况下,你照旧可以到 CentOS 的映设站台下载 updates 材料,然后应用上述的办法来一口吻晋级! 固然啰,晋级也是可以应用 --nodeps/--force 等等的参数啦!


                小标题的图示RPM 盘问 (query)

                RPM 在盘问的时分,实在盘问的中央是在 /var/lib/rpm/ 这个目次下的材料库文件啦!别的, RPM 也可以盘问未装置的 RPM 文件内的资讯喔!那怎样去盘问呢? 我们先来谈谈可用的选项有哪些?

                [root@www ~]# rpm -qa                              <==已装置软件
                [root@www ~]# rpm -q[licdR] 已装置的软件称号       <==已装置软件
                [root@www ~]# rpm -qf 存在于零碎下面的某个档名     <==已装置软件
                [root@www ~]# rpm -qp[licdR] 未装置的某个文件称号  <==查阅RPM文件
                选项与参数:
                盘问已装置软件的资讯:
                -q  :仅盘问,前面接的软件称号能否有装置;
                -qa :列出一切的,曾经装置在本机 Linux 零碎下面的一切软件称号;
                -qi :列出该软件的细致资讯 (information),包括开辟商、版本与阐明等;
                -ql :列出该软件一切的文件与目次地点完好档名 (list);
                -qc :列出该软件的一切设定档 (找出在 /etc/ 底下的档名罢了)
                -qd :列出该软件的一切阐明档 (找出与 man 有关的文件罢了)
                -qR :列出与该软件有关的相依软件所含的文件 (Required 的意思)
                -qf :由前面接的文件称号,找出该文件属于哪一个已装置的软件;
                盘问某个 RPM 文件内含有的资讯:
                -qp[icdlR]:留意 -qp 前面接的一切参数以下面的阐明分歧。但用处仅在于找出
                	    某个 RPM 文件内的资讯,而非已装置的软件资讯!留意!
                

                在盘问的局部,一切的参数之前都需求加上 -q 才是所谓的盘问!盘问次要分为两局部, 一个是查已装置到零碎下面的的软件资讯,这部份的资讯都是由 /var/lib/rpm/ 所提供。另一个则是查某个 rpm 文件内容, 即是是由 RPM 文件内找出一些要写入材料库内的资讯便是了,这部份就得要运用 -qp (p 是 package 的意思)。 那就来看看几个复杂的典范吧!

                典范一:找出你的 Linux 能否有装置 logrotate 这个软件?
                [root@www ~]# rpm -q logrotate
                logrotate-3.7.4-8
                [root@www ~]# rpm -q logrotating
                package logrotating is not installed
                # 留意到,零碎会去找能否有装置前面接的软件称号。留意,
                # 不用要加上版本喔!至于表现的后果,一看就晓得有没有装置啦!
                
                典范二:列出上题当中,属于该软件所提供的一切目次与文件:
                [root@www ~]# rpm -ql logrotate
                /etc/cron.daily/logrotate
                /etc/logrotate.conf
                ....(以下省略)....
                # 可以看出该软件究竟提供了几多的文件与目次,也可以追踪软件的材料。
                
                典范三:列出 logrotate 这个软件的相干阐明材料:
                [root@www ~]# rpm -qi logrotate
                Name        : logrotate             Relocations: (not relocatable)
                Version     : 3.7.4                      Vendor: CentOS
                Release     : 8                      Build Date: Sun 02 Dec 2007 08:38:06 AM CST
                Install Date: Sat 09 May 2009 11:59:05 PM CST    Build Host: builder6
                Group       : System Environment/Base  Source RPM: logrotate-3.7.4-8.src.rpm
                Size        : 53618                     License: GPL
                Signature   : DSA/SHA1, Sun 02 Dec 2007 09:10:01 AM CST, Key ID a8a447dce8562897
                Summary     : Rotates, compresses, removes and mails system log files.
                Description :
                The logrotate utility is designed to simplify the administration of
                log files on a system which generates a lot of log files.  Logrotate
                allows for the automatic rotation compression, removal and mailing of
                log files.  Logrotate can be set to handle a log file daily, weekly,
                monthly or when the log file gets to a certain size.  Normally,
                logrotate runs as a daily cron job.
                
                Install the logrotate package if you need a utility to deal with the
                log files on your system.
                # 列出该软件的 information (资讯),外面的资讯可多着呢,包罗了软件称号、
                # 版本、开辟商、SRPM文件称号、打包次数、复杂阐明资讯、软件打包者、
                # 装置日期等等!假如想要细致的晓得该软件的材料,用这个参数来理解一下
                
                典范四:辨别仅找出 logrotate 的设定档与阐明档
                [root@www ~]# rpm -qc logrotate
                [root@www ~]# rpm -qd logrotate
                
                典范五:若要乐成装置 logrotate ,他还需求什么文件的帮助?
                [root@www ~]# rpm -qR logrotate
                /bin/sh
                config(logrotate) = 3.7.4-8
                libc.so.6
                ....(以下省略)....
                # 由这里看起来,呵呵~还需求许多文件的援助才行喔!
                
                典范六:由下面的典范五,找出 /bin/sh 是谁人软件提供的?
                [root@www ~]# rpm -qf /bin/sh
                bash-3.2-21.el5
                # 这个参数前面接的但是‘文件’呐!不像后面都是接软件喔!
                # 这个功用在盘问零碎的某个文件属于哪一个软件一切的。
                
                典范七:假定我有下载一个 RPM 文件,想要晓得该文件的需求文件,该怎样?
                [root@www ~]# rpm -qpR filename.i386.rpm
                # 加上 -qpR ,找出该文件需求的材料!
                

                罕见的盘问便是这些了!要特殊阐明的是,在盘问本机下面的 RPM 软件相干资讯时, 不需求加上版本的称号,只需加上软件称号即可!由于他会由 /var/lib/rpm 这个材料库外面去盘问, 以是我们可以不需求加上版本称号。但是盘问某个 RPM 文件就差别了,我们必需要列出整个文件的完好档名才行~ 这一点冤家们经常会搞错。底下我们就来做几个复杂的训练吧!

                例题:
                1. 我想要晓得我的零碎当中,以 c 扫尾的软件有几个,怎样实做?
                2. 我的 WWW 效劳器为 Apache ,我晓得他运用的 RPM 软件档名为 httpd 。如今,我想要晓得这个软件的一切设定档安排在那边,可以怎样作?
                3. 承上题,假如查出来的设定文件曾经被我改正,但是我遗忘了已经修正过哪些中央,以是想要间接重新装置一次该软件,该怎样作?
                4. 假如我误砍了某个紧张文件,比方 /etc/crontab,偏偏不知道他属于哪一个软件,该怎样办?
                答:
                1. rpm -qa | grep ^c | wc -l
                2. rpm -qc httpd
                3. 假定该软件在网络上的网址为:
                  http://web.site.name/path/httpd-x.x.xx.i386.rpm
                  则我可以如许做:
                  rpm -ivh http://web.site.name/path/httpd-x.x.xx.i386.rpm --replacepkgs
                4. 固然曾经没有这个文件了,不外没有干系,由于 RPM 有记载在 /var/lib/rpm 当中的材料库啊!以是间接下达:
                  rpm -qf /etc/crontab
                  就可以晓得是谁人软件啰!重新装置一次该软件即可!


                小标题的图示RPM 验证与数位签章 (Verify/signature)

                验证 (Verify) 的功用次要在于提供零碎办理员一个有效的办理机制!作用的方法是‘运用 /var/lib/rpm 底下的材料库内容来比对现在 Linux 零碎的情况下的一切软件文件 ’也便是说,当你有材料不警惕遗失, 或许是由于你误杀了某个软件的文件,或许是不警惕不晓得修正到某一个软件的文件内容, 就用这个复杂的办法来验证一下本来的文件零碎吧!好让你理解这一阵子究竟是修正到哪些文件材料了!验证的方法很复杂:

                [root@www ~]# rpm -Va
                [root@www ~]# rpm -V  已装置的软件称号
                [root@www ~]# rpm -Vp 某个 RPM 文件的档名
                [root@www ~]# rpm -Vf 在零碎下面的某个文件
                选项与参数:
                -V  :前面加的是软件称号,若该软件所含的文件被变动过,才会列出来;
                -Va :列出现在零碎下面一切能够被变动过的文件;
                -Vp :前面加的是文件称号,列出该软件内能够被变动过的文件;
                -Vf :列出某个文件能否被变动过~
                
                典范一:列出你的 Linux 内的 logrotate 这个软件能否被变动过?
                [root@www ~]# rpm -V logrotate
                # 假如没有呈现任何讯息,祝贺你,该软件所提供的文件没有被变动过。
                # 假如有呈现任何讯息,才是有呈现情况啊!
                
                典范二:盘问一下,你的 /etc/crontab 能否有被变动过?
                [root@www ~]# rpm -Vf /etc/crontab
                S.5....T  c /etc/crontab
                # 瞧!由于有被变动过,以是会列出被变动过的资讯范例!
                

                好了,那么我怎样晓得究竟我的文件被变动过的内容是什么?比方下面的典范二。呵呵!复杂的阐明一下吧! 比方,我们反省一下 logrotate 这个软件:

                [root@www ~]# rpm -ql logrotate
                /etc/cron.daily/logrotate
                /etc/logrotate.conf
                /etc/logrotate.d
                /usr/sbin/logrotate
                /usr/share/doc/logrotate-3.7.4
                /usr/share/doc/logrotate-3.7.4/CHANGES
                /usr/share/man/man8/logrotate.8.gz
                /var/lib/logrotate.status
                # 呵呵!共有八个文件啊!请修正 /etc/logrotate.conf 内的 rotate 酿成 5
                
                [root@www ~]# rpm -V logrotate
                ..5....T  c /etc/logrotate.conf
                

                你会发明在档名之前有个 c ,然后便是一堆奇异的笔墨了。谁人 c 代表的是 configuration , 便是设定档的意思。至于最后面的八个资讯是:

                • S :(file Size differs) 文件的容量巨细能否被改动
                • M :(Mode differs) 文件的范例或文件的属性 (rwx) 能否被改动?如能否可实行等参数已被改动
                • 5 :(MD5 sum differs) MD5 这一种指纹码的内容曾经差别
                • D :(Device major/minor number mis-match) 安装的主/次代码曾经改动
                • L :(readLink(2) path mis-match) Link 途径已被改动
                • U :(User ownership differs) 文件的所属人已被改动
                • G :(Group ownership differs) 文件的所属群组已被改动
                • T :(mTime differs) 文件的树立工夫已被改动

                以是,假如当一个设定档一切的资讯都被变动过,那么他的表现就会是:

                SM5DLUGT c filename
                

                至于谁人 c 代表的是‘ Config file ’的意思,也便是文件的范例,文件范例有底下这几类:

                • c :设定档 (config file)
                • d :文件材料档 (documentation)
                • g :鬼文件~通常是该文件不被某个软件所包括,较少发作!(ghost file)
                • l :受权文件 (license file)
                • r :读我文件 (read me)

                颠末验证的功用,你就可以晓得谁人文件被变动过。那么假如该文件的变卦是‘预期中的’, 那么就没有什么大题目,但是假如该文件是‘非预期的’,那么能否被入侵了呢?呵呵!得留意留意啰! 普通来说,设定档 (configure) 被变动过是很正常的,万一你的 binary program 被变动过呢? 那就得要特殊特殊警惕啊!

                Tips:
                虽说家丑不行外扬,不外有件事变照旧跟各人分享一下的好。鸟哥之前的主机已经由于装置一套软件,招致被打击成为跳板。 会发明的缘由是零碎中只需呈现 *.patch 的副档名时,运用 ls -l 便是表现不出来该档名 (该档名的确存在)。 找了良久,用了很多多少东西都找不出题目,终极应用 rpm -Va 找出来,原来很多多少 binary program 被变动过,连 init 都被恶搞!此时,赶忙重新装置 Linux 并移除那套软件,之后就比拟正常了。以是说,这个 rpm -Va 是个好功用喔!
                鸟哥的图示

                • 数位签章 (digital signature)

                谈完了软件的验证后,不晓得你有没有发明一个题目,那便是,验证只能验证软件内的资讯与 /var/lib/rpm/ 外面的材料库资讯罢了,假如该软件文件所提供的材料自身就有题目,那你运用验证的手腕也无法确定该软件的准确性啊! 那怎样处理呢?在 Tarball 与文件的验证方面,我们可以运用前一章谈到的 md5 指纹码来反省, 不外,连指纹码也能够会被篡改的嘛!那怎办?不要紧,我们可以透过数位签章来查验软件的泉源的!

                就像你本人的署名一样,我们的软件开辟商原厂所推出的软件也会有一个厂商本人的签章零碎! 只是这个签章被数位化了罢了。厂商可以数位签章零碎发生一个专属于该软件的签章,并将该签章的公钥 (public key) 释出。 当你要装置一个 RPM 文件时:

                1. 起首你必需要先装置原厂释出的公钥文件;
                2. 实践装置原厂的 RPM 软件时, rpm 指令会去读取 RPM 文件的签章资讯,与本机零碎内的签章资讯比对,
                3. 若签章相反则予以装置,若找不到相干的签章资讯时,则赐与正告而且中止装置喔。

                我们 CentOS 运用的数位签章零碎为 GNU 方案的 GnuPG (GNU Privacy Guard, GPG)(注1)。 GPG 可以透过杂凑运算,算出无独有偶的专属金钥零碎或许是数位签章零碎,有兴味的冤家可以参考文末的延伸阅读, 去理解一下 GPG 加密的机制喔!这里我们仅复杂的阐明数位签章在 RPM 文件上的使用罢了。 而依据下面的阐明,我们也会晓得起首必需要装置原厂释出的 GPG 数位签章的公钥文件啊!CentOS 的数位签章位于:

                [root@www ~]# ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
                -rw-r--r-- 1 root root 1504  6月 19  2008 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
                [root@www ~]# cat /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
                -----BEGIN PGP PUBLIC KEY BLOCK-----
                Version: GnuPG v1.2.6 (GNU/Linux)
                
                mQGiBEWfB6MRBACrnYW6yKMT+MwJlCIhoyTxGf3mAxmnAiDEy6HcYN8rivssVTJk
                ....(两头省略)....
                -----END PGP PUBLIC KEY BLOCK-----
                

                从下面的输入,你会晓得该数位签章码实在仅是一个乱数罢了,这个乱数关于数位签章故意义罢了, 我们看不懂啦!那么这个文件怎样装置呢?透过底下的方法来装置即可喔!

                [root@www ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
                

                由于差别版本 GPG 金钥文件安排的地位能够差别,不外档名大多因此 GPG-KEY 来阐明的, 因而你可以复杂的运用 locate 或 find 来找寻,如以下的方法来搜索即可:

                [root@www ~]# locate GPG-KEY
                [root@www ~]# find /etc -name '*GPG-KEY*'
                

                那装置完成之后,这个金钥的内容会以什么方法出现呢?根本上都是运用 pubkey 作为软件的称号的! 那我们先列出金钥软件称号后,再以 -qi 的方法来盘问看看该软件的资讯为何:

                [root@www ~]# rpm -qa | grep pubkey
                gpg-pubkey-e8562897-459f07a4
                [root@www ~]# rpm -qi gpg-pubkey-e8562897-459f07a4
                Name        : gpg-pubkey        Relocations: (not relocatable)
                Version     : e8562897               Vendor: (none)
                Release     : 459f07a4           Build Date: Wed 27 May 2009 10:07:26 PM CST
                Install Date: Wed 27 May 2009 10:07:26 PM CST   Build Host: localhost
                Group       : Public Keys        Source RPM: (none)
                Size        : 0                     License: pubkey
                Signature   : (none)
                Summary     : gpg(CentOS-5 Key <centos-5-key@centos.org>)
                Description :
                -----BEGIN PGP PUBLIC KEY BLOCK-----
                Version: rpm-4.4.2 (beecrypt-4.1.2)
                ....(底下省略)....
                

                重点便是最初面呈现的那一串乱码啦!那但是作为数位签章十分紧张的一环哩! 假如你遗忘加上数位签章,很能够许多原版软件就不克不及让你装置啰~除非你应用 rpm 时选择略过数位签章的选项。


                小标题的图示RPM 反装置与重修材料库 (erase/rebuilddb)

                反装置便是将软件排除装置啦!要留意的是,‘解装置的进程肯定要由最下层往下排除’,以 rp-pppoe 为例,这一个软件次要是根据 ppp 这个软件来装置的,以是当你要排除 ppp 的时分,就必需要先排除 rp-pppoe 才行!不然就会发作构造上的题目啦!这个可以由修建物来阐明, 假如你要撤除五、六楼,那么固然要由六楼拆起,不然先拆的是第五楼时,那么下面的楼层岂非会悬空?

                移除的选项很复杂,就透过 -e 即可移除。不外,很常发作软件属性相依招致无法移除某些软件的题目! 我们以底下的例子来阐明:

                # 1. 找出与 pam 有关的软件称号,并实验移除 pam 这个软件:
                [root@www ~]# rpm -qa | grep pam
                pam-devel-0.99.6.2-3.27.el5
                pam_passwdqc-1.0.2-1.2.2
                pam_pkcs11-0.5.3-23
                pam_smb-1.1.7-7.2.1
                pam-0.99.6.2-3.27.el5
                pam_ccreds-3-5
                pam_krb5-2.2.14-1
                [root@www ~]# rpm -e pam
                error: Failed dependencies:  <==这里提到的是相依性的题目
                        libpam.so.0 is needed by (installed) coreutils-5.97-14.el5.i386
                        libpam.so.0 is needed by (installed) libuser-0.54.7-2.el5.5.i386
                ....(以下省略)....
                
                # 2. 若仅移除 pam-devel 这个之前典范装置上的软件呢?
                [root@www ~]# rpm -e pam-devel  <==不会呈现任何讯息!
                [root@www ~]# rpm -q pam-devel
                package pam-devel is not installed
                

                从典范一我们晓得 pam 所提供的函式库是让十分多其他软件运用的,因而你不克不及移除 pam ,除非将其他相依软件一口吻也全部移除!你固然也能加 --nodeps 来强迫移除, 不外,云云一来一切会用到 pam 函式库的软件,都将成为无法运作的顺序,我想,你的主机也只好预备停机休假了吧! 至于典范二中,由于 pam-devel 是依靠于 pam 的开辟东西,你可以独自装置与独自移除啦!

                由于 RPM 文件经常会装置/移除/晋级等,某些举措大概能够会招致 RPM 材料库 /var/lib/rpm/ 内的文件破坏。果然云云的话,那你该如之奈何?别担忧,我们可以运用 --rebuilddb 这个选项来重修一下材料库喔! 作法如下:

                [root@www ~]# rpm --rebuilddb   <==重修材料库
                

                大标题的图示SRPM 的运用 : rpmbuild

                谈完了 RPM 范例的软件之后,再来我们谈一谈包括了 Source code 的 SRPM 该怎样运用呢?假设明天我们由网络下面下载了一个 SRPM 的文件,该怎样装置他?又,假如我想要修正这个 SRPM 外面原始码的相干设定值,又该怎样修订与重新编译呢? 别的,最需求留意的是,新版的 rpm 曾经将 RPM 与 SRPM 的指令离开了,SRPM 运用的是 rpmbuild 这个指令,而不是 rpm 喔!假如你是 Red Hat 7.3 曩昔的用户,那么请运用 rpm 来替换 rpmbuild 啦!


                小标题的图示应用预设值装置 SRPM 文件 (--rebuid/--recompile)

                假定我下载了一个 SRPM 的文件,又不想要修订这个文件内的原始码与相干的设定值, 那么我可以间接编译并装置吗?固然可以!应用 rpmbuild 共同选项即可。选项次要有底下两个:

                --rebuild 这个选项会将前面的 SRPM 停止‘编译’与‘打包’的举措,最初会发生 RPM 的文件,但是发生的 RPM 文件并没有装置到零碎上。当你运用 --rebuild 的时分,最初通常会发明一行字体:
                Wrote: /usr/src/redhat/RPMS/i386/pkgname.i386.rpm
                这个便是编译完成的 RPM 文件啰!这个文件就可以用来装置啦!装置的时分请加相对途径来装置即可!
                --recompile 这个举措会间接的‘编译’‘打包’而且‘装置’啰!请留意, rebuild 仅‘编译并打包’罢了,而 recompile 不光停止编译跟打包,还同时停止‘装置’了!

                不外,要留意的是,这两个选项都没有修正过 SRPM 内的设定值,仅是透过再次编译来发生 RPM 可装置软件文件罢了。 普通来说,假如编译的举措顺遂的话,那么编译进程所发生的两头暂存档都市被主动删除,假如发作任何错误, 则该两头文件会被保存在零碎上,等候运用者的除错举措!那么,该怎样除错呢?假如想要自行除错, 或许是想要修正 SRPM 内的设定值时,就得要晓得应用 SRPM 的时分,零碎会动用到哪些紧张的目次了! 底下我们就来谈一谈当处置 SRPM 时,零碎会运用到的目次。


                小标题的图示SRPM 运用的途径与需求的软件

                SRPM 既然含有 source code ,那么此中肯定有设定档啰,以是起首我们必须要晓得,这个 SRPM 在停止编译的时分会运用到哪些目次呢?如许一来才干够来修正嘛!你可以到你的 /usr/src 这个目次外面去检查一下,通常每个 distribution 提供的目次都不太相反,以 CentOS 5.x 为例,他因此 /usr/src/redhat/ 为任务目次, Openlinux 则因此 /usr/src/openlinux 为任务目次!无论怎样,横竖便是在 /usr/src 这个目次下就对了!好了,既然我们是 CentOS , 请到 /usr/src/redhat 外头去看一看呦:

                /usr/src/redhat/SPECS 这个目次当中安排的是该软件的设定档,比方这个软件的资讯参数、设定项目等等都安排在这里;
                /usr/src/redhat/SOURCES 这个目次当中安排的是该软件的原始档 (*.tar.gz 的文件) 以及 config 这个设定档;
                /usr/src/redhat/BUILD 在编译的进程中,有些暂存的材料都市安排在这个目次当中;
                /usr/src/redhat/RPMS 颠末编译之后,而且顺遂的编译乐成之后,将打包完成的文件安排在这个目次当中。外头有包括了 i386, i586, i686, noarch.... 等等的次目次。
                /usr/src/redhat/SRPMS 与 RPMS 内类似的,这里安排的便是 SRPM 封装的文件啰!偶然候你想要将你的软件用 SRPM 的方法释出时, 你的 SRPM 文件就会安排在这个目次中了。

                别的,在编译的进程当中,能够会发作不明的错误,或许是设定的错误,这个时分就会在 /tmp 底下发生一个绝对应的错误档,你可以依据该错误档停止除错的任务呢! 比及一切的题目都处理之后,也编译乐成了,那么方才解紧缩之后的文件,便是在 /usr/src/redhat/SPECS, SOURCES, BUILD 等等的文件都市被杀失,而只剩下安排在 /usr/src/redhat/RPMS 底下的文件了!

                由于 SRPM 需求重新编译,而编译的进程当中,我们至多需求有 make 与其相干的顺序,及 gcc, c, c++ 等其他的编译用的顺序言语来停止编译,更多阐明请参考第二十二章原始码所需根底软件吧。 以是,假如你在装置的进程当中没有选取软件开辟东西之类的软件, 呵呵!得重新拿出你的光碟,然后再装置喔!哈哈!只是得要克制一大堆的属性相依的题目便是了~ 这题目待会儿可以运用 yum 来处置,你固然也可以先运用‘ yum groupinstall "Development Tools" ’来装置开辟软件。 鸟哥这里假定你曾经装置了该软件群组啰。

                例题:
                实验运用 --rebuild 选项制造出一个 RPM 软件文件,可以到国度高速网络中央下载 rp-pppoe 这个 SRPM 软件文件, 你可以到 http://ftp.twaren.net/Linux/CentOS/5/os/SRPMS/ 找到这个软件来下载。 鸟哥这里运用 CentOS 5.3 的 rp-pppoe-3.5-32.1.src.rpm 为例喔。
                答:
                假定你曾经将 rp-pppoe 软件下载到 /root 底下,那接上去可以复杂的运用底下的方法来重新编译:
                [root@www ~]# rpmbuild --rebuild rp-pppoe-3.5-32.1.src.rpm
                正在装置 rp-pppoe-3.5-32.1.src.rpm
                正告:运用者 mockbuild 不存在 - 现运用 root 替代
                ....(两头省略)....
                已写入:/usr/src/redhat/RPMS/i386/rp-pppoe-3.5-32.1.i386.rpm
                已写入:/usr/src/redhat/RPMS/i386/rp-pppoe-debuginfo-3.5-32.1.i386.rpm
                正在实行 (%clean):/bin/sh -e /var/tmp/rpm-tmp.69789
                + umask 022
                + cd /usr/src/redhat/BUILD
                + cd rp-pppoe-3.5
                + rm -rf /var/tmp/rp-pppoe-3.5-32.1-root
                + exit 0
                正在实行 (--clean):/bin/sh -e /var/tmp/rpm-tmp.69789
                + umask 022
                + cd /usr/src/redhat/BUILD
                + rm -rf rp-pppoe-3.5
                + exit 0
                
                [root@www ~]# ll /usr/src/redhat/RPMS/i386/
                -rw-r--r-- 1 root root 105443  6月 27 02:51 rp-pppoe-3.5-32.1.i386.rpm
                -rw-r--r-- 1 root root  18756  6月 27 02:51 rp-pppoe-debuginfo-3.5-32.1.i386.rpm
                
                实在整个进程与 Tarball 的方法差未几,也是编译后酿成 binary program,接着再以 RPM 的机制封装起来啦。 重点在下面特别字体的局部,记得要观察一下喔!若统统正常,则会看到 exit 0 的字样,且会自动的删除 (rm) 许多两头暂存档哩。


                小标题的图示设定档的次要内容 (*.spec)

                除了运用 SRPM 内预设的参数来停止编译之外,我们还可以修正这些参数后再重新编译喔!那该怎样处置呢? 起首我们必需要将 SRPM 内的文件安顿到 /usr/src/redhat/ 内的相干目次,然后再去修正设定档即可啊! 我们就拿方才上头谁人 rp-pppoe 来阐明好了,假定我们曾经将该文件安排到 /root 中啦,然后:

                [root@www ~]# rpm -i rp-pppoe-3.5-32.1.src.rpm
                # 进程不会表现任何工具,他只会将 SRPM 的文件解开后,安排到 /usr/src/redhat/
                
                [root@www ~]# find /usr/src/redhat/ -type f
                /usr/src/redhat/SOURCES/rp-pppoe-3.5-firewall.patch  <==补丁档
                /usr/src/redhat/SOURCES/adsl-stop                    <==CentOS 提供的剧本
                /usr/src/redhat/SOURCES/rp-pppoe-3.5.tar.gz          <==原始码啦!
                /usr/src/redhat/SOURCES/rp-pppoe-3.5-buildroot.patch <==补丁档
                /usr/src/redhat/SOURCES/adsl-start                   <==CentOS 提供的剧本
                /usr/src/redhat/SOURCES/adsl-connect
                /usr/src/redhat/SOURCES/adsl-setup
                /usr/src/redhat/SOURCES/adsl-status
                /usr/src/redhat/SOURCES/rp-pppoe-3.4-redhat.patch    <==补丁档
                /usr/src/redhat/SPECS/rp-pppoe.spec                  <==紧张设定档!
                # 次要含有原始码与一个紧张的设定档啊! rp-pppoe.spec !
                

                好了,来看看我们的设定参数档,亦便是在 /usr/src/redhat/SPECS 内的 *.spec 文件啰!

                [root@www ~]# cd /usr/src/redhat/SPECS
                [root@www SPECS]# vi rp-pppoe.spec
                # 1. 起首,这个局部在引见整个软件的根本相干资讯!不管是版本照旧释出次数等。
                Summary: A PPP over Ethernet client (for xDSL support).
                Name: rp-pppoe
                Version: 3.5
                Release: 32.1
                License: GPL
                Group: System Environment/Daemons
                Url: http://www.roaringpenguin.com/pppoe/
                Source: http://www.roaringpenguin.com/rp-pppoe-%{version}.tar.gz
                Source1: adsl-connect
                Source2: adsl-setup
                ....(两头省略)....
                
                # 2. 这局部则是在设定相依属性需求的中央!
                BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
                
                Prereq: /sbin/chkconfig  <==需求的先驱顺序有哪些!
                Prereq: /sbin/service
                Prereq: fileutils
                
                Requires: ppp >= 2.4.2         <==需求的软件又有哪些!
                Requires: initscripts >= 5.92
                Requires: iproute >= 2.6
                
                BuildRequires: libtool   <==还需求哪些东西软件?
                BuildRequires: autoconf
                BuildRequires: automake
                
                %description             <==此软件的描绘啦!
                PPPoE (Point-to-Point Protocol over Ethernet) is a protocol used by
                many ADSL Internet Service Providers. This package contains the
                Roaring Penguin PPPoE client, a user-mode program that does not
                require any kernel modifications. It is fully compliant with RFC 2516,
                the official PPPoE specification.
                
                
                # 3. 编译前的预处置,以及编译进程当中所需求停止的指令,都写在这里
                #    尤其 %build 底下的材料,简直便是 makefile 外面的资讯啊!
                %prep  <==这部份在事后 (pre) 停止处置,大抵便是 patch 软件啊!
                %setup -q
                %patch0 -p1 -b .config
                %patch1 -p1 -b .buildroot
                %patch2 -p1 -b .ipchains
                
                %build <==这局部便是在实践编译啰!
                cd src
                autoconf
                CFLAGS="-D_GNU_SOURCE" %configure
                make
                
                install -m 0755 %{SOURCE1} scripts
                install -m 0755 %{SOURCE2} scripts
                install -m 0755 %{SOURCE3} scripts
                install -m 0755 %{SOURCE4} scripts
                install -m 0755 %{SOURCE5} scripts
                
                %install  <==这便是装置进程!
                rm -rf %{buildroot}
                
                mkdir -p %{buildroot}/sbin
                make -C src install RPM_INSTALL_ROOT=%{buildroot}
                ....(两头省略)....
                
                # 4. 这里列出,这个软件释出的文件有哪些的意思!
                %files   <==这个软件提供的文件有哪些?需求记载在材料库内!
                %defattr(-,root,root)
                %doc doc/LICENSE scripts/adsl-connect scripts/adsl-setup scripts/adsl-init
                %doc scripts/adsl-start scripts/adsl-status scripts/adsl-stop
                %doc configs
                %config(noreplace) %{_sysconfdir}/ppp/pppoe-server-options
                %config(noreplace) %{_sysconfdir}/ppp/firewall*
                /sbin/*
                %{_sbindir}/*
                %{_mandir}/man?/*
                
                # 5. 列出这个软件的变动汗青记录档!
                %changelog
                * Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 3.5-32.1
                - rebuild
                ....(两头省略)....
                * Wed May 31 2000 Than Ngo <than@redhat.de>
                - adopted for Winston.
                

                要留意到的是 rp-pppoe.sepc 这个文件,这是次要的将 SRPM 编译成 RPM 的设定档,他的根本规矩可以如许看:

                1. 整个文件的扫尾以Summary为开端,这部份的设建都是最根底的阐明内容;
                2. 然后每个差别的段落之间,都以%来做为扫尾,比方%prep与%install等;

                我们来谈一谈几个罕见的 SRPM 设定段落:


                • 零碎全体资讯方面:

                方才你看到的就有底下这些紧张的咚咚啰:

                参数参数意义
                Summary 本软件的次要阐明,比方上表中阐明了本软件是针对 xDSL 的拨接用处啦!
                Name 本软件的软件称号 (终极会是 RPM 文件的档名组成之一)
                Version 本软件的版本 (也会是 RPM 档名的组成之一)
                Release 这个是该版本打包的次数阐明 (也会是 RPM 档名的组成之一)。由于我们想要动点手脚,以是上头的文件中, 这个局部请修正为 32.2.vbird 看看
                License 这个软件的受权形式,我们是运用 GPL 啦!
                Group 这个软件的开展集团称号;
                Url 这个原始码的次要官方网站;
                Source 这个软件的泉源,假如是网络上下载的软件,通常肯定会有这个资讯来通知各人这个原始档的泉源! 别的,另有来自开辟商本人提供的原始档材料喔!比方下面的 adsl-start 等顺序。
                Patch 便是作为补丁的 patch file 啰!
                BuildRoot 设定作为编译时,该运用哪个目次来暂存两头文件 (如编译进程的目的文件/保持文件等档)。
                ExclusiveArch 这个是阐明这个软件的合适装置的硬体,通常预设为 i386,固然,你也可以调解为 i586 啦等等的! 由于我们的零碎是新的 CPU 架构,这里我们修正内容成为‘ExclusiveArch: i686’来玩玩看。
                上述为必需要存在的项目,底下为可运用的额定设定值
                Requires 假如你这个软件还需求其他的软件的援助,那么这里就必须写下去,则当你制造成 RPM 之后,零碎就会主动的去反省啦!这便是‘相依属性’的次要泉源啰!
                Prereq 这个软件需求的先驱顺序为何!这里指的是‘顺序’而 Requires 指的是‘软件’!
                BuildRequires 编译进程中所需求的软件。Requires 指的是‘装置时需求反省’的,由于与实践运作有关,这个 BuildRequires 指的是‘编译时’所需求的软件,只要在 SRPM 编译成为 RPM 时才会反省的项目。
                Packager 这个软件是经过谁来打包的呢?
                Vender 开展的厂商哪;

                下面几个材料通常都必须要写啦!但是假如你的软件没有相依属性的干系时,那么就可以不需求谁人 Requires 啰! 依据下面的设定,终极的档名就会是‘{Name}-{Version}-{Release}.{ExclusiveArch}.rpm’的款式, 以我们下面的设定来说,档名应该会是‘rp-pppoe-3.5-32.2.vbird.i686.rpm’的样子啰!


                • %description:

                将你的软件做一个冗长的阐明!这个也是必须要的。还记得运用‘ rpm -qi 软件称号 ’会呈现一些根底的阐明吗? 下面这些工具包罗 Description 便是在表现这些紧张资讯的啦!以是,这里记得要详加表明喔!


                • %prep:

                pre 这个要害字本来就有‘在...之前’的意思,因而这个项目在这里指的便是‘尚未停止设定或装置之前,你要编译完成的 RPM 帮你事前做的事变’,便是 prepare 的简写啰!那么他的任务事变次要有:

                1. 停止软件的补丁 (patch) 等相干任务;
                2. 寻觅软件所需求的目次能否曾经存在?确认用的!
                3. 事前树立你的软件所需求的目次,或许事前需求停止的义务;
                4. 假如待装置的Linux零碎内曾经有装置的时分能够会被掩盖失的文件时,那么就必须要停止备份(backup)的任务了!

                在本案例中,你会发明顺序会运用 patch 去停止补丁的举措啦!


                • %setup:

                这个项目便是在停止相似解紧缩之类的任务!这个项目肯定要写喔!否则你的 tarball 原始码是无法被解紧缩的哩!牢记牢记!


                • %build:

                build 便是树立啊!以是固然啰,这个段落便是在谈怎样 make 编译成为可实行的顺序啰! 你会发明在此局部的顺序码方面,便是 ./configure, make 等项目哩!


                • %install:

                编译完成 (build) 之后,便是要装置啦!装置便是写在这里,也便是相似 Tarball 外面的 make install 的意思啰!


                • %clean:

                编译与装置终了后,必需要将一些暂存在 BuildRoot 内的材料删除才好, 因而这个时分这个 clean 的项目就紧张啦!这有点像是 make clean 的觉得~坚持零碎的干爽嘛!


                • %files:

                这个软件装置的文件都需求写到这里来,固然包罗了‘目次’喔!以是连同目次请一同写到这个段落当中!以备检验呢!^_^ !别的,你也可以指定每个文件的范例,包罗文件档 (%doc 前面接的) 与设定档 (%config 前面接的) 等等。


                • %changelog:

                这个项目次要则是在记载这个软件已经的更新记录啰!星号 (*) 前面应该要以工夫,修正者, email 与软件版原本作为阐明, 减号 (-) 前面则是你要作的细致阐明啰!在这部份鸟哥就新增了两行,内容如下:

                %changelog
                * Wed Jul 01 2009 VBird Tsai <vbird@mail.vbird.idv.tw> - 3.5-32.2.vbird
                - only rebuild this SRPM to RPM
                
                * Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 3.5-32.1
                ....(底下省略)....
                

                修正到这里也差未几了,您也应该要理解到这个 rp-pppoe.spec 有何等紧张!我们用 rpm -q 去盘问一堆资讯时, 实在都是在这里写入的!如许理解否?接上去,就让我们来理解一下怎样将 SRPM 给他编译出 RPM 来吧!


                小标题的图示SRPM 的编译指令 (-ba/-bb)

                要将在 /usr/src/redhat 底下的材料编译或许是单纯的打包成为 RPM 或 SRPM 时,就需求 rpmbuild 指令与相干选项的帮助了!我们只引见两个常用的选项给您理解一下:

                [root@www ~]# rpmbuild -ba rp-pppoe.spec  <==编译并同时发生 RPM 与 SRPM 文件
                [root@www ~]# rpmbuild -bb rp-pppoe.spec  <==仅编译成 RPM 文件
                

                这个时分零碎就会如许做:

                1. 先辈入到 BUILD 这个目次中,亦便是: /usr/src/redhat/BUILD 这个目次;

                2. 按照 *.spec 文件内的 Name 与 Version 界说收工作的目次称号,以我们下面的例子为例,那么零碎就会在 BUILD 目次中先删除 rp-pppoe-3.5 的目次,再重新树立一个 rp-pppoe-3.5 的目次,并进入该目次;

                3. 在新建的目次外面,针对 SOURCES 目次下的泉源文件,也便是 *.spec 外面的 Source 设定的谁人文件,以 tar 停止解紧缩,以我们这个例子来说,则会在 /usr/src/redhat/BUILD/rp-pppoe-3.5 当中,将 /usr/src/redhat/SOURCES/rp-pppoe-3.5.tar.gz 停止解紧缩啦!

                4. 再来开端 %build 及 %install 的设定与编译!

                5. 最初将完成打包的文件给他安排到该安排的中央去,假如你的规则的硬体是在 i386 的零碎,那么最初编译乐成的 *.i386.rpm文件就会被安排在 /usr/src/redhat/RPMS/i386 外面啰!假如是 i686 那么天然便是 /usr/src/redhat/RPMS/i686 目次下啰!

                整个步调大约便是如许子!最初的后果材料会安排在 RPMS 谁人目次底下就对啦!我们这个案例中想要同时打包 RPM 与 SRPM , 因而请您自行处置一下‘ rpmbuild -ba rp-pppoe.spec ’吧!

                [root@www ~]# cd /usr/src/redhat/SPECS
                [root@www SPECS]# rpmbuild -ba rp-pppoe.spec
                ....(以上省略)....
                正在处置文件:rp-pppoe-debuginfo-3.5-32.2.vbird
                已写入:/usr/src/redhat/SRPMS/rp-pppoe-3.5-32.2.vbird.src.rpm
                已写入:/usr/src/redhat/RPMS/i386/rp-pppoe-3.5-32.2.vbird.i386.rpm
                已写入:/usr/src/redhat/RPMS/i386/rp-pppoe-debuginfo-3.5-32.2.vbird.i386.rpm
                正在实行 (%clean):/bin/sh -e /var/tmp/rpm-tmp.10628
                + umask 022
                + cd /usr/src/redhat/BUILD
                + cd rp-pppoe-3.5
                + rm -rf /var/tmp/rp-pppoe-3.5-32.2.vbird-root
                + exit 0
                
                [root@www SPECS]# find /usr/src/redhat -name 'rp-pppoe*rpm'
                /usr/src/redhat/RPMS/i386/rp-pppoe-3.5-32.2.vbird.i386.rpm
                /usr/src/redhat/RPMS/i386/rp-pppoe-debuginfo-3.5-32.2.vbird.i386.rpm
                /usr/src/redhat/SRPMS/rp-pppoe-3.5-32.2.vbird.src.rpm
                # 下面辨别是 RPM 与 SRPM 的文件档名!
                

                诚实说,应该会呈现 i686 的档名才对!不外,能够是原始码自身没有援助 i686 之类的语法吧! 以是仅呈现 i386 的档名罢了。别的,你可以看到档名的确是好像我们之前谈到的喔! 那你可以自行制造出有你特别称号的档名啰 (比方下面的 vbird 啰)。


                小标题的图示一个打包本人软件的典范

                这个就风趣了!我们本人来编辑一下本人制造的 RPM 怎样样?会很难吗?完全不会! 我们这里就举个例子来玩玩吧!还记得我们在前一章谈到 Tarball 与 make 时,已经谈到的 main 这个顺序吗?如今我们将这个顺序加上 Makefile 后, 将他制造成为 main-0.1.i386.rpm 好吗?那该怎样停止呢?底下就让我们来处置处置吧!


                • 制造原始码文件 tarball 发生:

                请将前一章你已经处置过的 main.tgz 再次的捉上去一次,我们将这个文件安排到 /root 底下, 而且在 /usr/local/src 底下树立一个名为 main-0.1 的目次来解紧缩喔!

                [root@www ~]# mkdir /usr/local/src/main-0.1
                [root@www ~]# tar -zxvf main.tgz -C /usr/local/src/main-0.1
                [root@www ~]# cd /usr/local/src/main-0.1
                [root@www main-0.1]# vim Makefile  <==树立原始码所需 make 规矩
                LIBS = -lm
                OBJS = main.o haha.o sin_value.o cos_value.o
                main: ${OBJS}
                	gcc -o main ${OBJS} ${LIBS}
                clean:
                	rm -f main ${OBJS}
                install:
                	install -m 755 main $(RPM_INSTALL_ROOT)/usr/local/bin/main
                # 记得 gcc 与 rm 之前是运用 <tab> 按键作出来的空缺喔!
                
                [root@www main-0.1]# cd ..
                [root@www src]# tar -zcvf main-0.1.tar.gz main-0.1
                # 此时会发生 main-0.1.tar.gz ,将他挪到 /usr/src/redhat/SOURCES 底下:
                [root@www src]# cp main-0.1.tar.gz /usr/src/redhat/SOURCES
                

                这个时分在 /usr/src/redhat 底下的原始码就树立乐成了!接上去便是 spec 文件的树立啰!


                • 树立 *.spec 的设定档

                这个文件的建置是一切 RPM 制造外面最紧张的课题!你必需要细心的设定他,不要随意处置!细心看看吧!

                [root@www ~]# cd /usr/src/redhat/SPECS
                [root@www SPECS]# vim main.spec
                Summary:   calculate sin and cos value.
                Name:      main
                Version:   0.1
                Release:   1
                License:   GPL
                Group:     VBird's Home
                Source:    main-0.1.tar.gz   <==记得要写准确的 Tarball 档名喔!
                Url:       http://linux.vbird.org
                Packager:  VBird
                BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
                
                %description
                This package will let you input your name and calculate sin cos value.
                
                %prep
                %setup -q
                
                %build
                make
                
                %install
                rm -rf %{buildroot}
                mkdir -p %{buildroot}/usr/local/bin
                make install RPM_INSTALL_ROOT=%{buildroot}   <==这项目也很紧张!
                
                %files
                /usr/local/bin/main
                
                %changelog
                * Wed Jul 01 2009 VBird Tsai <vbird@mail.vbird.idv.tw> 0.1
                - build the program
                

                • 编译成为 RPM 与 SRPM

                诚实说,谁人 spec 文件建置妥当后,后续的举措就复杂的要命了!开端来编译吧!

                [root@www SPECS]# rpmbuild -ba main.spec
                ....(后面省略)....
                已写入:/usr/src/redhat/SRPMS/main-0.1-1.src.rpm
                已写入:/usr/src/redhat/RPMS/i386/main-0.1-1.i386.rpm
                已写入:/usr/src/redhat/RPMS/i386/main-debuginfo-0.1-1.i386.rpm
                

                很快的,我们就曾经树立了几个 RPM 文件啰!接上去让我们好好测试一下打包起来的效果吧!


                • 装置/测试/实践盘问
                [root@www ~]# rpm -ivh /usr/src/redhat/RPMS/i386/main-0.1-1.i386.rpm
                正在预备…             ########################################### [100%]
                   1:main                   ########################################### [100%]
                
                [root@www ~]# rpm -ql main
                /usr/local/bin/main   <==本人实验实行 main 看看!
                
                [root@www ~]# rpm -qi main
                Name        : main              Relocations: (not relocatable)
                Version     : 0.1                    Vendor: (none)
                Release     : 1                  Build Date: 西元2009年07月02日 (周四)
                Install Date: 西元2009年07月02日 Build Host: www.vbird.tsai
                Group       : VBird's Home       Source RPM: main-0.1-1.src.rpm
                Size        : 3360                  License: GPL
                Signature   : (none)
                Packager    : VBird
                URL         : http://linux.vbird.org
                Summary     : calculate sin and cos value.
                Description :
                This package will let you input your name and calculate sin cos value.
                # 看到没?属于你本人的软件喔!真是很痛快的啦!
                

                用很复杂的方法,就可以将本人的软件或许顺序给他修正与设定妥当!当前你就可以自行设定你的 RPM 啰!固然,也可以手动修正你的 SRPM 的泉源档内容啰!


                大标题的图示YUM 线上晋级机制

                我们在本章一开端的中央谈到过 yum 这玩意儿,这个 yum 是透过火析 RPM 的标头材料后, 依据各软件的相干性制造出属性相依时的处理方案,然后可以主动处置软件的相依属性题目,以处理软件装置或移除与晋级的题目。 细致的 yum 效劳器与用户端之间的相同,可以再回到后面的局部查阅一下图 1.5.1 的阐明。

                由于 distribution 必需要先释出软件,然后将软件安排于 yum 效劳器下面,以提供用户端来要求装置与晋级之用的。 因而我们想要运用 yum 的功用时,必需要先找到合适的 yum server 才行啊!而每个 yum server 能够都市提供很多差别的软件功用,那便是我们之前谈到的‘容器’啦!因而,你必需要前去 yum server 盘问到相干的容器网址后,再持续处置后续的设定事件。

                现实上 CentOS 在释出软件时曾经制造出多部映射站台 (mirror site) 提供全天下的软件更新之用。 以是,实际上我们不需求处置任何设定值,只需可以连上 Internet ,就可以运用 yum 啰!底下就让我们来玩玩看吧!


                小标题的图示应用 yum 停止盘问、装置、晋级与移除功用

                yum 的运用真黑白常复杂,便是透过 yum 这个指令啊!那么这个指令怎样用呢? 用法很复杂,就让我们来复杂的谈谈:


                • 盘问功用:yum [list|info|search|provides|whatprovides] 参数

                假如想要盘问应用 yum 来盘问原版 distribution 所提供的软件,或已知某软件的称号,想晓得该软件的功用, 可以应用 yum 相干的参数为:

                [root@www ~]# yum [option] [盘问任务项目] [相干参数]
                选项与参数:
                [option]:次要的选项,包罗有:
                  -y :当 yum 要等候运用者输出时,这个选项可以主动提供 yes 的回应;
                  --installroot=/some/path :将该软件装置在 /some/path 而不运用预设途径
                [盘问任务项目] [相干参数]:这方面的参数有:
                  search  :搜索某个软件称号或许是描绘 (description) 的紧张要害字;
                  list    :列出现在 yum 所办理的一切的软件称号与版本,有点相似 rpm -qa;
                  info    :同上,不外有点相似 rpm -qai 的实行后果;
                  provides:从文件去搜索软件!相似 rpm -qf 的功用!
                
                典范一:搜索磁碟阵列 (raid) 相干的软件有哪些?
                [root@www ~]# yum search raid
                ....(后面省略)....
                mdadm.i386 : mdadm controls Linux md devices (software RAID arrays)
                lvm2.i386 : Userland logical volume management tools
                ....(前面省略)....
                # 在冒号 (:)  右边的是软件称号,左边的则是在 RPM 内的 name 设定 (软件名)
                # 瞧!下面的后果,这不便是与 RAID 有关的软件吗?假如想理解 mdadm 的软件内容呢?
                
                典范二:找出 mdadm 这个软件的功用为何
                [root@www ~]# yum info mdadm
                Installed Packages      <==这阐明该软件是曾经装置的了
                Name   : mdadm          <==这个软件的称号
                Arch   : i386           <==这个软件的编译架构
                Version: 2.6.4          <==此软件的版本
                Release: 1.el5          <==释出的版本
                Size   : 1.7 M          <==此软件的文件总容量
                Repo   : installed      <==容器报答说已装置的
                Summary: mdadm controls Linux md devices (software RAID arrays)
                Description:            <==看到否?这便是 rpm -qi 嘛!
                mdadm is used to create, manage, and monitor Linux MD (software RAID)
                devices.  As such, it provides similar functionality to the raidtools
                package.  However, mdadm is a single program, and it can perform
                almost all functions without a configuration file, though a configuration
                file can be used to help with some common tasks.
                # 不要跟我说,下面说些啥?本人找字典翻一翻吧!托付托付!
                
                典范三:列出 yum 效劳器下面提供的一切软件称号
                [root@www ~]# yum list
                Installed Packages <==已装置软件
                Deployment_Guide-en-US.noarch            5.2-9.el5.centos       installed
                Deployment_Guide-zh-CN.noarch            5.2-9.el5.centos       installed
                Deployment_Guide-zh-TW.noarch            5.2-9.el5.centos       installed
                ....(两头省略)....
                Available Packages <==还可以装置的其他软件
                Cluster_Administration-as-IN.noarch      5.2-1.el5.centos       base
                Cluster_Administration-bn-IN.noarch      5.2-1.el5.centos       base
                ....(底下省略)....
                # 下面提供的意义为:‘ 软件称号   版本   在谁人容器内 ’
                
                典范四:列出现在效劳器上可供本机停止晋级的软件有哪些?
                [root@www ~]# yum list updates  <==肯定要是 updates 喔!
                Updated Packages
                Deployment_Guide-en-US.noarch            5.2-11.el5.centos      base
                Deployment_Guide-zh-CN.noarch            5.2-11.el5.centos      base
                Deployment_Guide-zh-TW.noarch            5.2-11.el5.centos      base
                ....(底下省略)....
                # 下面就列出在谁人容器内可以提供晋级的软件与版本!
                
                典范五:列出提供 passwd 这个文件的软件有哪些
                [root@www ~]# yum provides passwd
                passwd.i386 : The passwd utility for setting/changing passwords using PAM
                passwd.i386 : The passwd utility for setting/changing passwords using PAM
                # 找到啦!便是下面的这个软件提供了 passwd 这个顺序!
                

                透过下面的盘问,你应该大抵晓得 yum 怎样用在盘问下面了吧?那么实践来使用一下:

                例题:
                应用 yum 的功用,找出以 pam 为扫尾的软件称号有哪些?而此中尚未装置的又有哪些?
                答:
                可以透过如下的办法来盘问:
                [root@www ~]# yum list pam*
                Installed Packages
                pam.i386                  0.99.6.2-3.27.el5      installed
                pam_ccreds.i386           3-5                    installed
                pam_krb5.i386             2.2.14-1               installed
                pam_passwdqc.i386         1.0.2-1.2.2            installed
                pam_pkcs11.i386           0.5.3-23               installed
                pam_smb.i386              1.1.7-7.2.1            installed
                Available Packages <==底下则是‘可晋级’的或‘未装置’的
                pam.i386                  0.99.6.2-4.el5         base
                pam-devel.i386            0.99.6.2-4.el5         base
                pam_krb5.i386             2.2.14-10              base
                
                如上所示,以是可晋级者有 pam, pam_krb5 这两个软件,完全没有装置的则是 pam-devel 这个软件啰!


                • 装置/晋级功用:yum [install|update] 软件

                既然可以盘问,那么装置与晋级呢?很复杂啦!就应用 install 与 update 这两项任务来处置即可喔!

                [root@www ~]# yum [option] [盘问任务项目] [相干参数]
                选项与参数:
                  install :前面接要装置的软件!
                  update  :前面接要晋级的软件,若要整个零碎都晋级,就间接 update 即可
                
                典范一:将前一个训练找到的未装置的 pam-devel 装置起来
                [root@www ~]# yum install pam-devel
                Setting up Install Process
                Parsing package install arguments
                Resolving Dependencies  <==先反省软件的属性相依题目
                --> Running transaction check
                ---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be updated
                --> Processing Dependency: pam = 0.99.6.2-4.el5 for package: pam-devel
                --> Running transaction check
                ---> Package pam.i386 0:0.99.6.2-4.el5 set to be updated
                filelists.xml.gz          100% |=========================| 1.6 MB    00:05
                filelists.xml.gz          100% |=========================| 138 kB    00:00
                -> Finished Dependency Resolution
                
                Dependencies Resolved
                
                =============================================================================
                 Package                 Arch       Version          Repository        Size
                =============================================================================
                Installing:
                 pam-devel               i386       0.99.6.2-4.el5   base              186 k
                Updating:
                 pam                     i386       0.99.6.2-4.el5   base              965 k
                
                Transaction Summary
                =============================================================================
                Install      1 Package(s)  <==后果发明要装置此软件需求晋级另一个相依的软件
                Update       1 Package(s)
                Remove       0 Package(s)
                
                Total download size: 1.1 M
                Is this ok [y/N]: y  <==确定要装置!
                Downloading Packages: <==先下载!
                (1/2): pam-0.99.6.2-4.el5 100% |=========================| 965 kB    00:05
                (2/2): pam-devel-0.99.6.2 100% |=========================| 186 kB    00:01
                Running rpm_check_debug
                Running Transaction Test
                Finished Transaction Test
                Transaction Test Succeeded
                Running Transaction <==开端装置!
                  Updating  : pam                          ######################### [1/3]
                  Installing: pam-devel                    ######################### [2/3]
                  Cleanup   : pam                          ######################### [3/3]
                
                Installed: pam-devel.i386 0:0.99.6.2-4.el5
                Updated: pam.i386 0:0.99.6.2-4.el5
                Complete!
                

                有没有很快乐啊!你不用晓得软件在那边,你不用手动下载软件,你也不用拿出原版光碟出来 mount 之后盘问再装置!全部不需求,只需有了 yum 这个家伙,你的装置、晋级再也不是什么难事! 并且还能自动的停止软件的属性相依处置流程,如上所示,一口吻帮我们处置好了一切事变! 是不是很过瘾啊!并且整个举措完全收费!够酷吧!


                • 移除功用:yum [remove] 软件

                那能不克不及用 yum 移除软件呢?将方才的软件移除看看,会呈现啥情况啊?

                [root@www ~]# yum remove pam-devel
                Setting up Remove Process
                Resolving Dependencies  <==异样的,先处理属性相依的题目
                --> Running transaction check
                ---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be erased
                --> Finished Dependency Resolution
                
                Dependencies Resolved
                
                =============================================================================
                 Package                 Arch       Version          Repository        Size
                =============================================================================
                Removing:
                 pam-devel               i386       0.99.6.2-4.el5   installed         495 k
                
                Transaction Summary
                =============================================================================
                Install      0 Package(s)
                Update       0 Package(s)
                Remove       1 Package(s)  <==还好,并没有属性相依的题目,单纯移除一个软件
                
                Is this ok [y/N]: y
                Downloading Packages:
                Running rpm_check_debug
                Running Transaction Test
                Finished Transaction Test
                Transaction Test Succeeded
                Running Transaction
                  Erasing   : pam-devel                    ######################### [1/1]
                
                Removed: pam-devel.i386 0:0.99.6.2-4.el5
                Complete!
                

                连移除也这么复杂!看来,好像不需求 rpm 这个指令也可以高兴的装置一切的软件了! 固然是云云,但是 yum 终究是架构在 rpm 下面所开展起来的,以是,鸟哥以为你照旧得需求理解 rpm 才行!不要学了 yum 之后就将 rpm 的功用遗忘了呢!牢记牢记!


                小标题的图示yum 的设定档

                固然 yum 是你的主性能够连线上 Internet 就可以间接运用的,不外,由于 CentOS 的映射站台能够会选错, 举例来说,我们在台湾,但是 CentOS 的映射站台却选择到了大陆北京或许这天本去,有没有能够发作啊! 有啊!鸟哥讲授方面就经常发作如许的题目,要晓得,我们连线到大陆或日本的速率黑白常慢的呢!那怎办? 固然便是手动的修正一下 yum 的设定档就好啰!

                在台湾,CentOS 的映射站台次要有高速网络中央与义首大学,鸟哥迩来比拟偏好高速网络中央, 好像更新的速率比拟快,并且衔接台湾学术网络也十分疾速哩!因而,鸟哥底下发起台湾的冤家运用高速网络中央的 ftp 主机资源来作为 yum 效劳器泉源喔!现在高速网络中央关于 CentOS 所提供的相干网址如下:

                假如你衔接到上述的网址后,就会发明外面有一堆保持,那些保持便是这个 yum 效劳器所提供的容器了! 以是高速网络中央也提供了 addons, centosplus, extras, fasttrack, os, updates 等容器,最好认的容器便是 os (零碎预设的软件) 与 updates (软件晋级版本) 啰!由于鸟哥在我的测试用主机是应用 i386 的版本, 因而谁人 os 再点出来就会失掉如下的可提供装置的网址:

                为什么在上述的网址内呢?有什么特征!最紧张的特征便是谁人‘ repodata ’的目次!该目次便是剖析 RPM 软件后所发生的软件属性相依材料安排处!因而,当你要找容器地点网址时, 最紧张的便是该网址底下肯定要有个名为 repodata 的目次存在!那便是容器的网址了! 其他的容器准确网址,就请列位看倌自行寻觅一下喔!如今让我们修正设定档吧!

                [root@www ~]# vi /etc/yum.repos.d/CentOS-Base.repo
                [base]
                name=CentOS-$releasever - Base
                mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
                #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
                gpgcheck=1
                gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
                

                如上所示,鸟哥仅列出 base 这个容器内容罢了,其他的容器内容请自行查阅啰!下面的材料需求留意的是:

                • [base]:代表容器的名字!中刮号肯定要存在,外面的称号则可以随意取。但是不克不及有两个相反的容器称号, 不然 yum 会不知道该到那边去找容器相干软件清单文件。

                • name:只是阐明一下这个容器的意义罢了,紧张性不高!

                • mirrorlist=:列出这个容器可以运用的映射站台,假如不想运用,可以表明到这行;

                • baseurl=:这个最紧张,由于前面接的便是容器的实践网址! mirrorlist 是由 yum 顺序自行去捉映射站台, baseurl 则是指定牢固的一个容器网址!我们方才找到的网址放到这里来啦!

                • enable=1:便是让这个容器被启动。假如不想启动可以运用 enable=0 喔!

                • gpgcheck=1:还记得 RPM 的数位签章吗?这便是指定能否需求查阅 RPM 文件内的数位签章!

                • gpgkey=:便是数位签章的公钥档地点地位!运用预设值即可

                理解这个设定档之后,接上去让我们修正整个文件的内容,让我们这部主机可以间接运用高速网络中央的资源吧! 修正的方法鸟哥仅列出 base 这个容器项目罢了,其他的项目请您自行按照上述的作法来处置即可!

                [root@www ~]# vi /etc/yum.repos.d/CentOS-Base.repo
                [base]
                name=CentOS-$releasever - Base
                baseurl=http://ftp.twaren.net/Linux/CentOS/5/os/i386/
                gpgcheck=1
                gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
                # 底下其他的容器项目,请自行到高速网络中央去盘问后本人处置!
                

                接上去固然便是给他测试一下啰!怎样测试呢?再次运用 yum 即可啊!

                典范一:列出现在 yum server 所运用的容器有哪些?
                [root@www ~]# yum repolist all
                repo id         repo name                  status
                addons          CentOS-5 - Addons          enabled
                base            CentOS-5 - Base            enabled
                c5-media        CentOS-5 - Media           disabled
                centosplus      CentOS-5 - Plus            disabled
                extras          CentOS-5 - Extras          enabled
                updates         CentOS-5 - Updates         enabled
                # 下面最左边有写 enabled 才是有启动的!由于 /etc/yum.repos.d/
                # 有多个设定档,以是你会发明另有其他的容器存在。
                


                • 修正容器发生的题目与处理之道

                由于我们是修正零碎预设的设定档,现实上,我们应该要在 /etc/yum.repos.d/ 底下新建一个文件, 该副档名必需是 .repo 才行!但由于我们运用的是指定特定的映射站台,而不是其他软件开辟生提供的容器, 因而才修正零碎预设设定档。但是能够由于运用的容器版本有新旧之分,你得要晓得, yum 会先下载容器的清单到本机的 /var/cache/yum 外面去!那我们修正了网址却没有修正容器称号 (中刮号内的笔墨), 能够就会形成本机的清单与 yum 效劳器的清单差别步,此时就会呈现无法更新的题目了!

                那怎样办啊?很复杂,就肃清失本机下面的旧材料即可!需求手动处置吗?不需求的, 透过 yum 的 clean 项目来处置即可!

                [root@www ~]# yum clean [packages|headers|all] 
                选项与参数:
                 packages:将已下载的软件文件删除
                 headers :将下载的软件档头删除
                 all     :将一切容器材料都删除!
                
                典范一:删除已下载过的一切容器的相干材料 (含软件自身与清单)
                [root@www ~]# yum clean all
                

                小标题的图示yum 的软件群组功用

                透过 yum 来线上装置一个软件黑白常的复杂,但是,假如要装置的是一个大型专案呢? 举例来说,鸟哥运用预设装置的方法装置了测试机,这部主机就只要 GNOME 这个视窗办理员, 那我假如想要装置 KDE 呢?岂非需求重新装置?固然不需求,透过 yum的软件群组功用即可! 来看看指令先:

                [root@www ~]# yum [群组功用] [软件群组]
                选项与参数:
                   grouplist   :列出一切可运用的‘套件组’,比方 Development Tools 之类的;
                   groupinfo   :前面接 group_name,则可理解该 group 内含的一切套件名;
                   groupinstall:这个好用!可以装置一整组的套件群组,相称的不错用!
                   groupremove :移除某个套件群组;
                
                典范一:查阅现在容器与本机下面的可用与装置过的软件群组有哪些?
                [root@www ~]# yum grouplist
                Installed Groups:
                   Office/Productivity
                   Editors
                   System Tools
                ....(两头省略)....
                Available Groups:
                   Tomboy
                   Cluster Storage
                   Engineering and Scientific
                ....(以下省略)....
                

                你会发明零碎下面的软件大多是群组的方法一口吻来提供装置的!还记全新装置 CentOS 时, 不是可以选择所需求的软件吗?而那些软件不是应用 GNOME/KDE/X Window ... 之类的称号存在吗? 实在那便是软件群组啰!假如你实行上述的指令后,在‘Available Groups’底下应该会看到一个 ‘XFCE-4.4’的软件群组,想晓得那是啥吗?就如许做:

                [root@www ~]# yum groupinfo XFCE-4.4
                Setting up Group Process
                
                Group: XFCE-4.4
                 Description: This group contains the XFCE desktop environment.
                 Mandatory Packages:
                   xfce4-session
                ....(两头省略)....
                 Default Packages:
                   xfce4-websearch-plugin
                ....(两头省略)....
                 Optional Packages:
                   xfce-mcs-manager-devel
                   xfce4-panel-devel
                ....(以下省略)....
                

                你会发明那便是一个桌面情况 (desktop environment) ,也便是一个视窗办理员啦! 至于底下就列出次要的与选择性 (optional) 的软件称号啰!让我们间接装置看看:

                [root@www ~]# yum groupinstall XFCE-4.4
                

                你会发明零碎停止了一大堆软件的装置!那便是啦!整个装置 XFCE 这个视窗介面所需的一切软件! 这个咚咚真黑白常的方便呢!这个功用请肯定要记上去,对你将来装置软件黑白常有协助的喔! ^_^


                小标题的图示全零碎主动晋级

                我们可以手动选择能否需求晋级,那能不克不及让零碎主动晋级,让我们的零碎随时坚持在最新的形态呢? 固然可以啊!透过‘ yum -y update ’来主动晋级,谁人 -y 很紧张,由于可以主动答复 yes 来开端下载与装置! 然后再透过 crontab 的功用来处置即可!假定我每天在台湾工夫 3:00am 网络频宽比拟轻松的时分停止晋级, 你可以如许做的:

                [root@www ~]# vim /etc/crontab
                ....(后面省略并保存设定值)....
                0  3 * * * root /usr/bin/yum -y update
                

                今后你的零碎就会主动晋级啦!很棒吧!别的,你照旧得要剖析登录档与搜集 root 的函件的, 由于假如晋级的是中心软件 (kernel),那么你照旧得要重新开机才会让装置的软件顺遂运作的! 以是照旧得剖析登录档,如有新中心装置,就重新开机,不然就让零碎主动维持在最新较平安的情况吧! 真是轻松痛快的办理啊!


                大标题的图示办理的选择:RPM 照旧 Tarball

                这不断是个风趣的题目:‘假如我要晋级的话,或许是全新装置一个新的软件, 那么该选择 RPM 照旧 Tarball 来装置呢?’,现实上思索的要素许多,不外鸟哥通常是如许发起的:

                1. 优先选择原厂的 RPM 功用:

                  由于原厂释出的软件通常具有一段工夫的维护期,举例来说, RHEL 与 CentOS 每一个版本至多提供五年以上的更新限期。这关于我们的零碎平安性来说,真实黑白常好的选项! 何解?既然 yum 可以主动晋级,加上原厂会继续维护软件更新,那么我们的零碎就可以本人坚持在软件最新的形态, 关于资安来说固然会比拟好一些的! 别的,由于 RPM 与 yum 具有容易装置/移除/晋级等特点,且还提供盘问与验证的功用,装置时更无数位签章的维护, 让你的软件办理变的更轻松自由!因而,固然首选便是应用 RPM 来处置啦!

                2. 选择软件官网释出的 RPM 或许是提供的容器网址:

                  不外,原厂并不会包山包海,因而某些特别软件你的原版厂商并不会提供的!举例来说 CentOS 就没有提供 NTFS 的相干模组。此时你可以自行到官网去查阅,看看有没有提供绝对到你的零碎的 RPM 文件, 假如有提供容器网址,那就更好啦!可以修正 yum 设定档来参加该容器,就可以主动装置与晋级该软件! 你说方不方便啊!

                3. 应用 Tarball 装置特别软件:

                  某些特别用处的软件并不会特殊帮你制造 RPM 文件的,此时发起你也不要贪图自行制造 SRPM 来转成 RPM 啦! 由于你只要戋戋一台主机罢了,如果你要办理相反的 100 部主机,那么将原始码转制造成 RPM 就有代价! 单机版的特别软件,比方学术网络常会用到的 MPICH/PVM 等平行运算函式库,这种软件发起运用 tarball 来装置即可, 不需求特殊去搜索 RPM 啰!

                4. 用 Tarball 测试新版软件:

                  某些时辰你能够需求运用到新版的某个软件,但是原版厂商仅提供旧版软件,举例来说,我们的 CentOS 次要是定位于企业版,因而许多软件的要求是‘稳’而不是‘新’,但你便是需求新软件啊! 然后又担忧新软件装好后发生题目,回不到旧软件,那就惨了!此时你可以用 tarball 装置新软件到 /usr/local 底下, 那么该软件就可以同时装置两个版本在零碎下面了!并且大少数软件装置数种版本时还不会相互搅扰的! 嘿嘿!用来作为测试新软件是很不错的呦!只是你就得要晓得你运用的指令是新版软件照旧旧版软件了!

                以是说,RPM 与 Tarball 各有其优缺陷,不外,假如有 RPM 的话,那么优先权照旧在于 RPM 装置下面,终究办理上比拟便当,但是假如软件的架构差别性太大, 或许是无法处理相依属性的题目,那么与其花大把的工夫与精神在处理属性相依的题目上,还不如间接以 tarball 来装置,轻松又满意!


                大标题的图示重点回忆
                • 为了防止运用者自行编译的困扰,开辟商自行在特定的硬体与作业零碎平台下面事后编译好软件, 并将软件以特别款式封包成文件,提供终端用户间接装置到牢固的作业零碎上,并提供复杂的盘问/装置/移除等流程。 此称为软件办理员。罕见的软件办理员有 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 去装置该软件看看。

                大标题的图示参考材料与延伸阅读

                2002/08/21:第一次完成
                2003/02/11:重新编排与参加 FAQ
                2004/04/11:曾经完成了 Source code 与 Tarball ,开端停止 RPM 与 SRPM 的引见!(需求耗时多日啊!由于又要进虎帐去了!)
                2004/04/20:终于给他熬出来啦!又是过了两个休假时期~啊!给我入伍令、其他免谈!
                2005/10/02:旧版的 SRPM 材料曾经挪动到 此处
                2005/10/03:旧版的针对 Red Hat 与 Mandriva 的版本挪动到 此处
                2005/10/03:将本来客岁的版本改为 FC4 为典范的容貌!
                2009/06/20:本来的针对 FC4 写的旧版文章挪动到此处
                2009/09/18:参加了复杂的情境模仿,也参加了一些关于 yum 的习题喔!



                 
                     
                中国存储网 ChinaStor.com排版整理
                原文作者鸟哥,主页,更多Linux学习材料在线看:Linux零碎办理员手册 - Linux下令大全 - Linux挪用大全- Linux专栏 - 国产Linux