Linux程序包管理rpm、yum、源码编译

概述:

    众所周知,Linux操作系统本身,必须要借助额外的一些软件,才能完成某些应用的,操作系统如果没有应用程序的填充,就无法创造出生产力,这样即使再完美的操作系统,也毫无用处。那么本章就简要介绍一下Linux系统上对程序包的管理,分为以下三个部分:

    1、程序包的基础理论

    2、rpm包管理器的使用

    3、yum详解

    4、源码包编译安装

    5、软件包管理实例演示

第一章    程序包的基础理论

    1、二进制应用程序的组成部分:

        二进制文件、库文件、配置文件、帮助文件

    2、程序包的命名:

        源码包:name-VERSION.tar.gz

            VERSION:major.minor.release

            组版本号.次版本号.发行号

        RPM包:name-VERSION-release.arch.rpm

            VERSION:major.minor.release

            release.arch:rpm包的发行号

            release.os:例如2.el7.i386.rpm(el7表示支持centos7)

            常见的arch:

                x86: i386, i486, i586, i686

                x86_64: x64, x86_64, amd64

                powerpc: ppc

                跟平台无关: noarch

            包:分类和拆包

                Application-VERSION-ARCH.rpm: 主包

                Application-devel-VERSION-ARCH.rpm 开发子包

                Application-utils-VERSION-ARHC.rpm 其它子包

                Application-libs-VERSION-ARHC.rpm 其它子包

    3、获取程序包的途径:

        <1>系统发行版的光盘或官方的文件服务器(或镜像站点)

        <2>项目的官方站点

        <3>第三方组织制作的包

            EPEL:除发行光盘中的包外,将一些额外的常用的包发布在此

            专用来搜索rpm包的站点,如:

                 http://pkgs.org

                 http://rpmfind.net

                 http://rpm.pbone.net

        <4>自己制作rpm包

        注意:获取到其软件后,要检查其完整性,根据官方提供的校验码进行校验

    4、程序包管理器:

        源代码–>目标二进制格式(二进制程序、库文件、配置文件、帮助文件)–>组织成为一个或有限几个包文件

        程序包管理器:

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

                1、包文件组成 (每个包独有)

                    RPM包内的文件

                    RPM的元数据,如名称,版本,依赖性,描述等

                    安装或卸载时运行的脚本

                2、数据库(公共)

                    程序包名称及版本

                    依赖关系

                    功能说明

                    包安装后生成的各文件路径及校验码信息

                ….

        常见程序包管理器

            debian:dpt,dpkg  后缀名为.deb

                ubantu属于debian系,包管理工具与debian相同

            redhat:rpm  后缀名为.rpm

            S.u.S.E:rpm,但是与redhat系列不兼容,后缀为.rpm

            Gentoo:ports

    5、包的依赖关系:包之间可能存在依赖关系,甚至循环依赖

        解决依赖包管理工具:

            yum: rpm包管理器的前端工具

            apt-get: deb包管理器前端工具

            zypper: suse上的rpm前端管理工具

            dnf: Fedora 18+ rpm包管理器前端管理工具

