14(23)软件安装:RPM,SRPM与YUM功能


1. 软件管理简介

    1.1linux界的两大主流:RPM与DPKG 【1-0】
        1.dpkg
        开发者:Debain Linux社群
        linux distrbution代表:衍生于Debain的发行版(Debain,B2D,Ubuntu等)
        使用指令:dpkg
        在线升级机制:APT(apt-get)
        2.rpm
        开发者:Red Hat
        linux distrbution代表:Fedora, CentOS, SuSE等
        使用指令:rpm,rpmbuild
        在线升级机制:yum
    1.2什么是RPM与SRPM
        1.RPM(redhat package manager):yi以一种数据库的方式安装到linux的一套软件管理机制
                档名格式:xxx.rpm
                直接安装与否:可
                内含程序类型:已编译
                可否修改参数并编译:不可(没有configure和makefile)
                特点:【1-1】
                缺点:【1-2】
        2.SRPM(source RPM):包含原始码,相依性说明
                档名格式:xxx.src.rpm
                直接安装与否:不可(需要先编译成rpm)
                内含程序类型:未编译的原始码
                可否修改参数并编译:可(有configure和makefile)
    1.3什么是i386, i586, i686, noarch, x86_64【1-3】
        案例:rp-pppoe-3.1-5.i386.rpm        ----    一个完整的rpm软件包名(软件名称-软件的版本信息-释出的次数-适应的硬件平台-扩展名)【1-4】 
    1.4RPM的优点【1-5】
    1.5RPM属性相依的克服方法:YUM在线升级【1-6】
        /var/cache/yum        ----yum本机清单

2. RPM软件管理程序:rpm
    2.1RPM默认安装的路径
        /etc        ----一些配置文件放置的目录
        /usr/bin        ----一些可执行文件
        /usr/lib        ----一些程序使用的动态函数库
        /usr/share/doc        ---一些基本的软件手册和说明文件
        /usr/share/man        ----一些man page
    2.2RPM安装【1-8 常见的一些选项与参数】
        注意:尽量不要使用 --force
        # rpm -i rp-pppoe-3.5-32.1.i386.rpm        ----安装rp-pppoe-3.5-32.1.i386.rpm这个软件
        案例一:安装并显示详细安装信息和安装进度
        # rpm -ivh rp-pppoe-3.5-32.1.i386.rpm
        案例二:一次安装多个软件
        # rpm -ivh a.i386.rpm b.i386.rpm *.i386.rpm        ---后面直接接很多软件
        案例三:直接由网路上面某个档案安装,以网址安装
        # rpm -ivh http://website.name/path/pagname.rpm
        案例四:在没有网络的情况下,通过原始光盘安装一个名为pam-devel的软件
        # mount /dev/cdrom  /media        ----挂载光盘
        # find /media -name 'pam-devel'        ----找出档案的实际路径
        # rpm -ivh pam-devel..  --test        ----测试此软件是否具有相依性
        # rpm -ivh pam-devel..        ----直接安装
        # umount /dev/vdrom        ----卸载光盘
    2.3RPM升级与更新(upgrate/freshen)
        注意:在不使用yun更新的情况下,如果想升级系统所有软件,可以从映象站下载更新数据,然后通过-Fvh一口气升级【1-9】
    2.4RPM查询(/var/lib/rpm/)【1-11】
        注意:查询软件相关信息是不需要加上软件的版本号(会到/var/lib/)rpm这个数据库去查;查询软件相关档案信息是需要完整的档名
                1.一些入门案例
        案例一:找出主机中是否安装有logrotate这个软件
        # rpm -q  logrotating    ----不必加上版本
        范例二:列出上题当中属于该软件所提供的所有目录与档案
        # rpm -ql logrotate        ----可以看出该软件到底提供了多少档案与目录,也可以追踪软件的数据
        范例三:列出logrotate这个软件 的相关说明数据
        # rpm -qi logrotate
        范例四:分别找出logorate的配置文件与说明档
        # rpm -qc logrotate   
        # rpm -qd logrotate 
        范例五:若要成功安装,还需要什么软件
        # rpm -qR  logrotate
        范例六:找出/bin/sh是哪个软件提供的
        # rpm -qf /bin/sh        ---后面接的是档案而不是软件(查询系统的档案属于哪一个软件)
        范例七:下载一个rpm档案,查看档案的需求档案
        # rpm -qpR filename.i386.rpm
                2.一些练习案例
                  # rpm -qa | grep ^c | wc -l        ----查询系统上以c开头的软件(显示行数)
                  # rpm -qc httpd        ----查看apache所有配置文件放置在何处(apache的rpm软件文件名为httpd)
                  # rpm -ivh http://web.site.name/path/httpd-x.x.xx.i386.rpm    --replacepkgs
                  # rpm -qf /etc/crontab        ----如果误删了某个程序的配置文件,重新安装它但不知道程序名,虽然文件没了但/var/lib/rpm当中还有记录这个rpm软件
    2.5RPM验证与数字签名(verify/signature)
        1.验证(rpm -V)【1-12】
            注意:如果查到的变更信息发生在二进制文件信息上就表示比较危险,有可能被入侵过
            范例一:列出主机内的logrotate这个软件是否被更动过
            # rpm -V logrotate        
            范例二:查询一下,你的/etc/crontab是否被更动过(如何理解文件变更信息的含义【1-13,14】)
            # rpm -Vf /etc/crontab        ---- -Vf 某个档案是否被更动过(会列出被更动的信息类型) 
        2.数字签名(digital signature)【1-15】
            注意:
            1.CentOS使用的数字签名系统GnuPG(GNP Privacy Guard,GNP)运用哈希算法
            2.如果忘记加数字签名,很多原始软件就不能安装,除非用rpm选项略过数字签名
            # ll /etc/pki/RPM-GPG-KEY-CentOS-5        ----CentOS的数字签名位置
            # cat  /etc/pki/RPM-GPG-KEY-CentOS-5        ----从中可以看出数字签名的本质是随机数
            # rpm --import  /etc/pki/RPM-GPG-KEY-CentOS-5        ----安装这个数字签名档
            # locate GPG-KEY        ----查找系统中的数字签名档
            # find /etc -name '*GPG-KEY'
            # rpm -qa | grep pubkey        ----查看系统密匙的内容,列出密匙软件名称
            # rpm -qi gpg-pubkey-e8562897-459f07a4        ----查询这个软件的详细信息
    2.6RPM反安装与重建数据库(erase/rebuldedb)
        注意:发生依赖关系时,先安装的后移除
        1.找出与pam有关的软件名称,并移除pam这个软件
        # rpm -qa | grep pam        ----找到pam有关的软件
        # rpm -e pam        ----会发现因为依赖问题无法卸载(可以通过--nodeps强制卸载,不过会造成系统中其他软件的错误)
        # rpm -e pam-devel        ----pam-devel依赖于rpm,位于最顶层,可以顺利卸载
        # rpm  --rebuidedb        ----重建数据库

