软件包管理

1.程序包管理器
源代码-->目标二进制格式-->组织称为一个或有限几个“包”文件;
    安装、升级、卸载、查询、校验

程序包管理器:

debian(Ubuntu):dpt,工具:dpkg,程序包以“.deb”结尾
redhat:redhat package manager ,rpm,".rpm";rpm is package manager;
S.u.S.E:rpm ,'.rpm'Gentoo:portsArchLinux:
2.程序包的组成格式
源代码:name-VERSION.tar.gz
    VERSION:major.minor.releaserpm包命名格式:
    name-VERSION-release.arch.rpm
        VERSION:major.minor.release
        release.arch:rpm包的发行号
            release.os:2.el7.i386.rpm
             archetecture(架构):i386,x64(amd64),ppc,noarch(没平台要求,可以使用在任意平台架构上)rpm拆包:主包和支包
    主包:name-VERSION-release.arc.rpm
    支包:name-function-VERSION-release.arc.rpm
        function:devel(开发包),utils(工具程序),libs(库文件)依赖关系
    X,Y,Z 
        X-->Y,Z
            Y-->A,B,C
            C-->Y
前端工具:自动解决依赖关系;
        yum :rhel系列系统上rpm包管理器的前端工具;        
        apt-get(apt-cache):deb包管理器的前端工具
        zypper:suse的rpm管理器前端工具
        dnf:Fedora 22+系统上rpm包管理器的前端工具
3.程序包管理器功能和组成部分
功能:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查看
1.程序包的组成清单(每个程序包都单独实现);
    文件清单
    安装和卸载时运行的脚本
2.数据库(公共)
    程序包的名称和版本
    依赖关系
    功能说明
    安装生成的各文件路径及校验码信息;
    等等等    
    CentOS上的程序包数据库位置/var/lib/rpm/
4.获取程序包的途径
(1)系统发行版的光盘或官方的文件服务器(或镜像站点);
    http://mirrors.aliyun.com
    http://mirrors.sohu.com,
    http://mirrors.163.com(2)项目的官方站点
(3)第三方组织制作的rpm包:
    (a)EPEL:
    (b)搜索引擎查找
        http://pkgs.org
        http://rpm.pvone.net
        http://rpmfind.netstat
    

建议:检查其合法性(完整性)
    来源合法性:
    程序包的完整性;
5.CentOS系统上rpm命令管理程序包

命令介绍

安装、升级、卸载、查询和校验、数据库维护rpm命令:rpm [OPTION] [PACKAGE_FILE]
    安装:-i,--install
    升级:-U,--update,-F,-freshen
    卸载:-e,--erase
    查询:-q,--query
    校验:-V ,--verify
    数据库维护:--builddb,--initdb

rpm包安装

rpm {-i|--install} [install-options] PACKAGE_FILE ...
    
    rpm -ivh PACKAGE_FILE...
    
    GENERAL OPTIONS:
        -v:verbose,详细信息       
        -vv:更详细的输出        
        [install-options]
            -h:hash marks输出进度条;每个#表示2%的进度        
            --test:测试安装,检查并报告依赖关系及冲突消息等;         
            --nodeps:忽略依赖关系,不建议使用,安装后会不能使用;      
            --replacepkgs:重新安装:rpm -ivh 
            --replacepkgs zsh-5.0.2-7.el7.x86_64.rpm   
            --nodigest:不检查包的完整性信息        
            --nosignature:不检查包的来源信息及包的完整性注意:rpm可以自带脚本;
    四类: --noscripts
        preinstall:安装过程开始之前运行的脚本,%pre: --nopre
        postinstall:安装过程完成以后运行的脚本:%post --nopost
        preuninstall:卸载过程真正开始执行之前运行的脚本,%preun --nopreun
        postuninstall卸载过程完成以后运行的脚本,%postun --nopostun

