程序包管理

程序包

linux的程序包主要分为两类;二进制可执行安装包和源代码程序文件包

    二进制应用程序的组成部分:
    二进制文件、库文件、配置文件、帮助文件
  查看二进制程序所依赖的库文件:
    ldd /PATH/TO/BINARY_FILE

管理及查看本机装载的库文件:
    ldconfig 
        /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系;

        配置文件为:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
        缓存文件:/etc/ld.so.cache

程序包管理:
    功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作;

    1、程序的组成组成清单 (每个包独有)
        文件清单
        安装或卸载时运行的脚本
    2、数据库(公共)
        程序包名称及版本
        依赖关系;
        功能说明;
        安装生成的各文件的文件路径及校验码信息;

管理程序包的方式:
    使用包管理器:rpm
    使用前端工具:yum, dnf

获取程序包的途径:
    (1) 系统发版的光盘或官方的服务器;
        CentOS镜像:
            http://mirrors.aliyun.com
            http://mirrors.sohu.com
            http://mirrors.163.com

    (2) 项目官方站点
    (3) 第三方组织:
        Fedora-EPEL
        搜索引擎:
            http://pkgs.org
            http://rpmfind.net
            http://rpm.pbone.net
    (4) 自己制作

建议:检查其合法性
    来源合法性;
    程序包的完整性;

程序包管理器

linux中在二进制可执行安装程序包安装上会涉及多个文件的操作, 操作过程就会比较复杂, 为简化该过程就使用程序安装包管理器来管理程序包的安装过程, 大大简化了程序包安装过程. Linux根据发行版本不同, 使用不同的程序包管理器实现对程序包的管理, 以下是一些发行版本的包管理器的前端工具 
yum:rpm包管理器的前端工具; apt-get:deb包管理器前端工具; zypper: suse上的rpm前端管理工具; dnf: Fedora 22+ rpm包管理器前端管理工具;

RPM

RPM是Red Hat Package Manager的缩写,原意是Red Hat软件包管理: 这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。

RPM软件包

RPM软件包分为二进制包(Binary)、源代码包(Source)和Delta包三种。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。 rpm 包种类、格式

rpm格式二进制可执行安装包

  gd-2.0.35-11.el6.x86_64.rpm

src.rpm格式  源码包格式

  gd-2.0.35-11.el6.src.rpm

rpm命名方式:name-version-release.arch.rpm

    name:表示包的名称,包括主包名和分包名
    version:表示包的版本信息
    release“用于标识rmp包本身的发型号,可还包含适应的操作系统
    arch:表示主机平台

gd-devel-2.0.35-11.el6.x8664.rpm源码包 gd是这个主包名,devel是这个包的分包名 2.0.35是表示版本信息,2为主版本,0为次版本,35为修订号, 11.el6中的11是表示发行号,el6表示是RHEL6 x8664是表示包适合的平台,如果是noarch这表示与平台无关

rpm工具命令的使用

rpm {-i|–install} [install-options] PACKAGE_FILE … -i:install安装 -v|vv|vvv: verbose显示详细信 -h: 以#显示程序包管理执行进度;每个#表示2%的进度

        rpm -ivh PACKAGE_FILE ...

            [install-options]
                --test: 测试安装,但不真正执行安装过程;dry run模式;
                --nodeps:忽略依赖关系;
                --replacepkgs: 重新安装;

                --nosignature: 不检查来源合法性;
                --nodigest:不检查包完整性;

                --noscipts:不执行程序包脚本片断;
                    %pre: 安装前脚本; --nopre
                    %post: 安装后脚本; --nopost
                    %preun: 卸载前脚本; --nopreun
                    %postun: 卸载后脚本;  --nopostun

        1.  碰到多个依赖关系可以多个安装
        2. 重新安装时,如果重新安装有可能导致之前的配置文件失效

升级: rpm {-U|–upgrade} [install-options] PACKAGEFILE … rpm {-F|–freshen} [install-options] PACKAGEFILE …

        upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”;
        freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;

        rpm -Uvh PACKAGE_FILE ...
        rpm -Fvh PACKAGE_FILE ...

        --oldpackage:降级;
        --force: 强行升级;

    注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核;
         (2) 如果原程序包的配置文件安装后曾被修改,长级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;