第二章    rpm包管理器的使用

    CentOS系统上使用rpm命令管理程序包:安装、卸载、升级、查询、校验、数据库维护

    1、安装  rpm -ivh /PATH/TO/rpm包全名

         -i表示安装

         -h:以#显示安装过程;每个#表示2%

         -v:显示详细过程

         -vv:显示更详细的过程

         –nodeps:忽略依赖关系(可以装上去,但可能软件没法正常使用)

         –replacepkgs:重新安装,替换原有安装

         –force:强行安装,可以实现重装或降级

         –test:测试是否能够安装,检查并报告依赖关系及冲突消息,实际是没有装的

         –nosignature:不检查包的签名信息,即不检查来源合法性

         –nodigest:不检查包完整性信息(md5之类的信息)

         –noscripts:安装时不运行自带的4类脚本

         –nopre:安装时不运行pre脚本

         –nopost:安装时不运行post脚本

         –nopreun:安装时不运行preun脚本

         –nopostun:安装时不运行postun脚本

         注意:rpm可以自带脚本,有4类脚本

             preinstall:安装之前运行的脚本,标记为%pre

             postinstall:安装完成后运行的脚本,标记为%post

             preuninstall:卸载之前运行的脚本,标记为%preun

             postuninstall:卸载之后运行的脚本,标记为%postun

    2、升级:(选项与安装时的选项一样)

         rpm -Uvh /PATH/TO/新的包全名   如果装有老版本,则升级;否则,则安装

         rpm -Fvh /PATH/TO/新的包全名 如果装有老版本,则升级;否则,退出

             –oldpackage 表示降级

             –force  强制升级

             –test  测试升级

         注意:

             <1>不要对内核做升级操作,linux支持多内核版本并存,因此,直接安装新版本内核

             <2>如果某原程序包的配置文件安装后曾被修改过,升级时,新版本程序提供的同一个配置文件不会覆盖原有配置文件,而是把新版本的配置文件重命名后(类似FILENAME.rpmnew样式)存放

    3、卸载:rpm -e 包名 (注意,卸载的包不能被其他包所依赖,不然其他包会不正常)

         –nodeps:忽略依赖关系卸载

         –almatches:卸载所有匹配指定名称的程序包的各版本

         –test  测试卸载

    4、查询:

        rpm -q 包名  查询指定包名是否已安装

        rpm -qa  查询所有已经安装的包

        rpm -qi 包名 查询指定包的说明信息

        rpm -ql 包名 查询指定包安装后生成的文件列表

        rpm -qc 包名 查询指定软件包安装的配置文件

        rpm -qd 包名 查询指定包安装的帮助文件

        rpm -qf /PATH/TO/SOMEFILE 查询指定的文件是由哪个RPM包安装生成的

        rpm -q –scripts 包名 查询指定包中包含的脚本

        rpm -q –provides 包名  查询指定包的依赖关系

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

        rpm -q –whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖

        

        如果某个rpm包尚未安装,我们需要查询其相关信息:

        rpm -qpi /PATH/TO/包全名 查询未安装的指定包的说明信息

        rpm -qpl /PATH/TO/包全名 查询未安装的指定包要生成的文件列表

        也就是在之前查询已安装的选项中加 -p

       

        rpm2cpio 包文件|cpio –itv 预览包内文件

        rpm2cpio 包文件|cpio –id “ *.conf” 释放包内文件

    5、校验:检查包安装的文件改变信息

        rpm -V 包名

        如果没有改动,则不会显示任何信息,如果发生了变化,则显示出9位的一个提示信息,如:

            S.5….T.

            每一位的意义是:(未变化的显示为.)

            S  文件大小发生变化

            M  文件权限发生变化

            5  文件的MD5值发生变化

            D  主、次设备号发生改变

            L  readlink路径发生改变

            U  属主发生改变

            G  属组发生改变

            T  文件最近一次修改时间发生改变

            P  性能发生改变

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

        来源合法性验证

            数字签名:利用非对称加密(公钥-私钥),用自己的私钥对文件的校验码(利用单向加密(MD5、SHA)得出文件的特征码)进行加密

        包完整性验证

            centos的公钥在/etc/pki/rpm-gpg目录下            

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

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

            rpm -qa gpg-pubkey*

        在安装程序包时,可以先导入公钥,然后再安装,就不会再提示包的完整性无法验证的提示信息了,导入方法为:

            rpm –import /PATH/TO/公钥路径 

            导入成功后,安装时会自动验证

            如果想手动验证,可以利用 rpm -K 包全名 即可验证

    7、重建数据库(rpm管理器数据库路径/var/lib/rpm/):

        查询、安装、卸载、校验操作,就是通过此处的数据库进行

        如果该数据库坏了,就得进行数据库重建:

        rpm –rebuilddb 重建数据库,一定会重新建立

        rpm –initdb 初始化数据库,当前无任何数据库才建立,有就不建立

