20150910程序包管理

第一、程序包的定义

程序包管理:

  内核功能:进程管理:内存管理,网络协议栈、驱动程序……………

应用程序

 Linux常用包管理器、打包、包管理(安装、升级、卸载、查询、校验)

    deb:debian 早期程序包管理

   rpm:redhat (redhat package manage---> (标准)

   RPM is Package Manager( 采用C语言实现、目前成为Linux包的标准)

第二、程序包组成

程序包组成4类:

  二进程制程序(/bin,/sbin ,/usr/bin,/usr/sbin

  库文件(共通的功能,通过库形式提供/lib64,/usr/lib64

  配置文件:/etc

  帮助文件:manual,info

第三、包管理器功能

打包:前以上类型文件存放在一个单一的归档文件中,支持包管理的功能)

安装: 将相应文件安装到相应的位置,执行文件在/bin,/usr/bin

卸载:

升级:新版本替换旧版本程序

查询:安装信息

检验:检验的二个方面:来源的合法性、完整性,基于md5

第四、rpm包工具

rpm利用rpmbuild创建:依赖于specs文件,每个文件存在不同的路径

  10,5,3,2(说明10个功能包,5个常用,3个次常用、2个很少用) 

RPM分包机制:

   例如:testapp-version.tar.gz ,(tar.gz归档压缩格式)

       testapp-version 核心包(主包)

       testapp-develp-version 支包(分包)

       一个包分多个片,安装时安装需要的小包

第五、RPM包的命名

version:主版本号---- 次版本号------ realese(修正)

major. Minor.release(点号分隔)

     RPM包的命名机制:

name-verision-release.ARCH.rpm(ARCH架构,RPM特定后缀)

示例:

       bash-4.2.4.1.el17.x86.rpm

      bash_devel-4.2.4-1.e17.x86_64.rpm

4.2.4为version,1el17为release是rpm包release,不是程序包

Release:rpm release el17指redhat 7

image

   libselinux-2.2.2-6.el7.i686.rpm这主包

   libselinux-devel-2.2.2-6.el17.i686.rpm等为分包  

第六:包之间依赖关系

 rpm实现基本功能包与包之间有可能存在依赖关系(功能单一),

多个包或工具来完成复杂工作。

 Linux为了追踪系统安装的rpm包以及生成的文件有RPM数据库,

记录当前包名、文件、原始检验码、对应关系等。通常在/var/lib/rpm路径下

第七:如何获取rpm包:

获取途径

   1、发行版提供的程序包

   2、fedora-EPEL 是程序项目 社区组织开源项目提供额外包

   3、项目的管方站点: 国内阿里、163等镜像

   4、搜索引擎 第三方

http://rpmfind.net http://rpm.pbone.net http://pkgs.org

第八:RPM包管理

1、包挂载

     显示OS版本

image

centos识别光盘使用的文件cdrom,所有文件先挂载后使用

  /dev/cdrom-sr0 是一个链接 cdrom-sro系统可能不同

cdrom实际为一个符号链接,采用ls �Cl显示

image

-r代表只读,

image

查看安装包/cdrom/Packages目录下包的数量使用ls |wc �Cl

image

2、基于RPM命令支持程序包管理操作

1)安装:

   A:命令格式:

    NAME

      rpm - RPM Package Manager

    SYNOPSIS

     QUERYING AND VERIFYING PACKAGES:

    rpm {-q|--query} [select-options] [query-options]

    rpm {-V|--verify} [select-options] [verify-options]

     INSTALLING, UPGRADING, AND REMOVING PACKAGES:

    rpm {-i|--install} [install-options] PACKAGE_FILE ...

    rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

    rpm {-F|--freshen} [install-options] PACKAGE_FILE …

 命令选项:

   --i install

   -v显示详细过程 -vv, -vvv

   -h hash用#号显示进度

示例:安装包

image

   一般-ivvh更详细的内容:包括安装目录、

image

示例:删除、卸载包  -e选项代表ease、uninstall

image

示例:查看包是否安装,后为包名

image

     B:依赖关系

程序包有依赖关系,未安装将被组织

image

  每个rpm包都提供一个或多个capabilitles

   --nodeps 忽略依赖关系

   --test 只测试

   --replacepkgs 重装程序包

   --nodeps可放到后面

示例:-- 忽略依赖进行安装,

image

  重新安装并忽略依赖关系

image

C:安装多个包,后面多个包名即可,并可添加相应的选项

image

2)升级

   A:命令格式

    rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

    rpm {-F|--freshen} [install-options] PACKAGE_FILE …

       -UuH:如果有旧版本程序包,则升级,如果没有则安装

       -Fvh:如果有旧版程序包,则升级,如果没有则不安装

   安装选项

     --nodeps

     --oldpackage:降级

     --force 强制升级