查询: rpm {-q|–query} [select-options] [query-options]

    [select-options]挑选选项
        -a: 所有包
        -f: 查看指定的文件由哪个程序包安装生成

        -p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;

        --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;
        --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
        CAPABILITY:可以查询路径,文件
    [query-options]查询选项
        --changelog:查询rpm包的changlog修改日志
        -c: 查询程序的配置文件
        -d: 查询程序的文档
        -i: information 相关信息
                        Name:姓名
                        Version:版本
                        Release:发行号
                        Architecture:支持的平台
                        Install Date:安装日期
                        Group:支持的包组
                        Size:大小
                        License:许可证
                        Signature:签名日期
                        source RPM:额外提供了源码包
                        Build Date:制造日期
                        Build Host:在那个服务器上安装
                        Relovations:有没有重新公共
                        Packager:作者
                        vendor:提供组织
                        URL:官方站点
                        Summary:简要功能描述
                        Description:描述信息
        -l: 查看指定的程序包安装后生成的所有文件;
        --scripts:程序包自带的脚本片断
        -R: 查询指定的程序包所依赖的CAPABILITY;
        --provides: 列出指定程序包所提供的CAPABILITY;


        -qa   查看所有已经安装的包
              rpm -qa  查看所有包名
               rpm -qa |  grep 包名查看某个包名
       -qi  查看包的摘要信息
       -qf  查看文件是有那个包安装的
          rpm  -qf  /path/to/file
       -ql  查看包安装生成的文件清单
        -qc  查看包安装生成的配置文件
        -qd  查看包安装生成的帮助文档
         -q  --scripts 查看相关的脚本
          rpm -q --scripts  包名
         -qp[i|l|d|c] 查看尚未安装包的详细信息
             rpm -qpi /path/to/rpm_file

卸载: rpm {-e|–erase} [–allmatches] [–nodeps]忽略依赖关系 [–noscripts] [–notriggers] [–test] PACKAGE_NAME …

校验: rpm {-V|–verify} [select-options] [verify-options]

       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 

包来源合法性验正及完整性验正:
    完整性验正:SHA256
    来源合法性验正:RSA


    公钥加密:
        对称加密:加密、解密使用同一密钥;
        非对称加密:密钥是成对儿的,
            public key: 公钥,公开所有人
            secret key: 私钥, 不能公开


    导入所需要公钥:
        rpm --import /PATH/FROM/GPG-PUBKEY-FILE

        CentOS 7发行版光盘提供的密钥文件:RPM-GPG-KEY-CentOS-7

数据库重建: 数据库 var/lib/rpm rpm {–initdb|–rebuilddb} initdb: 初始化 如果事先不存在数据库,则新建之;否则,不执行任何操作;

        rebuilddb:重建
            无论当前存在与否,直接重新创建数据库;

RPM示例

实验环境:centos7 1.初始化数据库 通过rpm命令查询一个rpm包是否安装了,也要通过rpm命令来安装;不是所有的软件包都能通过rpm命令来安装的,文件已.rpm后缀结尾的才行; 数据库重建: rpm 数据库 var/lib/rpm rpm {–initdb|–rebuilddb} initdb: 初始化 如果事先不存在数据库,则新建之;否则,不执行任何操作;

        rebuilddb:重建 #会花很长时间
            无论当前存在与否,直接重新创建数据库;

