Linux软件管理(rpm,yum)

Linux的应用程序安装提供了两中格式的软件包:一种是软件开发者直接提供的源码包;另一种是发行版厂商提供事先编译好打包的软件包;用户需要根据需要来选择何种方式安装软件,作为系统管理运维人员,要想合理应用,必须熟悉这两者之间的内在联系以及各自的特性和差异;

*软件包管理工具)

  — RPM软件包管理工具

 — YUM软件包前端管理工具

软件包管理工具:

早先用户安装软件是非常痛苦的,只能编译安装,尤其对于一个不是软件开发人员,不熟悉编译过程的人,要想编译安装软件几乎没有办法做到,不过后来有大量的发行版厂商,根据他们自己对用户需求的理解,事先通过软件包管理器在一个通用平台上(比较老的硬件平台架构,因为软件向下兼容)添加一些特性进行编译,然后打包成自己特定的软件包格式,要想灵活应用,必须使用与之对应的软件包管理工具,每个发行版的厂商都有自己对软件组织打包的理解方式,虽然厂商之间的管理工具不同,但是要实现的目的和功能基本上都是一致的,这包含他们必须能够实现软件包的安装、升级、卸载、查询、校验等功能;目前主流的Linux发行版redhat系使用的是自己rpm工具,debian系使用的是dpt工具,虽然都是软件包管理工具,但是理解层次深度还是有所差别的,经过多年相互借鉴学习,为了适应管理更加合理,redhat做出了更多调整进去,事实现在的rpm更是Linux系统中软件包管理模式的一种规范;下面也主要介绍它.


软件包获取途径:

    首先要知道软件包获取的途径,跟对一般信息的获取不同,首先要找信任的官方机构或网站;确保程序包是安全可信任的,没有内置其他不正当的后门或恶意程序,作为系统运维人员,系统安全必须考虑到位;下面介绍一下比较值得信任的获取途径:

   (1)系统发行版安装光盘;

 

   (2)官方镜像站点;

      http://mirrors.aliyum.com

      http://mirrors.sohu.com

      http://mirrors.163.com

   (3)项目官方站点:

      apache

   (4)第三方组织:

      EPEL

   (5)搜索站点:

      http://rpm.pbone.net

      http://pkgs.org

      http://rpmfind.net

