Linux系统程序包管理—rpm

 概述:

     本章内容:软件的运行环境,软件包基础,rpm包管理,yum管理,定制yum仓库,编译安装

一、软件运行环境

    1.□API:Application Programming Interface (应用程序开发接口)

            POSIX:Portable OS(国际标准)

       程序源代码–> 预处理–> 编译–> 汇编–> 链接

            静态编译:

            共享编译:.so

       ABI:Application Binary Interface(应用二进制程序接口)

          Windows与Linux不兼容

               linux:文件格式:ELF(Executable and Linkable Format)

               win:文件格式:exe,msl PE(Portable Executable)

        □库级别的虚拟化

              Linux: WINE(提供模拟windows的库,运行win环境)

              Windows: Cywin(提供linux的运行环境)

     2.开发语言

        □系统级开发

            C/C++(依赖于c库);

            httpd,nginx,vsftpd,go

        应用级开发

            java(依赖于jvm虚拟机)

            Python(openstack云站),php,perl(依赖于per解释器),ruby

     3.程序格式:

       ▷c/c++

          源代码:文本格式的程序代码;

          编译开发环境:编译器,头文件,开发库

          二进制格式:文本格式的程序代码–>编译器–>二进制格式(二进制程序、库文件、配置文件、帮助文件)

      ▷java/Python

           源代码:编译能够在其虚拟机(jvm/pvm)运行的格式;

           开发环境:编译器、开发库

           二进制

      ▷项目构建工具

             c/c++:make      jave:maven

二、包管理

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

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

   2.程序包管理:

      ▷源代码–>目标二进制格式(二进制程序、库文件、配置文件、帮助文件)–>组织成为一个或有限几个“包文件”(安装,升级,卸载,查询,校验)

      ▷程序包管理器:

            deblan: dpt,dpkg  以".deb"后缀

            redhat: rpm (redhat package manager) 以 ".rpm"后缀 

            S.u.S.E:rpm, ".rpm"命令

     3.包命令格式

        □源代码

            name-VERSION.tar.gz|bz2|xz

                VERSION: major(主版本号).minor(次版本号).release(发行号)

        rpm包命名格式

             name-VERSION-release.arch.rpm

              VERSION: major.minor.release(rpm包发行号)

             changelog文档(内容修复改进的相关文档)

包.png

        例:bash-4.2.46-19.el7.x86_64.rpm

               release:release.OS

             常见的arch:

               x86: i386, i486, i586, i686

               x86_64: x64, x86_64, amd64powerpc: ppc

               跟平台无关:noarch (适用于所有平台)

     4.包:分类和拆包

             Application-VERSION-ARCH.rpm: 主包

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

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

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

主支包.png

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

      自动解决依赖包管理前端工具

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

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

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

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

    5.库文件

      □查看二进制程序所依赖的库文件:

            ldd /PATH/TO/BINARY_FILE

      管理及查看本机装载的库文件:

            ldconfig

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

            配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

            缓存文件:/etc/ld.so.cache

     6.包管理器

      □程序包管理器

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

      程序包的组成清单(每个程序包单独实现)

             RPM包内的文件清单

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

             安装或卸载时运行的脚本

      数据库(公共)  路径:/var/lib/rpm 

             程序包名称及版本

             依赖关系

             功能说明

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

   7.程序包的来源

      □管理程序包的方式:

            使用包管理器:rpm

            使用前端工具:yum, dnf

      获取程序包的途径

          (1) 系统开发版的光盘或官方的服务器(或CentOS镜像站点)

                https://www.centos.org/download/

                http://mirrors.aliyun.com

                http://mirrors.sohu.com

                http://mirrors.163.com

          (2) 项目官方站点

          (3) 第三方组织:

                Fedora-EPEL

                     Extra Packages for Enterprise Linux

                Rpmforge:RHEL推荐,包很全

                搜索引擎:

                     http://pkgs.org

                     http://rpmfind.net

                     http://rpm.pbone.net

                     https://sourceforge.net/

            (4) 自己制作

                  注意:检查其合法性:来源合法性,程序包的完整性


三、CentOS 系统上rpm命令管理程序包

  1.安装、升级、卸载、查询和校验、数据库维护  (都是通过rpm命令来实现的)

      rpm命令:rpm [OPTIONS] [PACKAGE_FILE]

            安装:-i,–install

            升级:-U,–update,-F,–freshen

            卸载:-e,–erase

            查询:-q,–query

            校验:-V,–verify

            数据库维护:–builddb,–initdb

     2.安装

         □ rpm {-i|–install} [install-options] PACKAGE_FILE…

                   -v: verbose 显示详细信息

                   -vv: 更详细的输出

            rpm -ivh PACKAGE_FILE(真正安装执行操作使用的命令)

安装.png

         □[install-options]

                -h: hash marks 输出进度条;每个#号表示2%的进度

                –test: 测试安装,检查并报告依赖关系及冲突关系,但不真正执行安装;称为dry run(干跑)模式