2.软件包的安装 rpm {-i|–install} [install-options] PACKAGE_FILE … -v: verbose -vv: 显示更多的verbose -h: 以#显示程序包管理执行进度;每个#表示2%的进度

        rpm -ivh PACKAGE_FILE ...

            [install-options]
                --test: 测试安装,但不真正执行安装过程;dry run模式;
                --nodeps:忽略依赖关系;
                --replacepkgs: 重新安装;

                --nosignature: 不检查来源合法性;
                --nodigest:不检查包完整性;

                --noscipts:不执行程序包脚本片断;
                    %pre: 安装前脚本; --nopre
                    %post: 安装后脚本; --nopost
                    %preun: 卸载前脚本; --nopreun
                    %postun: 卸载后脚本;  --nopostun

        1.  碰到多个依赖关系可以多个安装
        2. 重新安装时,如果重新安装有可能导致之前的配置文件失效
  [root@localhost Packages]# rpm -ivh --test zziplib-0.13.62-5.el7.x86_64.rpm 
  准备中...                          ################################# [100%]
  #只用来检查依赖关系可以用--test,如果要重新安装可以用--replacepkgs。
  [root@localhost Packages]# rpm -ivh zziplib-0.13.62-5.el7.x86_64.rpm 
  准备中...                          ################################# [100%]
  正在升级/安装...
  1:zziplib-0.13.62-5.el7            ################################# [100%]

3.软件包的升级: rpm {-U|–upgrade} [install-options] PACKAGEFILE … rpm {-F|–freshen} [install-options] PACKAGEFILE …

        upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”;
        freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;

        rpm -Uvh PACKAGE_FILE ...
        rpm -Fvh PACKAGE_FILE ...

        --oldpackage:降级;
        --force: 强行升级;

    注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核;
         (2) 如果原程序包的配置文件安装后曾被修改,长级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;


       [root@localhost Packages]# rpm -Uvh zziplib-0.13.62-5.el7.x86_64.rpm 
    准备中...                          ################################# [100%]
   软件包 zziplib-0.13.62-5.el7.x86_64 已经安装
    #如果想对程序包进行降级可以使用--oldpackage进行降级;

4.软件包的查询 
rpm {-q|–query} [select-options] [query-options]

    [select-options]挑选选项
        -a: 所有包
        -f: 查看指定的文件由哪个程序包安装生成

        -p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;

        --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;
        --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
        CAPABILITY:可以查询路径,文件
    [query-options]查询选项
        --changelog:查询rpm包的changlog修改日志
        -c: 查询程序的配置文件
        -d: 查询程序的文档
        -i: information 相关信息
                        Name:姓名
                        Version:版本
                        Release:发行号
                        Architecture:支持的平台
                        Install Date:安装日期
                        Group:支持的包组
                        Size:大小
                        License:许可证
                        Signature:签名日期
                        source RPM:额外提供了源码包
                        Build Date:制造日期
                        Build Host:在那个服务器上安装
                        Relovations:有没有重新公共
                        Packager:作者
                        vendor:提供组织
                        URL:官方站点
                        Summary:简要功能描述
                        Description:描述信息
        -l: 查看指定的程序包安装后生成的所有文件;
        --scripts:程序包自带的脚本片断
        -R: 查询指定的程序包所依赖的CAPABILITY;
        --provides: 列出指定程序包所提供的CAPABILITY;

    用法:
        -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
        -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
        -qa

yum

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

YUM的特点:
   可以同时配置多个资源库(Repository)
   简洁的配置文件(/etc/yum.conf)
   自动解决增加或删除rpm包时遇到的依赖性问题
   使用方便
   保持与RPM数据库的一致性

yum源

yum源安装: yum源大致上分为两类: 本地 网络 本地光盘yum源的搭建:

      通过ISO镜像挂载或者复制文件
      mount /dev/cdrom /media/cdrom

      编辑本地YUM源文件
      cd /etc/yum.repos.d/
      清除老配置,rm -rf *
      vim localcdrom.repo

     配置文件:
    [c7-media]
    name=CentOS-$releasever - Media
    baseurl=file:///media/CentOS/
    file:///media/cdrom/
    file:///media/cdrecorder/
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

     清除yum缓存并更新
      yum clean all
      yum makecache
    已加载插件:fastestmirror
     c7-media                                                                     | 3.6 kB  00:00:00     
     (1/4): c7-media/group_gz                                                     | 155 kB  00:00:00     
     (2/4): c7-media/filelists_db                                                 | 6.2 MB  00:00:00     
     (3/4): c7-media/primary_db                                                   | 5.3 MB  00:00:00     
     (4/4): c7-media/other_db                                                     | 2.3 MB  00:00:00     
    Determining fastest mirrors
     元数据缓存已建立