RPM工具功能详解:

    rpm 工作原理:

    rpm工具使用rpm命令对软件包进行管理,同时在内部维护一个叫PMS(Package Management Systme)软件包管理系统;rpm工具借助数据库,对rpm软件进行管理;主要记录信息如下:

    a:Linux系统安装了什么软件包;

    b:每个软件包安装后生产了什么文件在系统中;

    c:每个安装后的软件包版本

    b:包之间的依赖关系

  

   rpm软件包格式:

      一般rpm分为主包和辅助包;带devel字符串的开发包、带utils字符串的工具包等辅助包,通常实现功能较多软件程序包会有较多的辅助包;

     一般程序包名称格式如下:

     软件名词-软件版本发行号-软件打包发行号-支持的平台架构-以“.”rpm结尾

     这里主要介绍一下架构:

       一般分为运行在32位CPU系统上的x86系列,和运行在64位CPU系统上的x64位系列,同时64位的平台兼容x86,程序有向下兼容的特性,      需要注意:程序中的高级特性依赖较新的硬件,如果运行在较老的硬件平台架构上,高级功能特性有可能无法实现;noarch字符串表示跟平台无关,不依赖;

    

     rpm包内文件类型:

     rpm的元数据,如名称,版本,依赖,描述等

     rpm程序文件

     rpm脚本:一般有如下脚本:

     1.preinstall:安装之前;

     2.postinstall:安装之后;

     3.preuinstall:卸载之前;

     4.postuninstall:卸载之后

     

 

   (1)安装:

      语法格式:

          rpm -i[option] PACKAGE_FILE

      常用选项:

        -i:表示install安装

        -v -vv:表示显示安装过程,后者显示更加详细;

        -h:以#号显示进度条格式;

        –nodeps:忽略依赖关系

        –force:强制动作,注意安装成功后可能不能运行;

        –test:测试安装,作为测试检查

        –nosignature:不检查签名就是来源合法性;

        –nodigest:不检查包完整性;MD5头;

     注意:根据Linux的哲学之一,每个程序只做好一件事,单一小程序组成完成复杂任务;这样结果就导致每个程序的要想运行,有较强的依赖性,有时A程序依赖B,B又依赖C,这样要想安装A必须先安装最底层依赖的C,如果强制或忽略依赖关系,将会导致程序无法运行,安装也没有意义;

   

    (2)升级:

       语法格式:

          rpm -U|F[optIon] PACAGE_FILE

       常用选项:

         -U:表示不管软件事先是否存在都要升级,存在就升级,不存在就安装;

         -F:表示软件软件存在就升级,如何不存在,就放弃升级;

         –oldpackage:降级,如果升级之后发现有Bug或者兼容性问题,可以使用此选项回滚到升级前的版本;

         –force:强制动作,注意安装成功后可能不能运行;

         –replacepkgs:注意不能替换配置文件;

       注意

         (1)不要对kernel做升级操作;支持多kernel并存;可以直接安装;

         (2)修改过的配置升级不会覆盖,升级同新文件,会重命名为file.rpmnew

        

     (3)卸载:

        语法格式:

           rpm -e[option] PACKAGE-NAME

        常用选项:

           -vh:显示过程

           –nodeps:忽略依赖

           –noscripts:忽略脚本

           –allmatches:卸载所有匹配指定名称的程序包,也就是说卸载软件名称中包含此名称的所有包;

           –test:测试检查卸载,不是真卸载

        注意:

          卸载会检查依赖关系,如果卸载的软件被其他程序依赖,请谨慎卸载,否则导致其依赖程序无法运行;

        

          

     (4)查询:

        语法格式:

           rpm -q[option] [PACKAGE-NAME|PACKAGE_FILE]

        常用选项:

           -qa:查询系统所有已安装的程序包;

           -qf /path/to/file:查询文件是由那个程序包生成;

           -ql:查询程序生成的文件:

           -qi:查询程序属性信息;

           -qc:查询程序配置文件;

           -qd:查询程序提供的文档

           -q –whatprovides CAPABILITY(功能):查询这种CAPABILITY由那个程序提供;

           -q –whatrequires CAPABILITY:查询这种CAPABILITY被哪些程序包依赖;

           -q –scripts:查询程序包生成的脚本;

           -q –changelog:查询软件历史

        查询未安装的软件包信息,需要加-p选项跟上面的选项结合使用,后面的参数必须是PACKAGE_FILE;

           列如:

           -qpi:查询指定PACKAGE_FILE的程序属性信息;

           …

      (5)校验:

        工作原理:校验检查的是软件包来源的合法性和完整性,要想对它们校验检查,必须要有校验机制,这种机制是根据签名和加密实现的,通常发行版的光盘中会有一个包含所有软件特征码的文件,特征码是根据软件包特征提取的,通过单项加密实现的用来校验软件包的完整性,如果软件包在获取途中被修改,在系统中再次提取软件包特征码,跟系统已有的特征码文件比对,不同则判断被攥该,修改过的软件包,根据相同的加密算法提取的特征肯定不同;来源合法性是根据签名实现的;特征码文件被称为公钥;校验是由校验程序完成的,默认rpm命令安装时会调用;

      a.公钥获取:

        官方网站

        系统光盘

       系统配置文件中,这是系统在安装时从安装光盘复制进去的

       系统公钥位置:/etc/pik/rpm-gpg/RPM-GPG-KEY-CentOS-7

      b.导入公钥:

       rpm –import /path/to/pub.key

       

     校验软件:

      rpm -V PACKAGE-NAME:校验安装文件自安装后是否被修改过,根据PMS记录信息判断;

      rpm -K PACKAGE_FILE:对指定未安装的软件包进行手工校验;

    (6)RPM数据库维护:

       默认数据库目录位置:/var/lib/rpm

       语法格式:

       rpm –initdb :初始化数据库

       rpm –rebuilddb :重新构建

       –dbpath=/path/ :指定数据库创建位置;