rpm包升级

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
    -U:升级或安装
    -F:升级,如果老版本不存在,则不进行安装    
         rpm -Uvh PACKAGE_FILE ...
     
      rpm -Fvh PACKAGE_FILE ... 
    
    --oldpackage:降级安装;
    --force:强制升级;
    注意:(1)不要对内核做升级操作。linux 支持多内核版本并存,因此,直接安装新版本内核;
      (2)如果某源程序包的配置文件安装后曾修改过,升级时。新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件。而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;

卸载:

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
       [--notriggers] [--test] PACKAGE_NAME ...
       --allmatches:卸载所有匹配指定名称的程序包的各版本
       --nodos:忽略依赖关系
       --test:测试卸载,
       dry run 模式
       rpm -e zsh

查询

rpm {-q|--query} [select-options] [query-options] 
1) [select-options]
    rpm -q PACKAGE_NAME:查询指定的程序包是否已安装,及其版本;
    -a,--all:查询所有已经安装过的包   
    -f FILE:查询指定的文件由哪个程序安装生成  
    -p,--package PACKAGE_FILE:用于实现对未安装的程序包做查询操作。   
    --whatprovides CAPABILITY:查询指定的CAPABILITY(能力)由哪个程序包提供      
        bin]# rpm -q --whatprovides config\(bash\)
        bash-4.1.2-40.el6.x86_64
        rpm -q --whatprovides zprof.so'()(64bit)'


    --whatrequires CAPABILITY:查询指定的CAPABILITY(能力)被哪个包所依赖;
2)[query-options] 
    --changlog:查询   
    -l,--list :安装生成的所有文件列表   
    -i,--info :查询程序包相关的information,版本号,大小,所属的组,等   
    -c,--configfiles:查询指定的程序包的配置文件   
    -d,--docfiles:查询指定的程序包提供的帮助文档   
    --provides:列出指定的程序包的所有CAPABILITY(能力)       
        bin]# rpm -q --provides bash
        config(bash) = 4.1.2-40.el6
        bash = 4.1.2-40.el6
        bash(x86-64) = 4.1.2-40.el6
    -R,--requires:查询指定的程序包的依赖关系;   
    --scripts:查看程序包自带的脚本片段;用法:
    -qi PACKAGE:信息,
    -qf FILE 文件由哪个包安装来,
    -qc PACKAGE配置文件,
    -ql PACKAGE:安装生成的文件列表,
    -qd,提供的帮助文档qpi,qpl,qpc...查询未安装的程序包的信息。

校验:

rpm -V zsh #校验rpm安装后有没有被修改过
   S file Size differs
   M Mode differs (includes permissions and file type)   5 digest (formerly MD5 sum) differs
   D Device major/minor number mismatch
   L readLink(2) path mismatch
   U User ownership differs
   G Group ownership differs
   T mTime differs
   P caPabilities differ

    [root@CentOS6 bin]# rpm -V zsh
    S.5....T.  c /etc/zshrc
rpm {-V|--verify} [select-options] [verify-options]

包来源合法性验证和完整性验证:

来源合法性验证:
    数字签名:
完整性验证
rpm --import /media/cdrom/RPM-GPG-KEY-GentOS-7导入密钥信息
rpm -K zsh-5.0.2-14.el7.x86_64.rpm


获取并导入信任的包制作者的密钥:
    对于CentOS发行版本来说:rpm --import /etc/pki/rpm-gpg/RPM-KEY-CentOS-7验证:
    (1)安装此组织签名的程序时,会自动执行验证
    (2)手动过验证:rpm -K PACKAGE_NAME

数据库重建:

rpm管理器数据库路径:/var/lib/rpm
    查询操作:通过此处的数据库进行;
    
获取帮助:    CentOS6:man rpm    CentOS 7:man rpmdb
rpm {--initdb|--rebuilddb}[-v] [--dbpath DIRECTORY] [--root DIRECTORY]

    --initdb:初始化数据库,当前无任何数据库可初始化创建一个新的;当前有时不执行任何操作
    --rebuilddb  :重新构建,通过读取当前系统上所有已安装过的程序包进行重新创建;

