RPM和YUM的使用说明

一、RPM包管理程序

centos系统上使用rpm命令管理程序包:

安装、卸载、升级、查询、校验、数据库维护

RPM包安装选项:

  –test:测试安装,但不真正执行安装

  –nodeps:忽略依赖关系

  –nosignature:不检查来源合法性

  –nodigest:不检查包完整性

  –noscripts:不执行程序包脚本片断

        %pre:安装前脚本; –nopre

        %post:安装后脚本;–nopost

        %preun:卸载前脚本; –nopreun

        %postun:卸载后脚本; –nopostun

RPM包升级选项:

  upgrade:安装有旧版程序包,则"升级"

        如果不存在旧版程序包,则"安装"

 freshen:安装有旧版程序包,则"升级"

       如果不存在旧版程序包,则不执行升级操作

 –oldpackage:降级

 –force:强行升级

RPM包查询选项:

   -q:所有包

   -f:查看指定的文件由哪个程序包安装生成

   -p rpmfile:针对尚未安装的程序包文件做查询操作

   –whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供

   -whatrequires CAPABILITY:查询指定的CAPABILITY由哪个包所依赖

   –changelog:查询rpm包的changelog

   -c:查询程序的配置文件

   -d:查询程序的文档

   -l:查看指定的程序包安装后生成的所有文件;

   –scripts:程序包自带的脚本片断

   -R:查询指定的程序包所依赖的CAPABILITY

   –provides:列出指定程序包所提供的CAPABILITY

RPM包的校验

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

       完整性验证:SHA256

       来源合法性验证:RSA

  公钥加密:

       对称加密:加密、解密使用同一秘钥:

       非对称加密:秘钥是成对的

  导入所需要的公钥:

       rpm -K|checksig rpmfile 检查包的完整性和签名

       rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

       CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7

  查询导入的秘钥:

       rpm -qa gpg-pubkey*

RPM数据库:

      数据库重建:

        /var/lib/rpm

rpm {–initdb|–rebuilddb}

      initdb:初始化

      如果事先不存在数据库,则新建之

      否则,不执行任何操作

      rebuilddb:重建

      无论当前存在与否,直接重建数据库  

二、YUM

前言:

   rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间定位软件包,如果直接使用rpm直接安装程序包也可以,但是需要自己手工解决程序包依赖性的问题,可能程序包的依赖性非常复杂,那么直接使用rpm安庄,就会非常麻烦,而使用YUM安装就会自动解决依赖性的问题。大大简化了安装过程。 