2.yum软件包管理:

   前面的rpm安装和卸载都需要检查依赖关系,尤其是对依赖关系较多较复杂的软件进行管理,是很难快速部署管理的;有没有一种软件管理工具能自自行解决依赖关系呢?yum就可以自动解决依赖关系,实现快速部署;

   Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包;

   yum工作原理:yum工作原理遵循C/S架构(客户端/服务器);在客户端仅需安装yum客户端软件,并且配置yum配置文件指向的yum服务器端地址,为了故障冗余,可以指向多个yum源;在yum服务器端需要创建yum仓库,作为放置所有rpm软件的仓库,同时创建一个名为repodata数据库目录文件,用不同的文件分门别类记录仓库内所有软件包信息,通过网络服务把资源地址发布出去;当客户端yum请求软件包时,同时会先把yum服务器端数据库记录文件请求下载到本地,经过校验信息比对在判断操作是否可行;yum源数据库保存在yum客户端的/var/cache/yum中,每次yum启动都会通过校验码与yum服务器同步更新列表信息。

   (1)yum客户端服务配置:

      a.首先检查yum程序包是否安装,安装好yum工具才能使用yum工具;

      b.确保rpm程序和rpm的数据库记录是完整正常的;yum软件管理依赖rpm管理工具;

      c.yum服务主配置文件配置选项说明:

      d.yum服务的主配置文件在系统/etc/yum.conf

      

[root@xia7 ~]# vim /etc/yum.conf

[main]                             ###仓库ID,在系统中必须全局唯一

cachedir=/var/cache/yum/$basearch/$releasever  ###(yum缓存目录,用来缓存请求的yum服务端数据,包括rpm软件和yum源数据库文件)

keepcache=0                          ###安装完成后是否清空yum缓存,0表示不保留,1表示清空

debuglevel=2                         ###Debug 信息输出等级,范围为0-10,缺省为2

logfile=/var/log/yum.log                 ###yum日志文件位置,根据日志查询过去的操作

exactarch=1             ### 是否安装跟根系统架构平台匹配的软件,1表示只安装匹配的,0表示两者不检查;                   

obsoletes=1             ### 是否允许更新老的RPM包,1表示允许,0表示进制更新老的软件包

gpgcheck=1              ###安装时验检查包的合法性和完整性,1表示开启,0表示不检查

plugins=1               ###是否如允许使用插件,1表示允许使用,0表示禁用插件

installonly_limit=5        ###允许保留多少个内核包

bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_repor

t_page.php?category=yum

distroverpkg=centos-release

       

补充选项:

exclude=PACKAGE_NAME   ####屏蔽不想更新的软件包,可以使用通配符,多个软件包之间用空格分割

enabled=1          ###是否启用当前的仓库配置指向;1表示开启,0表示禁用;

gpgkey=/file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ###如果启用了gpg校验机制,需要指定校验的文件位置;

baseurl=http://10.1.0.1/cobbler/ks_mirror/7/###yum仓库的位置可以指定多个,当无法访问时才选择下一个;

cost=         ###开销,默认是1000,开销越大,优先使用级越低。

补充说明:baseurl=  有三种提供仓库资源获取方式:

       a:http://    #htt服务

       b:ftp://     #ftp服务

       c:file:///   本地yum源仓库,或者是安装光盘,注意事先需要挂载光盘;

  

       yum配置文件中的路径变量意义:

  

       $releasever:当前系统的发行版本的主版本号;

       $arch:平台

       $basearch:基础平台;

       YUM-$YUM9

       d.自定义配置yum配置文件:在/etc/yum.repos.d/YUM-NAMA.repo 注意必须是以“.repo”结尾的文件;

       

[root@xia7 ~]# vim /etc/yum.repos.d/local.repo 

[base]

name=centos 7

baseurl=http://10.1.0.1/cobbler/ks_mirror/7/  ###配置http服务提供的yum源仓库

gpgcheck=1

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[local]

name=local centos 7

baseurl=file:///media/cdrom   ####配置本地光盘作为yum源仓库

enabled=1