test.png

                –nodeps:忽略依赖关系,不建议;

                –replacepkgs:替代原来的包,重新安装(先把由原来的包删除再重装)

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

                –nodigest:不检查包完整性

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

                    注意:rpm自带四类脚本

                          %pre:安装前脚本;   –nopre

                          %post:安装后脚本;  –nopost

                          %preun:卸载前脚本; –nopreun

                          %postun:卸载后脚本;–nopostun

    3.升级

      □rpm {-U|–upgrade} [install-options] PACKAGE_FILE…

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

              -U(upgrade):安装有旧版程序包,则“升级”

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

              -F(freshen):安装有旧版程序包,则“升级”

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

      □升级命令:

         rpm -Uvh PACKAGE_FILE …

         rpm -Fvh PACKAGE_FILE …

              –oldpackage:降级(回滚操作)

              –force: 强行升级

      注意:

        (1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,可以直接安装新版本内核;

        (2) 如果源程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留。

   4.卸载

       移除已安装的程序包

       rmp {-e|–erase}[–allmatches][–nodeps][–test] PACKAGE_NAME

      (注意:卸载和查询是包的名,因为包已经存在了;而安装和升级,包是不存在的,所以是包的文件路径)

          简单用法:rpm -e PACKAGE_NAME…

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

       –nodeps:忽略依赖关系

       –test:测试卸载,dry run 模式

      5.查询

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

        ▷[select-options]

              -q PACKAGE_NAME :查询某包或某些包是否安装

              -qa: 查询已安装的所有包

-a.png

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

-f.png

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

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

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

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

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

      □[query-options]查询选项

              –changelog:查询rpm包的changelog(变更记录)

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

-qc.png

              -d: 查询程序包安装完成后所生成的帮助文档

-qd.png

              -qi,-info: information  程序包相关的信息,版本号,大小,所属的包组等

-qi.png

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

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

              -R,–requires: 查询指定的程序包所依赖的CAPABILITY;

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

-pro.png

    □用法:

          -qi PACKAGE; -qf FILE; -qc PACJAGE; -ql PACKAGE; -qd PACKAGE

          -qpi PACKAGE_FILE; -qpl PACKAGE_FILE; -qpc PACKAGE_FILE,.. 

    6.校验:     

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

        常见用法:rpm -V PACHAGE_NAME

        当没有输出结果时表示软件包完整ok,当有相应的结果输出表明对应的内容有修改,及具体如下:

          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:mTimediffers 文件的创建时间已被改变

          P:capabilities differ 

    □包来源合法性验正及完整性验正

           完整性验正:SHA256

           来源合法性验正:RSA

         ▷获取并导入信任的包制作者的秘钥

                对于CentOS发行版来说:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 

         ▷验证:

                 (1)安装此组织签名的程序时,会自动执行验证;

                (2)手动验证:rpm -K PACKAGE_FILE

验证.png

    公钥加密:

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

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

                public key: 公钥,公开所有人

                secret key: 私钥, 不能公开

     导入所需要公钥:

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

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

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

           rpm -qagpg-pubkey*

     7.数据库重建

      rpm数据库路经:/var/lib/rpm

            查询操作:通过此处得到数据库进行

     rpm {–initdb|–rebuilddb}

数据库.png

            获取帮助:CentOS6 man rpm

                         CentOS7 man rpmdb 

             –initdb: 初始化数据库。当前无任何数据库,则新建之;当前有时不执行任何操作。

             –rebuilddb:重新构建。无论当前存在与否,都会直接重新创建数据库。

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

(0)
上一篇 2016-09-01 08:50
下一篇 2016-09-01 08:50

相关推荐

  • iptables 从入门到进阶

    Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(或网络层防火墙)。在Linux中netfilter和iptables都是指Linux防火墙。区别在于: netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”的防火墙功能体系。 iptables:指的是…

    Linux干货 2017-01-10
  • Linux Basics–part4

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限 ~]# cp -rf /etc/skel/ /home/tuser1 && chmod -R go=— /home/tuser1 [root@ronny1 ~]# ll -d /home/tuser…

    Linux干货 2017-08-07
  • Linux基础命令 -管道密切配合使用 tee

    基础命令和管道密切配合使用  tee     基础命令:tee   tee命令 功能: 把命令1的STDOUT保存在文件名中,然后管道输入给命令2; 补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。 使用场景: 1.保存不同阶段的输出 2.复杂管道的故障排除 3.同时查看和记录…

    Linux干货 2016-08-03
  • 第一周

       注意:请同学们不要参考我这个,怕误导,谢谢 A.计算机组成及其功能     1.计算机的组成分:硬件和软件         硬件:CPU,存储设备(内存,硬盘),输入输出设备(键盘,显示器,鼠标)  &n…

    Linux干货 2016-12-31
  • linux bash环境变量简单总结

    一.环境变量简介Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都 是相同的,这个默认环境实际上就是一组环境变量的定义。 环境变量是全局的,设置好的环境变量可以被所有当前用户所运行的程序所使用。 用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。 …

    Linux干货 2015-09-14
  • Shell脚本编程—特殊用法(select)及函数、递归

    Shell脚本编程—特殊用法及函数   一、while的特殊用法: 1、使用格式: while read 变量名;do    循环体 done </PATH/TO/filename 注:依次从指定的文件中的内容逐行读取,并把读取到的每行赋值给变量。 2、例题: 扫描/etc/passwd文件每一行,如发现GECOS字段为空…

    Linux干货 2016-08-21