6.yum概述

yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。
基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

7.yum客户端的配置

1)yum respository(yum 仓库):
    yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下)2)yum中常用的文件服务器类型    ftp://
    http://
    file:///(本地yum源)3)yum客户端的配置文件:
    /etc/yum.conf:为所有仓库提供公共配置
    /etc/yum.repos.d/*.repo:为仓库的指向提供配置
    仓库指向的定义:
        [repositoryID]
        name=Some name for this repository
        baseurl=url://path/to/repository/
        enabled={1|0}
        gpgcheck={1|0}
        gpgkey=URL
        enablegroups={1|0}
        failovermethod={roundrobin|priority}
            默认为:roundrobin,意为随机挑选;
        cost= 默认为1000注意:3)中参数不是全部都需要进行配置,但最基本的必须包括以下三点
    (1):[repositoryID]
    (2):baseurl=url://path/to/repository/
    (3) enabled={1|0}4)在CentOS6环境上安装yum仓库示例:
    (1)虚拟机CentOS-6.8
        yum源:http://10.1.0.1/cobbler/ks_mirror/6/
    (2)进入yum repo 配置目录,在yum.repos.d下原有很多.repo结尾的文件,均已移至其下的old文件夹中
            [root@CentOS6 ~]# cd /etc/yum
            yum/         yum.conf     yum.repos.d/ 
            [root@CentOS6 ~]# cd /etc/yum.repos.d/
            [root@CentOS6 yum.repos.d]# ls
            base.repo  old
            [root@CentOS6 yum.repos.d]# 
    (3)创建并编辑bash.repo文件,在其中加入一下内容
        [base]
        name=CentOS 6
        baseurl=http://10.1.0.1/cobbler/ks_mirror/6/
        gpgcheck=1
        gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
        enabled=1
    (4)执行yum clean all清除原有yum缓存,然后执行yum makecache重新创建yum缓存文件。    
5)yum-config-manager命令的使用
   (1) 生成repo-http_10.1.0.1_cobbler_ks_mirror_CentOS-6-x86_64_.repo

        imagewKioL1e5K47zSqp0AABtTDOf4Pk558.png-wh_50

(2)  yum-config-manager --disbale "仓库名" 禁用仓库
(3)yum-config-manager --enable "仓库名" 启用仓库
    yum-config-manager --enable fedora(仓库名是在配置时中括号中的名字)

8.使用yum安装和卸载程序包

显示仓库列表:repolist [all|enabled|disabled

[root@CentOS6 yum.repos.d]# yum repolist allLoaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
base                                                                                 | 4.0 kB     00:00     cdrom                                                                                | 4.0 kB     00:00 ... 
fedora                                                                               | 4.3 kB     00:00     repo id                                       repo name                                      status
base                                          CentOS 6                                       enabled:  6,696cdrom                                         CentOS 2                                       enabled:  6,696fedora                                        CentOS                                         enabled: 11,768repolist: 25,160[root@CentOS6 yum.repos.d]#

显示程序包list

yum list [all | glob_exp1] [glob_exp2] [...]yum list {available|installed|updates} [glob_exp1]

安装程序包:

install package1 [package2] [...]
reinstall package1 [package2][...] (重新安装)

imagewKioL1e5LP6De0z9AACrtVCVbxM514.png-wh_50

升级程序包

update [package1] [package2][...]    downgrade  [package1] [package2][...]  (降级)    检查可用升级:        check-update

卸载程序包:

remove |erase package1 [package2][...]

imagewKiom1e5K47CchWEAACchw-Sv2M124.png-wh_50

查看程序包information:

info[...]

查看指定的特性(可以是某文件)是由哪个程序包提供的:

provides |whatprovides feature1 [feature2] [...]

本地缓存的清理和构建

清理:
    clean [package |metadata |expire-cache|rpmdb|plugins|all]
构建:
    makecache

imagewKioL1e5K43SPSxIAACw_kDRiIo151.png-wh_50

9.yum的选项及其它:

使用光盘当本地yum仓库

(1)挂载光盘至某目录,例如/media/cdrom    #mount /dev/cdrom /media/cdrom(2)创建配置文件
    [CentOS7]
    name=
    baseurl=
    gpgcheck=
    enabled

yum的命令行选项

--nogogcheck:禁止进行gpg check-y:自动回答“yes“-q:静默模式--disablerepo=repoidglob:临时禁用此处指定的repo--enablerepo=repoidglob:临时启用此处指定的repo--noplugins:禁用所有插件

yum的repo配置文件中可用的变量

$releasever:当前OS的发行版本的主版本号$arch:平台,i386,i486,i586,x86_64...$basearch:基础平台;i386$YUM0-$YUM9:自定义变量
示例:
    http://server/centos/$releasever/$basearch/
    http://server/centos/7/x86_64
    http://server/centos/6/i384

创建yum仓库:

createrepo[options] <directory>

原创文章,作者:提着酱油瓶打醋,如若转载,请注明出处:http://www.178linux.com/38262

(0)
提着酱油瓶打醋提着酱油瓶打醋
上一篇 2016-08-20
下一篇 2016-08-21

相关推荐

  • 安装配置NFS服务和挂载(Centos7)

    NFS简介 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。 RPC(NFS服务需要依赖RPC服务,这个比较重要) 要想了解NFS,必然要提到R…

    Linux干货 2017-04-21
  • LAMP基于编译安装方式实现(httpd与php以fastcgi方式结合)3

    概述     在某些现有rpm包不能满足需求的时候,可能需要编译安装LAMP环境,本篇就介绍下php与httpd结合方式为fastcgi方式结合时的编译安装,同时,由于httpd与php以module方式结合时,仅是编译选项有所差别,故也会简单说明下编译选项的差异 环境     CentOS7系统,…

    Linux干货 2016-10-17
  • Linux发展史

    日期:2016-10-12  Bell,MIT与GE的『Multics』系统     早期的计算机还很不普遍,除非是军事或者高科技用途,或者学术单位的学术研究,否则真的很难接触到。而且计算机架构很难使用。那个时候,程序设计者必须先将程序相关的信息在读卡纸上面打洞然后将读卡纸插入卡片阅读机来将信息读入主机中运算…

    Linux干货 2016-10-14
  • 用户管理、组管理、权限管理、文本处理工具应用示例

    用户管理、组管理、权限管理、文本处理工具应用示例 1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限 [root@localhost ~]# cp -a /etc/skel/ /home/tuser1/ [root@localhost ~]# chmod -R go= /hom…

    Linux干货 2017-07-23
  • 设定Linux自动登陆

    设定Linux自动登陆 在实验场景中我们可能会经常重新启动Linux,然后反复输入账户密码登陆。为了在每次启动后快速进入系统减少在实验场景中不必要的工作,我们可以设定Linux在启动后自动登陆到指定账户(实验中一般为root账户)。基于Linux一切皆文件的思想,我们可以通过修改配置文本的方式决定是否启用自动登录,以及自动登录的账户是普通用户账户还是root…

    Linux干货 2017-07-15
  • 22期第十二周课堂练习

    1、请描述一次完整的http请求处理过程; (1)建立和处理连接:接收请求或者拒绝请求; (2)接收请求:接收来自于网络上的主机请求报文中对某特定的资源的一次请求的过程; (3)处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息 (4)访问资源:获取请求报文中请求的资源 (5)构建响应报文; (6)发送响应报文; (7)记录日志; 2、h…

    Linux干货 2016-12-26

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-22 13:29

    文章架构清晰,层次明了,同时熟练使用包管理器各命令是基本技能需要熟练使用和掌握。