gpgcheck=0

  (2)yum服务端仓库创建:

    a:首先检查createrepo创建yum仓库程序是否安装;

    b:创建仓库目录,并且放置rpm软件包在此目录下;

    c:使用createrepo命令在仓库目录中创建仓库生成yum数据库目录repodb

  

  (3)yum命令工具使用:

     语法格式:

       yum [option] [PACKAGE-NAME]…

     常用选项:

        查询仓库列表:

            repolist [all|deabled|disable]

        显示软件包:

            list [all|glob_expl]

            list [available |installed|updates]

        安装程序包

            install package1 package2…

        升级程序包

            update package1 package2…

        检查升级包:

            check-update

        卸载程序包:

            remove package1 package2…

        查询程序包information

            info […]

        查看指定的某文件是由那个程序所提供;

            provides|whatprovides feature1

        清理本地缓存

            clean package |metadate |all

        构建缓存:

            makecache

        搜索关键字名软件包

            search string1 string2…

        重新安装程序包

            reinstall package1…

        降级程序包:

            downgrade package

        查看指定包所依赖的capability

            deplist package

        查询安装程序事物历史;

             history info|list |stats 

        撤销安装

             history undo

        包组管理:

            grouplist :查询包组

            groupinstall :安装包组

            groupupdate  :升级包组

            groupinfo :查询包组详细信息

            groupremove :删除包组

         

        其他选项

            –nogpgcheck :安装不检查包的来源性合法性和完整性;

            -y :自动回答交互信息为yes

            -q :静默模式,不输出打印信息

            –disablerepo=repoid :禁用指定的仓库

            –enablerepo=repoid :启用指定的仓库

            –noplugins:禁用插件;

特别注意提醒:

    (1)很多对yum工具理解不是很深的初学者认为,有了yum工具,不必再使用学习RPM工具,这里需要特别注意的,首先yum只是RPM的前端管理工具,底层完全依赖RPM的数据库,不是很清楚,可以多看几     遍yum工作原理;

    (2)yum软件管理操作机制对于突发故障解决不是很好,比如说安装过程中系统宕机,这时根本没办法分析破损的依赖关系和从新部署;目前已经有解决工具DNF;在测试系统上使用,成熟后终将替代YUM;

   不过企业版目前还是yum工具;

原创文章,作者:xiashixiang,如若转载,请注明出处:http://www.178linux.com/40840

(0)
xiashixiangxiashixiang
上一篇 2016-08-29
下一篇 2016-08-29

相关推荐

  • Linux学习笔记(第三篇)

    N21_Keen_第三周博客 1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who | cut -d " " -f 1 | sort -u 2、取出最后登录到当前系统的用户的相关信息。 last…

    Linux干货 2016-08-15
  • 第七周练习

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; 1.[root – gwx ~]#>fdisk /dev/sdb2.W…

    Linux干货 2016-12-11
  • 非对称密钥加密解密

    两台计算机一台用公钥加密
    另一台解密

    2018-01-08
  • linux正则表达式和vim的详细解析!

    正则表达式: 元字符– [:upper:] 大写 [:lower:] 小写 [:digit:] 全数字 [:alpha:] 全字母 [:alnum:] 全字母数字 匹配次数– . 匹配任意单个字符 * 匹配前面字符任意次 \? 匹配前面字符0次或1次 \{n\} 匹配至少n次 \{m,m\} 匹配至少m次 最多n次 \{,n\} 匹配…

    Linux干货 2017-04-09
  • 马哥教育网络班N22期+第8周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:是连接两个局域网的基于MAC地址数据存储转发设备,工作于数据链路层集线器:所有端口处于同一个广播域和冲突域中,带宽共享,工作于物理层二层交换机:多端口网桥,一个端口一个冲突域,默认所有端口位于同一个广播域中,可以划分vlan,隔离广播域,带宽独享三层交换机:具有路由功能的二…

    Linux干货 2016-10-19
  • N26-第八周作业-邢岩

    马哥门徒-N26-邢岩 1、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;      在线的主机使用绿色显示;      不在线的主机使用红色显示; #!/bin/bash # Author: jeque# Des…

    2017-03-24

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-29 09:42

    文章对yum工具的使用进行了详细的介绍,通读整篇文章后能学到很多东西,但文章在逻辑表达的组织上显得略微混乱,如果能再优化下逻辑规划会更让人印象深刻