3.SRPM的使用:rpmbuide
    注意:rpm软件包使用rpm指令,srpm使用rpmbuide指令
    3.1利用默认值安装SRPM档案(--rebuide/--recomplie)
    # rpm --rebuide  SRPM软件包        ----编译并打包
    # rpm --recompile  SRPM软件包     ----编译打包并安装 
    3.2SRPM使用的路径与需要安装的软件
        1.安装SRPM过程中使用到的路径【1-17】
        注意:
            1.不同发行版会稍微不同,但一般都会在/usr/src/底下,以CentOS为例:/usr/src/redhat/[SPES/SOURCES/BUILD/RPMS/SRPMS]
            2.如果编译过程出现设定错误或者不明的错误,/tmp底下会产生一个相应的错误档,可以根据这个档案进行除错的工作
            3.编译完成后除/usr/src/redhat/RPM以外的档案都会被删除
        2.一个用于观察变编译过程的案例:
            # rpm --rebuild rp-pppoe-3.5-32.1.src.rpm        ----用默认设定编译,并以rpm机制封装起来
            # ll /usr/src/redhat/RPMS/i386/        ----底下有编译好的.rpm格式的文件
    3.3配置文件的主要内容
        案例一:修改配置文件,然后安装
        注意: rp-pppoe.spec 的规则
            1.整个档案以Summary开头,这部分的设定是最基础的内容
            2.每个不同的段落都以%开头,例如%prep,%install
        # rpm -i rp-pppoe-3.5-32.1.i386.rpm        ----会将SRPM解压后放置到/usr/src/redhat/
        # find /usr/src/redhat/    -type f        ----主要含有原始码和一个重要的配置文件【1-18】
        # cd /usr/src/redhat/SPECS        ----设定参数当就在这个地方
        # vim rp-pppoe.spec        ----    主要的将SRPM编译成RPM的配置文件,依据设定,最终的档名会是{name}-{version}-{release}-{ExclusiveArch}.rpm【1-19,20,21,22】,几个重要段落的说明【1-23,24】
    3.4SRPM的编译指令(-ba/-bb)
        # rpm -ba rp-pppoe.spec        ----编译并同时产生rpm档案和srpm档案 
        # rpm -bb rp-pppoe.spec        ----仅编译成rpm,执行过程【1-25】
    3.5一个打包自己软件的案例
        意:这个案例我们使用之前用c语言完成的main,最终将其封装成为main-1.1.i386.rpm
        1.在/usr/local/src/底下建立一个名为main-0.1的目录,并将源码解压缩到这个目录
            # mkdir /usr/local/src/main-0.1        ---建立新目录
            # tar -zxvf main.tgz    -C /usr/local/src/main-0.1        ----解压缩到指定目录
            # cd /usr/local/src/main-0.1
            # vim Makefile        ----建立原始码所需的make规则
            LIBS=-lm
            OBJS=main.o haha.o sin_value.o cos_value.o
            CFLAGS=-Wall
            main:${OBJS}
                gcc -o $@ ${OBJS} ${LIBS}
            clean:
                rm -f ${OBJS}
            install:
                install -m 755 main $(RPM_INSTALL_ROOT)/usr/local/bin/main        ----安装到指定目录
            # cd ..
        2.将打包好的源码放到/usr/src/redhat/下指定目录
            # tar -zcvf main-0.1.tar.gz main-0.1        ----将main-0.1这个目录压缩成为main-0.1.tar.gz
            # cp main-0.1.tar.gz /usr/src/redhat/SOURCES        ----将压缩好的源码放入指定目录
        3.建立*.spec的配置文件
            # cd /usr/src/redhat/SPECS
            # vim main.spec        ----【1-26】
            Summary:    calculate sin and cos value.
            Name:    main
            Version:    0.1
            Release:    1
            Lience:    GPL
            ...
         4.开始编译成为RPM与SRPM
            # rpmbuide -ba main.spec
         5.安装、测试、实际查询
            # rpm -ivh /usr/src/redhat/RPMS/i386/main-0.1-1.i386.rpm        ----安装
            # rpm -ql main        ----列出属于该软件的档案与目录
            # rpm -qi main        ----列出该软件的属性信息(main.spec)

