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)
上一篇 2016-08-29 08:45
下一篇 2016-08-29 08:49

相关推荐

  • Yellow Dog! COMMAND && source

    linux程序包管理之yum        yum:之前命名为:yellow dog ,后来因为及其好用,很多发行版都以此为默认rpm程序前端管理工具,故此更名为:yellowdog update modifier,更牛的还有一个基于redhat的二次发行版也叫yellow dog 功能:…

    Linux干货 2016-08-21
  • 初入linux_基础(一)

    初入Linux知识点总结(一) 一、理论知识 1、时间点: 1946年 第一代计算机ENIAC诞生于美国宾州大学,特点:块头大、效率低 数学家冯诺•依曼提出计算机体系结构组成部分:计算器、运算器、存储器、输入设备、输出设备 1969年 UNIX在美国贝尔实验室诞生 1984年 GNU项目和软件基金会成立 1991年 Linux在芬兰赫尔辛基诞生 2、计算机的…

    Linux干货 2017-02-18
  • centos 7 修改sshd服务默认端口号

    由于最近sshd服务默认端口号22被匿名进行试探性的进行登入,为防止匿名用户再次进行试探性的登入,将sshd服务的默认端口号进行修改。 环境:centos 7.3  xshell 思路:先将sshd的被指文件进行修改,把sshd服务的默认端口号修改为所需要的端口号,然后重启sshd服务,发现重启报错。找其原因是应为selinux不允许自定义sshd…

    Linux干货 2017-04-06
  • 关于大型网站技术演进的思考(十五)–网站静态化处理—前后端分离—中(7)

    原文出处: 夏天的森林    上篇里我讲到了一种前后端分离方案,这套方案放到服务端开发人员面前比放在web前端开发人员面前或许得到的掌声会更多,我想很多资深前端工程师看到这样的技术方案可能会有种说不出来的矛盾心情,当我的工作逐渐走向越来越专业化的前端开发后,我就时常被这套前后端分离方案所困惑,最近我终于明白了这个困惑的本源在哪里…

    Linux干货 2015-03-11
  • Bash基础命令操作

    Bash基础命令操作

    2018-03-18
  • Linux之SELinux

      Linux之SELinux     本文包括以下内容SELinux概念启用SELinux管理文件安全标签管理端口标签管理SELinux布尔值开关管理日志查看SELinux帮助   SELinux介绍SELinux: Secure Enhanced Linux,是美国国家安全局(NSA=The National Se…

    Linux干货 2016-09-21

评论列表(1条)

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

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