3)卸载

   A:命令格式

     rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]

      [--notriggers] [--test] PACKAGE_NAME …

       --noscripts

      卸载指定包名  rpm �Ce 包名

4)查询

  A:命令格式

    rpm {--querytags|--showrc}

    rpm {--setperms|--setugids} PACKAGE_NAME …

查询选项:

  -qa包括所有包   -a所有包 -f由那个生成、-g包组 

  -qf /path/file 这个文件由那个安装包生成

  示例:/etc/fstab文件由setup包生成

image

   -qc 查询指定程序生成那些配置文件

image

   -qd 查询指定安装包生成的文档:一般在doc、man、info

image

    -qi 包名: 指定相关包的相关信息

image

   -ql 查询安装包生成了那些文件的列表:wc-l统计信息

image

  -qR 查看依赖那些程序包

image

image

  -q �Cscripts 包名,显示程序包中的脚本

image

 共4类:preinstall安装前准备脚本

   postintall  安装后脚本

   preuninstall卸载前脚本

   postuninstall卸载后脚本

      -p :查询针对未安装的程序包文件

image

   安装后可能生成的文件-qpl

image

5)校验

 命令格式:用于检查安装包是否被修改过

  rpm {-V|--verify} [select-options] [verify-options]

    rpm -V的属性

    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:

示例:rpm �CV zsh    :修改zsh安装后通过rpm �Cql查看相

关文件,利用vim修改后运行运行查看是被修改,输出如下

image

6)包校验:

  来源合法性验证:非对称加密(利用公钥、私钥)有公钥需要私钥解密。

 有私钥需要用公钥解密,如果二次验证码相同说明来源合法

    默认情况下公钥在安装盘中存在。其中rpm-gpc-key为公钥

image

   系统自带公钥:

image

 导入密钥:(导入后不会再提醒)将RPM-GPG-KEY-CentOS-7导入

后,将校验安装在光盘package目录的所有包,示例:

   rpm �Cimport RPM-GPG-KEY-CentOS-7

      用选项-K(大写) 进行校验

image

 完整性验证:单向加密

 导入密钥:rpm --import /path/to/file

   校验: rpm -K /path/to/RPM_FILE

第九:YUM源管理

1)YUM定义

    用于自动更新依赖关系(操作系统提供不好),YUM一次只能安装一

个包,不能够并行运行。

    YUM (yellowdog update modfity)

clip_image016

  YUM(依赖服务器组件)指定一个包仓库(可不指一个),

每个仓库都有(仓库管理程序包的集合,包名、版本号、依赖关系

都记录在仓库源数据文件当中)。每个仓库都有源数据文件下载缓存,

通过缓存数据文件下载(最新版本源文件包名、版本号、下载关系)YUM

一般是文件服务器。一般源数据文件不会删除,但下载的文件安装完成后下载)

clip_image017

  yum install zsh 在仓库找zsh程序包,找最新的同时下载

到本地,放到缓存空间中。所有相关包完成开始类似rpm进行安装

下载后,本地后进行安装。针

YUM通过检验码检测最新版本!新版本将覆盖本地旧版本文件。

2)YUM的配置与使用

A:常用YUM源

常用的YUM源镜像包括aliyun,163,sohu等(EPEL)

      mirrors.aliyun.com等

repodata为源数据所在目录的你目录为仓库路径,该目录与服务器对比