YUM客户端配置文件:

  /etc/yum.conf:为所有仓库提供公共配置

  /etc/yum.repos.d/*.repo:为仓库的指向提供配置

仓库指向的定义:

      [repositoryID]  (yum仓库的ID)

      name=some name for this repository (yum仓库的名称) 

      baseurl=url://path/to/repository/ (repodata的位置,一般指向上一级目录)

      enabled={1|0}  (1为启用,0为关闭)

      gpgcheck={1|0}  (是否检查gpgkey,1为检查0为不检查)

      gpgkey=URL     (gpgkey的路径)

YUM命令:

显示仓库列表:

yum repolist

显示程序包:

yum list

安装程序包:

yum install package

升级程序包

yum update

检查可用升级

yum check-update

卸载程序包:

yum remove package

查看程序包information

yum info [..]

查看指定的特性是由哪个程序包所提供的

yum provides

清理本地缓存:

yum clean {packages|metadata|expire-cache}

构建缓存:

yum makecache

搜索:search string1

  以指定的关键字搜索程序包名及summary信息

查看指定包所依赖的capabilities:

  deplist package1

查看yum事务历史:

  history{info|list|pakages-list|packages-info}

  summary {addon-info|redo|undo}

  rollback {new|sync|stats}

 示例:

   yum history

   yum history info 6

yum 的日志存储位置:/var/log/yum.log

yum的命令行选项:

  –nogpgcheck:禁止进行gpg check

 -y:自动回答为yes

 -q:静默模式

 –disablerepo=repoidglob:临时禁用此处指定的repo

 –enablerepo=repoidglob:临时启用此处指定的repo

 –noplugins:禁用所有插件

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

   $releasever:当前OS的发行版的主版本号

   $arch:平台,i386,i486,i586,x86-64等

   $basearch:基础平台;i386

   $YUMO-$YUM9:自定义变量

示例:

  http://server/centos/$releasever/$basearch/

创建yum仓库:

  createrepo [options]

作业:

1、1、编写服务脚本/root/bin/testsrv.sh,完成如下要求

(1) 脚本可接受参数:start, stop, restart, status

(2) 如果参数非此四者之一,提示使用格式后报错退出

(3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功”

考虑:如果事先已经启动过一次,该如何处理?

(4) 如是stop:则删除/var/lock/subsys/SCRIPT_NAME, 并显示“停止完成”

考虑:如果事先已然停止过了,该如何处理?

(5) 如是restart,则先stop, 再start

考虑:如果本来没有start,如何处理?

(6) 如是status, 则如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示“SCRIPT_NAMEis running…”

如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped…”

其中:SCRIPT_NAME为当前脚本名

2、编写脚本/root/bin/copycmd.sh

(1) 提示用户输入一个可执行命令名称;

(2) 获取此命令所依赖到的所有库文件列表

(3) 复制命令至某目标目录(例如/mnt/sysroot)下的对应路径下;

如:/bin/bash ==> /mnt/sysroot/bin/bash

/usr/bin/passwd==> /mnt/sysroot/usr/bin/passwd

(4) 复制此命令依赖到的所有库文件至目标目录下的对应路径下:

如:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2

(5)每次复制完成一个命令后,不要退出,而是提示用户键入新的要复制的命令,并重复完成上述功能;直到用户输入quit退出

答案:

 一、编写testsrv.sh

  1 #!/bin/bash

  2 

  3 #author:李瑞

  4 #modified:

  5 #version:1.0

  6 #description:

  7 #=======================================================

  8 start () {

  9 local b=/var/lock/subsys/SCRIPT_NAME

 10 

 11 if [ -f $b ];then

 12   echo "service is running"

 13 else

 14    touch /var/lock/subsys/SCRIPT_NAME

 15    [ $? -eq 0 ]&&echo "start service successed"||echo "start service falied"

 16 fi

 17 }

 18 

 19 stop () {

 20 local b=/var/lock/subsys/SCRIPT_NAME

 21 if [ -f $b ];then

 22     rm -fr $b

 23  [ $? -eq 0 ]&&echo "stop service successed"||echo "stop service falied"

 24 else

 25   echo "service has stopped"

 26 fi

 27 }

 28 

 29 restart () {

 30   stop &>/dev/null

 31   echo "service has stopped"

 32   start &>/dev/null

 33   echo "service has restart"

 34 }

 35 

 36 status() {

 37 local b=/var/lock/subsys/SCRIPT_NAME

 38 if [ -f $b ];then

 39 echo "SCRIPT_NAME is running…"

 40 else

 41   echo "SCRIPT_NAME is stopped.."

 42 fi

 43 }

 44 

 45 read -p "请输入(start|stop|restart|status):" num

 46 case $num in

 47 start)

 48      start

 49       ;;

 50 stop)

 51      stop

 52       ;;

 53 restart)

 54      restart

 55       ;;

 56 status)

 57      status

 58      ;;

 59 esac

二、编写copycmd.sh

1 #########################################################################

  2 # File Name: copycmd.sh

  3 # Description: 

  4 # Author: 李瑞

  5 # Version 1.0.0:

  6 # Created_Time: 2016-08-20 12:26:03

  7 # Last modified: 2016-08-20 12:26:1471667163

  8 #########################################################################

  9 #!/bin/bash

 10 

 11 jiben (){

 12       local b=which $1

 13       local c=ldd $b|grep -Eo "/[[:alnum:]]+/[^ ]+"

 14     cp $b /mnt/sysroot/bin/

 15     cp $c /mnt/sysroot/bin/

 16     echo "已将$1和对应的库文件复制到/mnt/sysroot目录下"

 17     echo "请再次输入一个命令"

 18 }

 19 

 20 kuozhan () {

 21         local b=which $1

 22         local c=ldd $b|grep -Eo "/[[:alnum:]]+/[^ ]+"

 23        cp $b /mnt/sysroot/usr/bin

 24        cp $c /mnt/sysroot/usr/bin/

 25        echo "已将$1命令和对应的库文件复制到/mnt/sysroot/usr目录下"

 26        echo "请再次输入一个命令"

 27 }

 28 

 29 while true

 30 do

 31 

 32 read -p "请输入一个命令" cmd

 33 

 34 [ -z "$cmd" ]&&echo "请至少输入一个参数"&&continue

 35 

 36  type $cmd &>/dev/null

 37 if [ $? -eq 0 ];then

 38  ldd which $cmd

 39 

 40  b=which $cmd | sed -r 's@/[^/]+$@@'

 41  case $b in

 42 /bin)

 43       jiben $cmd

 44       ;;

 45 /usr/bin)

 46       kuozhan $cmd

 47      ;;

 48 *)

 49      echo "error comand dir"

 50 esac

 51 else

 52    [ $cmd == quit ]&&echo "程序正在退出"&&break

 53 fi

 54 done

原创文章,作者:因为有你,如若转载,请注明出处:http://www.178linux.com/38808

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班