第三章    yum详解

    1、rpm程序包管理器的前端工具yum的功能:

        yum服务端的功能:能够利用文件服务器(主要是共享rpm包):通过yum支持的文件共享机制,将各rpm包通过文件服务共享,自动解决依赖关系

            repository:仓库

                <1>各rpm包;

                <2>依赖关系、程序包安装后所能够生成的文件等元数据文件(放置于特定目录repodata下);

        yum客户端:

            <1>配置文件:指定各个可用的yum仓库

            <2>缓存元数据:yum客户端会到各可用yum仓库获取元数据,并缓存至本地

            <3>分析元数据:分析依赖关系的包的安装和未安装情况,以及具体的操作请求完成元素分析,可能包括检查依赖关系,文件列表等信息

            <4>根据元数据的分析结果,执行具体操作(安装、卸载、查看)

    2、客户端配置文件指定对应服务器的访问方式:

        根据文件服务的协议,指定服务和路径

            如果是ftp 则ftp://server/path/to/repo

            如果http 则http://server/path/to/repo

            如果是本地文件 则file:///path/to/repo

    3、yum客户端配置

        要使用yum管理应用程序,首先要配置其可用的yum仓库,保存在配置文件中/etc/yum.conf(保存核心配置)  /etc/yum.repo.d/*.repo(保存各仓库的信息)

        配置文件格式:由两段组成

            [main] 主配置段

            [repo_name] 仓库配置段

        配置repo:

            [repo_ID]

            name=STRING

            baseurl=仓库的访问路径   只需指向repodata目录的上一级目录即可

            enabled={1|0}      是否启用该仓库,如果不指定,默认是启用状态

            gpgcheck={1|0}     是否启用gpg检查包的完整性

            gpgkey=公钥路径    可以在本地,也可以是服务器端路径            

            enablegroups={1|0}   该仓库是否支持程序包组的安装

            cost=              定义此仓库的开销,默认为1000,取值越小,越优先使用

            例如:

                [TEST]

                name=testyum

                baseurl=http://10.1.0.1/cobbler/ks_mirror/CentOS-6-x86_64/

                gpgcheck=1

                gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

                enabled=1

            配置文件中可用的4个宏:

                $releasever:程序的版本,对yum而言,指的是centos-release版本;只替换为主版本号,如CentOS 6.8则替换为6

                $arch :平台架构

                $basearch:基础平台,如i686,i586等的基本架构为i386 64位系统为X86_64

                $YUM0-9:在系统中定义的环境变量,可以在yum中使用

        利用命令配置客户端repo:

            yum-config-manager –add-repo=http://10.1.0.1/cobbler/ks_mirror/CentOS-Xx86_64/

            yum-config-manager –disable “仓库名" 禁用仓库
            yum-config-manager –enable “仓库名” 启用仓库

        blob.png

        blob.png

        blob.png

    4、客户端命令yum:

        语法:yum [选项] 子命令

        常见选项:

            –nogpgcheck  安装时不进行gpg检查

            -y   自动回答为yes

            -q   静默模式,不输出内容

            –disablerepo=REPO_ID   临时禁用此处的repo源

            –enablerepo=REPO_ID   临时启用此处的repo源

            –noplugins   表示禁用所有插件

        yum常见子命令:

            install PACKAGE_NAME… 安装指定包,可以同时安装多个

            reinstall PACKAGES_NAME… 重新安装指定包,可以同时安装多个

            check-update 检查可升级的包

            update PACKAGE_NAME…   升级指定的程序包,可多个

                技巧:如果检查出来可用升级的版本有多个,例如有X-1.2.1   X-1.2.2  X-1.2.3想要升级到指定的版本,则可以用yum update PACK_NAME X-1.2.2 (也就是指定版本)

            downgrade PACKAGE_NAME  降级指定程序包

            erase|remove PACKAGE_NAME。。。 卸载指定的包,可以同时卸载多个。

                注意,用yum卸载的时候,会同时卸载依赖的包,故一般用rpm命令进行卸载

            whatprovides|provides /PATH/TO/SOMEFILE 查询某文件是由哪个包安装生成的(功能类似于rpm -qf)

            repolist [all|enabled|disabled] 显示可用的yum仓库列表,all表示所有的仓库信息,enabled表示可用的仓库信息,disabled表示不可用的仓库信息,如果不指定,默认显示可用的仓库信息

            clean all|packages|metadata|expire-cache|rpmdb|plugins 可以指定清除本地缓存的all所有缓存信息,packages包的信息,metadate元数据信息,expire-cache过期的包的信息,rpmdb rpm数据的信息,plugins插件信息(访问yum服务器时会缓存一些数据到本地/var/cache/yum下)

            list 列出所有已安装,和仓库中所有未安装的包,后面显示为@….或installed表示已经安装了的

                list installed 表示只显示已安装的包的信息

                list available 表示只显示可用的,未安装的包的信息

                list “通配符风格的表达式”   列出满足条件的包

            info PACKAGE_NAME 表示显示出指定包的信息

            groupinfo "PACKAGE_GROUP_NAME" 表示显示指定包组的信息

                三个跟开发相关的常用包组

                    Desktop Platform Development:桌面平台开发环境

                    Server Platform Development:服务器平台开发环境

                    Development Tools:开发工具包

            grouplist 列出所有包组信息

            groupinstall “PACKAGE_GROUP_NAME”  安装指定包组

            groupremove “PACKAGE_GROUP_NAME”  卸载指定包组

            history  可以显示yum命令的使用历史,谁、做了什么操作

                    yum history   表示显示yum历史
                    yum history info 6   显示yum历史中第6条历史的详细信息
                    yum history undo 6   撤销yum历史中第6条历史所做出的改变,相当于还原

            install /PATH/TO/PACKAGE_FILE  不从yum仓库安装包,而是从本地安装,从本地安装的时候,有时候会安装不上去,因为yum会默认检查包的完整性,要想安装,要在包路径后加上选项–nogpgcheck

            makecache 构建缓存

            search STRING  根据提供的关键字,搜索程序的包名及summary信息

        blob.png

        QQ图片20160823185238.png

        2.png

        3.png

        4.png

    5、yum日志:/var/log/yum.log

        blob.png

    6、创建服务端yum仓库

        先下载仓库中诸多的rpm包到某个目录

        创建yum仓库:

            要创建yum仓库,必须要先安装createrepo程序,该程序能够自动创建repodata目录文件

                使用createrepo命令创建repodata目录:

                语法:createrepo [OPTIONS] <DIRECTORY>

                基本不用加选项,直接后面跟上包的路径,代表直接在包路径里面生成repodata目录

        步骤:

            1、下载相应的rpm包到某个目录,本实验为/testdir/repotest/目录

            2、切换到该rpm包目录

            3、利用createrepo命令,针对当前目录创建repo仓库repodate文件

            4、验证仓库是否可用

        blob.png

        blob.png

        blob.png

        blob.png

        blob.png

第四章    源码包编译安装

    1、源码包的相关介绍

        有些包的格式为XXXXX.src.rpm这类包虽然是rpm的格式,但是包里面的内容并没有真正编译,对于这类包,需要利用rpmbuild命令制作成二进制格式的rpm包,而后再安装;

还有些包直接就是src的源码包,这样需要编译安装了,另外有些时候,现有编译过后的rpm包在有些特性上不能满足我们的使用时,也需要手动下载源码包,然后进行编译安装

     

        开源程序源代码的获取:

            官方自建站点:appache.org、mariadb.db

            代码托管站点:SourceForge、Github.com、code.google.com

    

    2、源代码组织格式:

        多文件:文件中的代码之间,很可能存在跨文件依赖关系
        C、 C++: make (项目管理器, configure –>Makefile.in –> makefile)

    3、C、C++编译安装的三步骤:

        <1>./configure:

            功能:

                <a>通过选项传递参数、指定启用特性、安装路径等、执行时会参考用户指定以及Makefile.in生成makefile;

                <b>检查依赖到的外部环境,

        <2>make

            功能:根据makefile 文件,构建应用程序

        <3>make install

            功能:将文件利用install命令复制到指定路径

        在安装前,应该查看源码包内的INSTALL、README文档

    4、编译C源代码:(注意:./configure、make、make install都要cd切换到源码包解压展开后的目录里面进行)

        前提:提供开发工具及开发环境

            开发工具:make、gcc等

            开发环境:开发库、头文件

            glibc:标准库

            以上的条件在Linux系统上通过安装包组来提供:

                centos 6:“Development Tools” “Server Platform Development”

                centos 7: “Development Tools
Development” “Creative Workstation”

        第一步:./configure脚本

            选项:指定安装位置、指定启用特性等

                –help可以获取其支持使用的选项

            选项分类:

                安装路径设定:

                    –prefix=/PATH/TO/SOMEWHERE  指定默认安装位置,默认为/usr/local下

                    –sysconfdir=/PATH/TO/SOMEWHERE  配置文件安装路径

                    …..

                system types:指明编译时系统类型(只在交叉编译时会使用)

                optional features:可选特性

                    –disable-FEATURE

                    –enable-FEATURE[=ARG]

                optional packages:可选程序包、依赖到的程序包

                    –with-PACKAGE [=ARG]

                    –without-PACKAGE

        第二步:make

        第三步:make install

    5、编译安装完成后的相关操作:(假设编译安装的目录在/usr/local/http2/目录下)

        <1>导出二进制程序(bin)目录至PATH环境变量中,否则需要用绝对路径使用编译安装的文件生成的二进制程序

            导出方法:

                在/etc/profile.d/目录下新建一个该程序的文件名.sh的文件

                在文件里面添加二进制程序路径

                export PATH=$PATH:/usr/local/http2/bin/

        <2>导出库文件路径(lib)

            新建文件/etc/ld.so.conf.d/NAME.conf,在文件中添加:/usr/local/http2/lib

            让系统重新生成缓存:ldconfig [-v]

        <3>导出头文件(include)

            可以将安装路径下的include的cp到/usr/include目录下

            也可以创建软连接到该目录下

                ln -sv /usr/local/http2/include/ /usr/include/http2/

        <4>导出帮助手册

            编辑/etc/man.conf文件

            将安装目录下的man路径添加一个MANPATH条目:

            MANPATH /usr/local/http2/man

第五章    软件包管理实例演示

      

    1、删除kernel包后,无法启动,并恢复之

        步骤:

        <1>删除kernel并重启

        1.png

        2.png

        

        <2>插入系统安装光盘,修改BIOS中BOOT启动项为从光盘启动

        3.png

        <3>进入rescue救援模式

        4.png

        5.png

        6.png

        7.png

        <4>在救援模式下,利用光盘自带的微型系统,运行rpm安装命令,安装kernel。因为进入救援模式下的系统为光盘的系统,如果用rpm安装,则默认安装位置是光盘上的系统,而我们希望的是安装到本机的系统,利用df命令可以看到本机的系统被挂载到/mnt/sysimage路径下,因此在利用rpm来安装kernel软件包时,需要利用–root=/mnt/sysimage 

        8.png

        10.png

        <5>安装完成后重启,进入本地系统进行验证

        11.png

        12.png

    2、源码安装apache

        步骤:

        <1>下载源码包并解压至某目录

        1.png

        

        <2>cd切换到解压目录并查看相关编译安装帮助和选项信息

        2.png

        <3>执行./configure

        3.png

        4.png

        <4>执行make

        5.png

        6.png

        <5>执行make install

        7.png        

        8.png

        <6>导入二进制程序文件路径到PATH环境变量

        erjinzhi.png

        <7>导入库文件

        kufile.png

        <8>导入头文件

        include.png

        <9>导入man帮助文件路径

        man.png

        <10>启动服务,验证是否安装成功

        11.png

        QQ图片20160823211625.png

        blob.png

原创文章,作者:M20-1倪文超,如若转载,请注明出处:http://www.178linux.com/37768

(0)
M20-1倪文超M20-1倪文超
上一篇 2016-08-24
下一篇 2016-08-24

相关推荐

  • raid各级别特性

      简介 RAID是一个我们经常能见到的名词。但却因为很少能在实际环境中体验,所以很难对其原理 能有很清楚的认识和掌握。本文将对RAID技术进行介绍和总结,以期能尽量阐明其概念。 RAID全称为独立磁盘冗余阵列(Rdeundant Array of Independent Disks),基本思想就是把 多个相对便宜的硬盘组合起来,成为一个硬盘阵列组…

    Linux干货 2016-01-19
  • 学习宣言

            学习计划:每天至少2个小时的学习,循序渐进,先通读再精读。         学习目标:成为运维的高手,走上人生巅峰。      &nb…

    Linux干货 2016-10-25
  • 马哥教育网络21期+第八周练习博客

    马哥教育网络21期+第八周练习博客 # 1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 集线器:工作于ISO模型的物理层,防止由于距离远,信号衰减; 网桥:用来连接不同网段,隔离冲突域; 二层交换机:二层交换机一般做为了三层交换机以下,利用设备mac地址进行通信,可以划分vlan,隔离广播域; 三层交换机:用于核心数据转发,不…

    Linux干货 2016-09-05
  • bash脚本编程class3

    bash脚本编程class3—函数定义与数组使用相关     一.函数的使用以及数组的定义   我们通过学习知道,当编辑一个shell脚本的时候,可以在这个shell脚本中调用其他的shell脚本来实现特定的功能。在实际工作环境中,用很多shell实现的功能是我们常常使用到的,如果一次一次的调用这些shell脚本会显得非常麻烦。…

    Linux干货 2016-08-24
  • 有关磁盘管理与文件系统

    硬盘物理结构      扇区  磁头  磁道   柱面   磁道数      扇区*一个磁道上的扇区个数*磁头数=柱面      柱面*磁道数=硬盘大小      一个扇区512字节   &…

    2017-08-19
  • find命令用法及示例

    文件查找 locate,find可是实现在文件系统上查找符合条件的文件 实现工具:locate,find locate有几下几个特性 1、依赖于事先构建好的索引库; 2、系统自动实现;(周期性任务) 3、手动更新数据库(updatedb) /var/lib/mlocate/mlocate.db 工作特性: 查找速度快; 模糊查找; 非实时查找 lo…

    Linux干货 2016-08-18