4.YUM在线升级机制
    4.1利用yum进行查询、安装、升级与移除功能
        4.1.1查询功能(yum [list/info/search/provides/whatprovides])【1-27】
            # yum search raid        ----查找磁盘阵列相关的软件
            # yum info mdadm        ----找出mdadm这个软件的功能为何类似rpm -qai
            # yum list        ----列出yum服务器上面提供的所有软件名称,类似rpm -qa
            # yum list updates        ----列出目前服务器上可以升级的软件
            # yum provides passwd        ----列出提供passwd这个档案的软件有哪些,类似rpm -qf
            案例:利用yum找出pam打头的软件有哪些,其中还未安装的有哪些
            # yum list pam*         ----显示信息分为Installed packages和Available packages(未安装或者可升级)两部分
        4.1.2安装、升级功能:yum [install | update] 软件【1-28】
            案例一:将前一个练习找到的未安装的软件安装起来
            #  yum install pam-devel        ----会自动解决依赖问题
        4.1.3移除功能:yum[remove] 软件
            # yum remove pam-devel        ----会自动检查依赖问题
    4.2yum的配置文件
        4.2.1入门案例
        # vim /etc/yum.repos.d/CentOS-Base.repo        ----编辑base这个容器的配置文件【1-29】
        案例一:列出目前yum server所使用的容器有哪些
        # yum repolist all        ---会发发现有多个容器,,enabled是激活的,因为有对应多个容器的配置文件
        4.2.1修改容器产生的问题与解决之道
        问题:本机列表与yum服务器的列表不同步,无法更新
        原因:修改系统默认配置文件,指定特定的映象站台,但没有修改容器名,导致yum下载对应容器的清单/var/cache/yum下
        解决:清除系统中的旧数据(yum clean [packages/headers/all])
        #  yum clean all        ----清除系统上所有的容器的数据【1-30】
    4.3yun的软件群组功能【1-31】
        案例一:列出目前容器与本机上面的可用于安装过的软件群组有哪些
        # yum grouplist        ----会发现系统上面大部分的软件都是以群组的方式安装的
        # yum groupinstall XFCE-4.4        ----安装XFACE这个桌面环境接口
    4.4全系统自动升级
        # vim /etc/crontab
        0 3 * * * root /usr/bin/yum -y update        ----设定每天3am在带宽充裕时升级系统(-y自动回答yes来完成下载与安装)

5. 管理的抉择:RPM还是Tarball【1-32】
6.重点回顾【1-33】
7.本章习题
    情景模拟题一:实际安装php,php-mysql,php-devel,httpd-devel等软件
    # rpm -q httpd httpd-devel php php-devel php-mysql        ----确认这些软件是否已经安装
    # ifconfig eth0        ----查看网卡设定
    # route -n        ----查看路由设定
    # ping -c 2 192.168.201.254        ----尝试连接路由 ,看路由是否回应,如果有说明TCP/IP设定好了
    # dig www.baidu.com        ----测试查看百度的IP,确认DNS设置正确
    # yum install  httpd httpd-devel php php-devel php-mysql         ----安装
    简答题:【1-34,35】
原文地址:https://www.cnblogs.com/eli01/p/3559688.html