网络源安装 编辑网络YUM源文件

      cd /etc/yum.repos.d/
      清除老配置,rm -rf *
      vim networkcdrom.repo
        配置文件:
       [c7-network]
       name=network
       baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64
       gpgcheck=0
       enabled=1

     清除yum缓存并更新
      yum clean all
      yum makecache

注:以上配置是很简单的配置

   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,意为随机挑选;
                            priority:表示优先级
    cost=  
        默认为1000

                    注:=左右不可出现空格
    教室里的yum源:http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/
    CentOS 6.6 X84_64 epel: http://172.16.0.1/fedora-epel/6/x86_64/
     yum repolist :显示可以使用的yum的仓库
yum命令的用法:
    yum [options] [command] [package ...]

   command is one of:
    * install package1 [package2] [...]  安装
    * update [package1] [package2] [...]
    * update-to [package1] [package2] [...]
    * check-update
    * upgrade [package1] [package2] [...]
    * upgrade-to [package1] [package2] [...]
    * distribution-synchronization [package1] [package2] [...]
    * remove | erase package1 [package2] [...]
    * list [...]
    * info [...]
    * provides | whatprovides feature1 [feature2] [...]
    * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    * makecache
    * groupinstall group1 [group2] [...]
    * groupupdate group1 [group2] [...]
    * grouplist [hidden] [groupwildcard] [...]
    * groupremove group1 [group2] [...]
    * groupinfo group1 [...]
    * search string1 [string2] [...]
    * shell [filename]
    * resolvedep dep1 [dep2] [...]
    * localinstall rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use update)
    * reinstall package1 [package2] [...]
    * downgrade package1 [package2] [...]
    * deplist package1 [package2] [...]
    * repolist [all|enabled|disabled]
    * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
    * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
    * check
    * help [command]   帮助

显示仓库列表:
    repolist [all|enabled|disabled]
     all:所有
     enabled:启用的
     disabled:禁用的
显示程序包:
    list       显示anaconda的是操作系统安装的
        # yum list [all | glob_exp1] [glob_exp2] [...]
              glob_exp1:使用glob的通配符
        # yum list {available|installed|updates} [glob_exp1] [...]
              available:可用的  
              installed:所有安装的
              updates:所有可升级
安装程序包:
    install package1 [package2] [...]
   可以一次安装多个包   默认是安装最新的
    reinstall package1 [package2] [...]  (重新安装)

升级程序包:
    update [package1] [package2] [...]

    downgrade package1 [package2] [...] (降级)

检查可用升级包:
    check-update

卸载程序包:
    remove | erase package1 [package2] [...]
 卸载时会把依赖的包也会卸载的,
查看程序包information:
    info [...]

查看指定的特性(可以是某文件)是由哪个程序包所提供:
    provides | whatprovides feature1 [feature2] [...]

清理本地缓存:
    clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
     packages 
     metadata
     expire-cache 
      rpmdb 
     plugins 
     all
构建缓存:
    makecache

搜索:
    search string1 [string2] [...]

    以指定的关键字搜索程序包名及summary信息;
  rpm -k
查看指定包所依赖的capabilities:
    deplist package1 [package2] [...]

查看yum事务历史:
    history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

安装及升级本地程序包:
    * localinstall rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use update)

包组管理的相关命令:
    * groupinstall group1 [group2] [...] 
    * groupupdate group1 [group2] [...]
    * grouplist [hidden] [groupwildcard] [...]
    * groupremove group1 [group2] [...]
    * groupinfo group1 [...]

如何使用光盘当作本地yum仓库:
    (1) 挂载光盘至某目录,例如/media/cdrom
        # mount -r -t iso9660 /dev/cdrom /media/cdrom
    (2) 创建配置文件
    [CentOS7]
    name=
    baseurl=
    gpgcheck=
    enabled=