clip_image018

yum repositories:提供的三种方式

文件服务器:

ftp://hostmae/Path/to/repo

http://hostname/path/to/repo

file:///path/to/repo     本地某个目录

告诉yum来源 mirrors.aliyu.com

B:yum程序(客户端)的配置文件

/etc/yum.conf 全局,对所有都适用的配置

/etc/yum.repos.d/*.repo

image

        一个文件通常用于一个或一组功能相近或相关仓库。

重要是参数指向

image

C:定义一个仓库指向:

   格式:

     [REPO_ID]

      name=

      baseurl=或多个可从中选一个(文件服务器三种定义形式之一),要求包相同

#mirrorlist=互联网上的某个文件 scheme://hostname/path/to/mirror_list_file

      enable={1|0} 是否启用

      gpgcheck={1|0} 检验,需要key,二端都需要有

      gpgkey 互联网路径密钥路径

      cost=开销

Repo 路径为仓库路径(示例-Centos aliyun)

 

仓库指向时可利用的变量:实现引用当前系统的主版本号

$releasever:这条当前OS主版本号

$basearch:当前系统的基本架构

i386,i486,i586,i686,

例如http;//mirrors.magedu.com/centos/$releaser/$basrarch

当7时输出为

http://mirrors.magedu.cm/centos/7/i586

http://mirrors.magedu.cm/centos/$releasever/i586

   $releaser/替换7等

 

步骤1:准备父路径(一般为repodata上一级目录

这里为http://mirrors.aliyun.com/centos/7/os/x86_64/

image

步骤2: 修改/etc/yum.repos.d目录下CentOS-Base.repo

文件,修改别名(非repo结尾)

image

步骤3:在/etc/yum.repos.d目录下创建以repo结尾的文件

根据仓库指向定义的格式进行编辑

image

步骤4:利用yum repolist显示可用仓库

image

可参考针对epel进行路径fedora-epel指定

image

  yum repolist中status为包的数量

image

D:YUM命令的使用

命令格式 

yum(8) yum(8)

    NAME

       yum - Yellowdog Updater Modified

   SYNOPSIS

       yum [options] [command] [package ...]

 常用命令

 安装 yum install php-mysql (自动解决依赖关系)

 卸载yum remove 包名 (依赖所有的包都将卸载)

 升级yum update 包名/yum check-update(查验可用升级包)

  查询 yum info 包名

      yum search zs 基于关键字

      yum list all 所有以安装未安装或者yum list 包名(zs*)支持通配符

      yum list all|installed|available

      yum list all |grep

      yum provides /path/to/somefile  文件名 ,程序文件由那个包安装完成

image

  重新安装:reinstall

    yum 可安装本地某路径文件 localinstall(旧版本使用)

 降级:downgrade

 clean:清理缓存:存储文件(后面文件类型)

   [ packages | metadata | expire-cache | rpmdb | plugins | all ]

 生成缓存:makecache

 包组:列出所有包组 yum grouplist  列出所有包组

  groupinfo “GRP_NAME”                                               groupinstall “GRP_NAME”                                             Groupremove “GRP_NAME”

    包组信息:注意名称空格使用双引号 " "

  仓库相关命令:repolist

            repoinfo[all|enable|disable]

    不能同时启动二个yum安装,因为二个yum之间相互隔离

       yum help repoinfo

                     

E:使用光盘当做本地仓库

步骤1:定义文件:前提光盘已挂载

步骤2:在/etc/yum.repos.d目录创建centos-local.repo文件

步骤3:编辑文件:使用file:///指明其访问路径

image

数据越大,优先级低。默认1000

clip_image030

步骤4:yum repolist

image

F:创建本地仓库

   自己利用rpm包创建本地仓库包

yum install createrepo 自动分析源数据包

createrepo /path/to/rpmfiles/

   yum分组基于xml定义

   yum是包程序前端管理工具

G:DNF(yum的升级版,有suse研发)

   可利用yum install dnf进行安装

你可能感兴趣的:(linux,网络,color,应用程序)