美文网首页
Linux基础篇-第二十二章-软件安装 RPM, SRPM 与

Linux基础篇-第二十二章-软件安装 RPM, SRPM 与

作者: Js_Gavin | 来源:发表于2021-08-31 17:20 被阅读0次

    指令

    RPM

    rpm -ivh package_name :RPM 安装
          -i :install 的意思
          -v :察看更细部的安装信息画面
          -h :以安装信息列显示安装进度
    
    rpm -[U/F]vh :RPM 更新
          -U : 将当前已安装的包升级或新安装到一个新的RPM版本,升级和安装是一样的,区别在于升级要将所有别的版本的包从系统移去
          -F : 这样也升级包, 但只有在系统存在一个更早版本的包时候才使用
    
    RPM 查询
    rpm -qa :<==已安装软件
    rpm -q[licdR] :已安装的软件名称 <==已安装软件
    rpm -qf :存在于系统上面的某个文件名 <==已安装软件
    rpm -qp[licdR] :未安装的某个文件名 <==查阅 RPM 文件
       查询已安装软件的信息:
           -q :仅查询,后面接的软件名称是否有安装;
           -qa :列出所有的,已经安装在本机 Linux 系统上面的所有软件名称;
           -qi :列出该软件的详细信息 (information),包含开发商、版本与说明等;
           -ql :列出该软件所有的文件与目录所在完整文件名 (list);
           -qc :列出该软件的所有配置文件 (找出在 /etc/ 底下的檔名而已)
           -qd :列出该软件的所有说明文件 (找出与 man 有关的文件而已)
           -qR :列出与该软件有关的相依软件所含的文件 (Required 的意思)
           -qf :由后面接的文件名,找出该文件属于哪一个已安装的软件;
           -q --scripts:列出是否含有安装后需要执行的脚本档,可用以 debug !
    
       查询某个 RPM 文件内含有的信息:
           -qp[icdlR]:注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在于找出某个 RPM 文件内的信息,而非已安装的软件信息!注意!
    
    rpm [-V] [-Va] [-Vp] [-Vf ]  :RPM 验证与数字签名
          -V :后面加的是软件名称,若该软件所含的文件被更动过,才会列出来;
          -Va :列出目前系统上面所有可能被更动过的文件;
          -Vp :后面加的是文件名,列出该软件内可能被更动过的文件;
          -Vf :列出某个文件是否被更动过
    
    rpm --import  密钥文件放置的位置 : RPM 安装数字签名
    
    rpm -e  软件的卸载 :RPM 软件卸载
    
    rpm --rebuilddb :RPM 重建数据库
    
    

    利用 yum 进行查询、安装、升级与移除功能

    yum [option] [查询工作项目] [相关参数] :查询功能
       [option]:主要的选项,包括有:
          -y :当 yum 要等待用户输入时,这个选项可以自动提供 yes 的响应;
          --installroot=/some/path :将该软件安装在 /some/path 而不使用默认路径
    
       [查询工作项目] [相关参数]:这方面的参数有:
          search :搜寻某个软件名称或者是描述 (description) 的重要关键字;
          list :列出目前 yum 所管理的所有的软件名称与版本,有点类似 rpm -qa;
          info :同上,不过有点类似 rpm -qai 的执行结果;
          provides:从文件去搜寻软件!类似 rpm -qf 的功能!
    
    yum [option] [安装与升级的工作项目] [相关参数] :安装/升级功能
          install :后面接要安装的软件!
          update :后面接要升级的软件,若要整个系统都升级,就直接 update 即可
    
    yum [remove] 软件 :移除功能
    
    yum clean [packages|headers|all] :删除已下载过的所有软件库的相关数据
          packages:将已下载的软件文件删除
          headers :将下载的软件文件头删除
          all :将所有软件库数据都删除!
    
    yum [群组功能] [软件群组] :yum 的软件群组功能
          grouplist :列出所有可使用的『软件群组组』,例如 Development Tools 之类的;
          groupinfo :后面接 group_name,则可了解该 group 内含的所有软件名;
          groupinstall:这个好用!可以安装一整组的软件群组,相当的不错用!
          groupremove :移除某个软件群组
    
    

    SRPM 的编译指令 (-ba/-bb)

    rpmbuild -ba ntp.spec :编译并同时产生 RPM 与 SRPM 文件
    
    rpmbuild -bb ntp.spec :仅编译成 RPM 文件
    

    软件管理员简介

    在前一章我们提到以原始码的方式来安装软件,也就是利用厂商释出的 Tarball 来进行软件的安装。不过,你应该很容易发现,那就是每次安装软件都需要侦测操作系统与环境、设定编译参数、实际的编译、 最后还要依据个人喜好的方式来安装软件到定位。这过程是真的很麻烦

    如果我的 Linux 系统与厂商的系统一模一样,那么在厂商的系统上面编译出来的执行档, 自然也就可以在我的系统上面跑!也就是说,厂商先在他们的系统上面编译好了我们用户所需要的软件, 然后将这个编译好的可执行的软件直接释出给用户来安装,如此一来,由于我们本来就使用厂商的 Linux distribution ,所以当然系统 (硬件与操作系统) 是一样的,那么使用厂商提供的编译过的可执行文件就没有问题!说的比较白话一些,那就是利用类似 Windows 的安装方式,由程序开发者直接在已知的系统上面编译好,再将该程序直接给用户来安装

    Linux 界的两大主流: RPM 与 DPKG

    如同刚刚谈过的方式,Linux 开发商先在固定的硬件平台与操作系统平台上面将需要安装或升级的软件编译好, 然后将这个软件的所有相关文件打包成为一个特殊格式的文件,在这个软件文件内还包含了预先侦测系统与相依软件的脚本, 并提供记载该软件提供的所有文件信息等。最终将这个软件文件释出。客户端取得这个文件后,只要透过特定的指令来安装, 那么该软件文件就会依照内部的脚本来侦测相依的前驱软件是否存在,若安装的环境符合需求,那就会开始安装, 安装完成后还会将该软件的信息写入软件管理机制中,以达成未来可以进行升级、移除等动作。

    目前在 Linux 界软件安装方式最常见的有两种,分别是:

    1. dpkg
    2. RPM

    dpkg/rpm 这些机制或多或少都会有软件属性相依的问题,例如安装 A 需要先安装 B 与 C ,而安装 B 则需要安装 D 与 E 时,那么当你要安装 A ,透过相依属性列表,管理机制自动去取得 B, C, D, E 来同时安装

    image.png

    什么是 RPM 与 SRPM

    RPM

    1. 由于已经编译完成并且打包完毕,所以软件传输与安装上很方便 (不需要再重新编译);

    2. 由于软件的信息都已经记录在 Linux 主机的数据库上,很方便查询、升级与反安装

    3. 软件文件安装的环境必须与打包时的环境需求一致或相当;

    4. 需要满足软件的相依属性需求;

    5. 反安装时需要特别小心,最底层的软件不可先移除,否则可能造成整个系统的问题!

    SRPM

    如果我真的想要安装其他 distributions 提供的好用的 RPM 软件文件时,还有 SRPM 这个东西!SRPM 是什么呢?顾名思义,他是 Source RPM 的意思,也就是这个 RPM 文件里面含有原始码!特别注意的是,这个 SRPM 所提供的软件内容『并没有经过编译』, 它提供的是原始码!

    通常 SRPM 的扩展名是以 ***.src.rpm 这种格式来命名的。不过,既然 SRPM 提供的是原始码,那么为什么我们不使用 Tarball 直接来安装就好了?这是因为 SRPM 虽然内容是原始码,但是他仍然含有该软件所需要的相依性软件说明、以及所有 RPM 文件所提供的数据。同时,他与 RPM 不同的是,他也提供了参数配置文件 (就是 configure 与 makefile)。所以,如果我们下载的是 SRPM ,那么要安装该软件时,你就必须要:

    1. 先将该软件以 RPM 管理的方式编译,此时 SRPM 会被编译成为 RPM 文件;
    2. 然后将编译完成的 RPM 文件安装到 Linux 系统当中

    怪了,怎么 SRPM 这么麻烦!还要重新编译一次,那么我们直接使用 RPM 来安装不就好了?通常一个软件在释出的时候,都会同时释出该软件的 RPM 与 SRPM 。我们现在知道 RPM 文件必须要在相同的 Linux 环境下才能够安装,而 SRPM 既然是原始码的格式,自然我们就可以透过修改 SRPM 内的参数配置文件,然后重新编译产生能适合我们 Linux 环境的 RPM 文件,如此一来,不就可以将该软件安装到我们的系统当中,而不必与原作者打包的 Linux 环境相同了?这就是 SRPM 的用处了

    image.png

    RPM 的优点

    1. RPM 内含已经编译过的程序与配置文件等数据,可以让用户免除重新编译的困扰;
    2. RPM 在被安装之前,会先检查系统的硬盘容量、操作系统版本等,可避免文件被错误安装;
    3. RPM 文件本身提供软件版本信息、相依属性软件名称、软件用途说明、软件所含文件等信息,便于了解软件;
    4. RPM 管理的方式使用数据库记录 RPM 文件的相关参数,便于升级、移除、查询与验证。

    在安装的过程中,RPM 会去检验一下数据库里面是否已经存在相关的软件了, 如果数据库显示不存在,那么这个 RPM 文件『预设』就不能安装。这个就是 RPM 类型的文件最为人所诟病的『软件的属性相依』问题。

    RPM 属性相依的克服方式: YUM 在线升级

    CentOS (1)先将释出的软件放置到 YUM 服务器内,然后(2)分析这些软件的相依属性问题,将软件内的记录信息写下来 (header)。 然后再将这些信息分析后记录成软件相关性的列表。这些列表数据与软件所在的本机或网络位置可以称呼为容器或软件仓库或软件库 (repository)。 当客户端有软件安装的需求时,客户端主机会主动的向网络上面的 yum 服务器的软件库网址下载清单列表, 然后透过列表列表的数据与本机 RPM 数据库已存在的软件数据相比较,就能够一口气安装所有需要的具有相依属性的软件了。 整个流程可以简单的如下图说明:

    image.png

    RPM 默认安装的路径

    若环境检查合格了,那么 RPM 文件就开始被安装到你的 Linux 系统上。安装完毕后,该软件相关的信息就会被写入 /var/lib/rpm/ 目录下的数据库文件中了。 上面这个目录内的数据很重要!因为未来如果我们有任何软件升级的需求,版本之间的比较就是来自于这个数据库, 而如果你想要查询系统已经安装的软件,也是从这里查询的!同时,目前的 RPM 也提供数字签名信息, 这些数字签名也是在这个目录内记录的!所以说,这个目录得要注意不要被删除了

    那么软件内的文件到底是放置到哪里去,如下:

    image.png

    RPM 安装 (install)

    因为安装软件是 root 的工作,因此你得要是 root 的身份才能够操作 rpm 这指令的

    另外,如果我们在安装的过程当中发现问题,或者已经知道会发生的问题, 而还是『执意』要安装这个软件时,可以使用如下的参数『强制』安装上去:

    image.png

    一般来说,rpm 的安装选项与参数大约就是这些了。建议直接使用 -ivh 就好了, 如果安装的过程中发现问题,一个一个去将问题找出来,尽量不要使用『 暴力安装法 』,就是透过 --force 去强制安装! 因为可能会发生很多不可预期的问题!除非你很清楚的知道使用上面的参数后,安装的结果是你预期的。

    RPM 升级与更新 (upgrade/freshen)

    image.png

    如果你想要大量的升级系统旧版本的软件时,使用 -Fvh 则是比较好的作法,因为没有安装的软件才不会被不小心安装进系统中。但是需要注意的是,如果你使用的是 -Fvh ,偏偏你的机器上尚无这一个软件,那么很抱歉,该软件并不会被安装在你的 Linux 主机上面,所以请重新以 ivh 来安装。

    RPM 查询 (query)

    在查询的部分,所有的参数之前都需要加上 -q 才是所谓的查询!查询主要分为两部分, 一个是查已安装到系统上面的的软件信息,这部份的信息都是由 /var/lib/rpm/ 所提供。另一个则是查某个 rpm 文件内容,等于是由 RPM 文件内找出一些要写入数据库内的信息就是了,这部份就得要使用 -qp (p 是 package 的意思)

    RPM 验证与数字签名 (Verify/signature)

    请修改 /etc/logrotate.conf 内的 rotate 变成 5

    image.png

    怎么知道到底我的文件被更动过的内容是什么。你会发现在档名之前有个 c ,然后就是一堆奇怪的文字了。那个 c 代表的是 configuration , 就是配置文件的意思。至于最前面的几个信息是:

    1. S :(file Size differs) 文件的容量大小是否被改变
    2. M :(Mode differs) 文件的类型或文件的属性 (rwx) 是否被改变?如是否可执行等参数已被改变
    3. 5 :(MD5 sum differs) MD5 这一种指纹码的内容已经不同
    4. D :(Device major/minor number mis-match) 装置的主/次代码已经改变
    5. L :(readLink(2) path mis-match) Link 路径已被改变
    6. U :(User ownership differs) 文件的所属人已被改变
    7. G :(Group ownership differs) 文件的所属群组已被改变
    8. T :(mTime differs) 文件的建立时间已被改变
    9. P :(caPabilities differ) 功能已经被改变

    所以,如果当一个配置文件所有的信息都被更动过,那么他的显示就会是:

    image.png

    至于那个 c 代表的是『 Config file 』的意思,也就是文件的类型,文件类型有底下这几类:

    1. c :配置文件 (config file)
    2. d :文件数据文件 (documentation)
    3. g :鬼文件~通常是该文件不被某个软件所包含,较少发生!(ghost file)
    4. l :许可证文件 (license file)
    5. r :自述文件 (read me)

    数字签名

    验证只能验证软件内的信息与 /var/lib/rpm/ 里面的数据库信息而已,如果该软件文件所提供的数据本身就有问题,那你使用验证的手段也无法确定该软件的正确性。 那如何解决呢?在 Tarball 与文件的验证方面,我们可以使用前一章谈到的 md5 指纹码来检查, 不过,连指纹码也可能会被窜改的!我们可以透过数字签名来检验软件的来源的!

    就像你自己的签名一样,我们的软件开发商原厂所推出的软件也会有一个厂商自己的签章系统! 只是这个签章被数字化了而已。厂商可以数字签名系统产生一个专属于该软件的签章,并将该签章的公钥 (public key) 释出。 当你要安装一个 RPM 文件时:

    1. 首先你必须要先安装原厂释出的公钥文件;
    2. 实际安装原厂的 RPM 软件时,rpm 指令会去读取 RPM 文件的签章信息,与本机系统内的签章信息比对,
    3. 若签章相同则予以安装,若找不到相关的签章信息时,则给予警告并且停止安装

    RPM 反安装与重建数据库 (erase/rebuilddb)

    反安装就是将软件卸载!要注意的是,『解安装的过程一定要由最上层往下解除』,以 rp-pppoe 为例,这一个软件主要是依据 ppp 这个软件来安装的,所以当你要解除 ppp 的时候,就必须要先解除 rp-pppoe 才行!否则就会发生结构上的问题

    移除的选项很简单,就透过 -e 即可移除。不过,很常发生软件属性相依导致无法移除某些软件的问题! 我们以底下的例子来说明:

    image.png

    pam 所提供的函式库是让非常多其他软件使用的,因此你不能移除 pam ,除非将其他相依软件一口气也全部移除!你当然也能加 --nodeps 来强制移除, 不过,如此一来所有会用到 pam 函式库的软件,都将成为无法运作的程序。由于 pam-devel 是依附于 pam 的开发工具,你可以单独安装与单独移除

    由于 RPM 文件常常会安装/移除/升级等,某些动作或许可能会导致 RPM 数据库 /var/lib/rpm/ 内的文件破损。果真如此的话,那你该如何是好?别担心,我们可以使用 --rebuilddb 这个选项来重建一下数据库! 作法如下:

    image.png

    YUM 在线升级机制

    yum 的配置文件

    image.png

    如上所示,仅列出 base 这个软件库内容而已,其他的软件库内容请自行查阅!上面的数据需要注意的是:

    1. [base]:代表软件库的名字!中括号一定要存在,里面的名称则可以随意取。但是不能有两个相同的软件库名称, 否则 yum 会不晓得该到哪里去找软件库相关软件列表文件。

    2. name:只是说明一下这个软件库的意义而已,重要性不高!

    3. mirrorlist=:列出这个软件库可以使用的映射站台,如果不想使用,可以批注到这行;

    4. baseurl=:这个最重要,因为后面接的就是软件库的实际网址! mirrorlist 是由 yum 程序自行去捉映像站台, baseurl 则是指定固定的一个软件库网址!我们刚刚找到的网址放到这里来!

    5. enable=1:就是让这个软件库被启动。如果不想启动可以使用 enable=0!

    6. gpgcheck=1:还记得 RPM 的数字签名吗?这就是指定是否需要查阅 RPM 文件内的数字签名!

    7. gpgkey=:就是数字签名的公钥文件所在位置!使用默认值即可

    修改软件库产生的问题与解决之道

    由于我们是修改系统默认的配置文件,事实上,我们应该要在 /etc/yum.repos.d/ 底下新建一个文件,该扩展名必须是 .repo 才行!但因为我们使用的是指定特定的映像站台,而不是其他软件开发商提供的软件库, 因此才修改系统默认配置文件。但是可能由于使用的软件库版本有新旧之分,你得要知道, yum 会先下载软件库的清单到本机的 /var/cache/yum 里面去!那我们修改了网址却没有修改软件库名称 (中括号内的文字), 可能就会造成本机的列表与 yum 服务器的列表不同步,此时就会出现无法更新的问题了

    那怎么办?很简单,就清除掉本机上面的旧数据即可!需要手动处理吗?不需要的, 透过 yum 的 clean 项目来处理即可!

    yum 的软件群组功能

    系统上面的软件大多是群组的方式一口气来提供安装的!还记全新安装 CentOS 时, 不是可以选择所需要的软件吗?而那些软件不是利用 GNOME/KDE/X Window ... 之类的名称存在吗?其实那就是软件群组

    正常情况下系统是会帮你安装好各项软件的。只是伤脑筋的是,有些软件是『可选择的』!而不是『主要的 (mandatory)』, 因此预设情况下,有些软件不会帮你安装!如果你想要安装可选软件,可以使用 yum install atlas fftw .. 一个一个写进去安装~如果想要让 groupinstall 预设安装好所有的 optional 软件呢?那就得要修改配置文件!更改选 groupinstall 选择的软件项目即可!如下所示:

    image.png

    EPEL/ELRepo 外挂软件以及自定义配置文件

    在 Fedora 基金会里面发展了一个外加软件计划 (Extra Packages for Enterprise Linux, EPEL),这个计划主要是针对 Red Hat Enterprise Linux 的版本来开发的, 刚刚好 CentOS 也是针对 RHEL 的版本来处理的嘛!所以也就能够支持该软件库的相关软件相依环境了。这个计划的主
    网站在底下网页:
    https://fedoraproject.org/wiki/EPEL

    而我们的 CentOS 7 主要可以使用的软件仓库网址为:
    https://dl.fedoraproject.org/pub/epel/7/x86_64/

    根据上面的说明,来玩一玩底下这个模拟案例看看:
    问:
    我的系统上面想要透过上述的 CentOS 7 的 EPEL 计划来安装 netcdf 以及 R 这两套软件,该如何处理?


    1、首先,你的系统应该要针对 epel 进行 yum 的配置文件处理,处理方式如下:

    [root@study ~]$ vim /etc/yum.repos.d/epel.repo
    [epel]
    name = epel packages
    baseurl = https://dl.fedoraproject.org/pub/epel/7/x86_64/
    gpgcheck = 0
    enabled = 0
    

    故意不要启动这个软件仓库,只是未来有需要的时候才进行安装,预设不要去找这个软件库!

    2、接下来使用这个软件库来进行安装 netcdf 与 R 的行为

    [root@study ~]$ yum --enablerepo=epel install netcdf R
    

    这样就可以安装起来了!未来你没有加上 --enablerepo=epel 时,这个 EPEL 的软件并不会更新!

    使用本机的原版光盘

    万一你的主机并没有网络,但是你却有很多软件安装的需求~假设你的系统也都还没有任何升级的动作过, 这个时候可以用本机的光盘来作为主要的软件来源。很简单,将你的光盘挂载到某个目录,我们这里还是继续假设在 /mnt 好了,然后设定如下的 yum 配置文件:

    image.png

    全系统自动升级

    image.png

    你还是得要分析登录档与收集 root 的信件的, 因为如果升级的是核心软件 (kernel),那么你还是得要重新启动才会让安装的软件顺利运作的! 所以还是得分析登录档,若有新核心安装,就重新启动,否则就让系统自动维持在最新较安全的环境

    SRPM 的使用 : rpmbuild (Optional)

    假如今天我们由网络上面下载了一个 SRPM 的文件,该如何安装他?又,如果我想要修改这个 SRPM 里面原始码的相关设定值,又该如何订正与重新编译呢? 此外,最需要注意的是,新版的 rpm 已经将 RPM 与 SRPM 的指令分开了,SRPM 使用的是 rpmbuild 这个指令,而不是 rpm

    利用默认值安装 SRPM 文件 (--rebuid/--recompile)

    假设我下载了一个 SRPM 的文件,又不想要修订这个文件内的原始码与相关的设定值, 那么我可以直接编译并安装吗?当然可以!利用 rpmbuild 配合选项即可。选项主要有底下两个:

    image.png

    不过,要注意的是,这两个选项都没有修改过 SRPM 内的设定值,仅是透过再次编译来产生 RPM 可安装软件文件而已

    一般来说,如果你有需要用到 SRPM 的文件,大部分的原因就是...你需要重新修改里面的某些设定,让软件加入某些特殊功能等等的。

    SRPM 使用的路径与需要的软件

    RPM 既然含有 source code ,那么其中必定有配置文件,所以首先我们必需要知道,这个 SRPM 在进行编译的时候会使用到哪些目录呢?这样一来才能够来修改。从 CentOS 6.x 开始 (当然包含我们的 CentOS 7.x ),因为每个用户应该都有能力自己安装自己的软件,因此 SRPM 安装、设定、编译、最终结果所使用的目录都与操作者的家目录有关~假设你用 root 的身份来进行 SRPM 的操作, 那么你应该就会使用到下列的目录:

    image.png

    配置文件的主要内容 (*.spec)

    要注意到的是 ntp.sepc 这个文件,这是主要的将 SRPM 编译成 RPM 的配置文件,他的基本规则可以这样看:

    1. 整个文件的开头以 Summary 为开始,这部份的设定都是最基础的说明内容;
    2. 然后每个不同的段落之间,都以 % 来做为开头,例如 %prep 与 %install 等;

    系统整体信息方面:

    image.png

    上面几个资料通常都必需要写!但是如果你的软件没有相依属性的关系时,那么就可以不需要那个 Requires! 根据上面的设定,最终的档名就会是『{Name}-{Version}-{Release}.{Arch}.rpm』的样式

    %description:

    将你的软件做一个简短的说明!这个也是必需要的。还记得使用『 rpm -qi 软件名称 』会出现一些基础的说明吗? 上面这些东西包括 Description 就是在显示这些重要信息的!所以,这里记得要详加解释!

    %prep

    pre 这个关键词原本就有『在...之前』的意思,因此这个项目在这里指的就是『尚未进行设定或安装之前,你要编译完成的 RPM 帮你事先做的事情』,就是 prepare 的简写!那么他的工作事项主要有:

    1. 进行软件的补丁 (patch) 等相关工作;
    2. 寻找软件所需要的目录是否已经存在?确认用的!
    3. 事先建立你的软件所需要的目录,或者事先需要进行的任务;
    4. 如果待安装的 Linux 系统内已经有安装的时候可能会被覆盖掉的文件时,那么就必需要进行备份(backup)的工作了!
    %build:

    build 就是建立!所以当然,这个段落就是在谈怎么 make 编译成为可执行的程序! 你会发现在此部分的程序代码方面,就是 ./configure, make 等项目!一般来说,如果你会使用 SRPM 来进行重新编译的行为, 通常就是要重新 ./configure 并给予新的参数设定!于是这部份就可能会修改到!

    %install:

    编译完成 (build) 之后,就是要安装!安装就是写在这里,也就是类似 Tarball 里面的 make install 的意思!

    %files:

    这个软件安装的文件都需要写到这里来,当然包括了『目录』!所以连同目录请一起写到这个段落当中!以备查验!此外,你也可以指定每个文件的类型,包括文件档 (%doc 后面接的) 与配置文件 (%config 后面接的) 等等。

    %changelog:

    这个项目主要则是在记录这个软件曾经的更新纪录!星号 (*) 后面应该要以时间,修改者, email
    与软件版本来作为说明, 减号 (-) 后面则是你要作的详细说明

    SRPM 的编译指令 (-ba/-bb)

    1. 先进入到 BUILD 这个目录中,亦即是: /root/rpmbuild/BUILD 这个目录;

    2. 依照 *.spec 文件内的 Name 与 Version 定义出工作的目录名称,以我们上面的例子为例,那么系统就会在 BUILD 目录中先删除 ntp-4.2.6p5 的目录,再重新建立一个 ntp-4.2.6p5 的目录,并进入该目录;

    3. 在新建的目录里面,针对 SOURCES 目录下的来源文件,也就是 *.spec 里面的 Source 设定的那个文件,以 tar 进行解压缩,以我们这个例子来说,则会在 /root/rpmbuild/BUILD/ntp-4.2.6p5 当中,将 /root/rpmbuild/SOURCES/ntp-* 等等多个原始码文件进行解压缩!

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

    5. 最后将完成打包的文件给他放置到该放置的地方去,如果你的系统是 x86_64 的话,那么最后编译成功的 *.x86_64.rpm 文件就会被放置在 /root/rpmbuild/RPMS/x86_64 里面!如果是 noarch 那么自然就是 /root/rpmbuild/RPMS/noarch 目录下!

    总结:

    1. 为了避免使用者自行编译的困扰,开发商自行在特定的硬件与操作系统平台上面预先编译好软件, 并将软件以特殊格式封包成文件,提供终端用户直接安装到固定的操作系统上,并提供简单的查询/安装/移除等流程。 此称为软件管理员。常见的软件管理员有 RPM 与 DPKG 两大主流。

    2. RPM 的全名是 RedHat Package Manager,原本是由 Red Hat 公司所发展的,流传甚广;

    3. RPM 类型的软件中,所含有的软件是经过编译后的 binary program ,所以可以直接安装在用户端的系统上,不过,也由于如此,所以 RPM 对于安装者的环境要求相当严格;

    4. RPM 除了将软件安装至用户的系统上之外,还会将该软件的版本、名称、文件与目录配置、系统需求等等均记录于数据库 (/var/lib/rpm) 当中,方便未来的查询与升级、移除;

    5. RPM 可针对不同的硬件等级来加以编译,制作出来的文件可于扩展名 (i386, i586, i686, x86_64, noarch) 来分辨;

    6. RPM 最大的问题为软件之间的相依性问题;

    7. SRPM 为 Source RPM ,内含的文件为 Source code 而非为 binary file ,所以安装 SRPM 时还需要经过 compile ,不过,SRPM 最大的优点就是可以让使用者自行修改设定参数 (makefile/configure 的参数) ,以符合使用者自己的 Linux 环境;

    8. RPM 软件的属性相依问题,已经可以藉由 yum 或者是 APT 等方式加以克服。 CentOS 使用的就是 yum
      机制。

    9. yum 服务器提供多个不同的软件库放置个别的软件,以提供客户端分别管理软件类别。

    相关文章

      网友评论

          本文标题:Linux基础篇-第二十二章-软件安装 RPM, SRPM 与

          本文链接:https://www.haomeiwen.com/subject/iezpiltx.html