yum的命令行选项:
    --nogpgcheck:禁止进行gpg check;
    -y: 自动回答为“yes”;
    -q:静默模式;
    --disablerepo=repoidglob:临时禁用此处指定的repo;
    --enablerepo=repoidglob:临时启用此处指定的repo;
    --noplugins:禁用所有插件;

yum的repo配置文件中可用的变量:
    $releasever: 当前OS的发行版的主版本号;
    $arch: 平台;
    $basearch:基础平台;
    $YUM0-$YUM9

    http://mirrors.magedu.com/centos/$releasever/$basearch/os

列表

  yum list  <package_name>  
 列出指定安装软件的清单
  yum list installed            
 列出所有已安装的软件包
  yum list extras              
 列出所有已安装但不在 yum 仓库內的软件包
  yum grouplist                
 列出所有的组
  yum grouplist "Group1"     
 列出指定组的软件包列表

安装

  yum -y install  <package_name>      
  安装指定的软件 
  yum  -y groupinstall   "Group1"  "Group2"  
  安装指定的组     
  yum -y localinstall <package_name> 
  安装下载到本地的rpm包
  yum reinstall  <package_name>       
  重新安装一遍

更新

  yum check-update           
 列出所有可更新的软件清单 
  yum update
 更新所有安装的软件
  yum update  <package_name>  
 更新指定的软件

信息

  yum  info       
安装指定的软件 
  yum  info <package_name>            
显示指定包的信息
  yum  groupinfo "Group1"   "Group2"   
显示指定组的信息

yum  repolist [all|enable|disable]  
查看yum仓库的个数,默认显示启用的
 yum  makecache
手动生成缓存
yum search  <package_name> 
yum list | grep “*package*”
查找rpm
yum reinstall  <package_name>   
重新安装一遍
yum  whatprovides “*/COMMAND”
查看命令是用那个软件包提供的

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

(0)
上一篇 2016-05-29 15:23
下一篇 2016-05-31 15:43

相关推荐

  • Shell脚本编程初步

        shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。shell脚本(shell script),是一种为shell编写的脚本程序。业界所说的shell通常都是指shell脚本,但shell和shell script是两个不同的概念。shell编程跟java、php编程…

    Linux干货 2016-08-24
  • 在 Linux 下你所不知道的 df 命令的那些功能

    原文出处: xmodulo   译文出处:linux.cn – mtunique   欢迎分享原创到运筹维幄 问题: 我知道在Linux上我可以用df命令来查看磁盘使用空间。你能告诉我df命令的实际例子使我可以最大限度得利用它吗?   对于磁盘存储方面,有很多命令行或…

    Linux干货 2015-03-02
  • linux基础学习(数组、字符串变量处理)

    2016-08-22 授课内容: 数组 高级字符串操作 一、数组   变量:存储单个元素的内存空间   数组:存储多个元素的连续的内存空间,相当于多个变量的集合。   数组名和索引   索引:编号从0开始,属于数值索引   bash的数组支持稀疏格式(索引不连续)   …

    Linux干货 2016-08-24
  • linux基础(第二天)

    一、终端:ternimal     COMMAND:tty     串行终端:/dev/ttyS#      物理终端:/dev/console 键盘显示器 单一用户     虚拟终端:/d…

    Linux干货 2016-07-26
  • 查找 -数据结构

    几种查找算法:顺序查找,折半查找,分块查找,散列表 一、顺序查找的基本思想:  从表的一端开始,向另一端逐个按给定值kx 与关键码进行比较,若找到,查找成功,并给出数据元素在表中的位置;若整个表检测完,仍未找到与kx 相同的关键码,则查找失败,给出失败信息。 说白了就是,从头到尾,一个一个地比,找着相同的就成功,找不到就失败。很明显的缺点就是查找效…

    Linux干货 2015-07-28
  • 用户、组、权限管理练习

    用户、组管理练习 一、创建的内容:        1、组Rockets,Knicks,Cavaliers,他们的GID分别是501,540,530。    2、用户James(theBeard),Chris(CP3),Lebron(King),Carmelo(Melo),他们的uid分别是…

    Linux干货 2017-09-03