包管理器所有软件都是文件格式的程序代码(即源代码),编译成可执行的二进制文件;对于一个软件,它包括二进制程序、库文件、配置文件和帮助文件。在应用中,每次安装一个程序都要花很多时间去寻找源代码,然后编译成二进制文件,所以就有了包管理器。程序包管理器的作用是将编译后的应用程序的每组文件打包成一个或多个程序包文件,以便更方便地实现程序包的安装、升级、卸载、查询等管理操作。我们可以将这种包管理器称为手动安装程序包管理器,为什么它是手动安装程序包管理器呢?因为这种包管理器无法解决软件安装过程中包之间的依赖管理,比如程序A的运行必须依赖于程序B的某些库文件,所以在安装程序A之前必须先安装A程序;当然,也可能出现这种情况:B程序的运行必须依赖于A程序的一些库文件,这样就形成了先有鸡还是先有蛋的问题。使用这个包管理器,我们只能手动解决包之间的依赖关系。所谓自动依赖解析,无非就是在安装一个程序之前分析包文件,看看它依赖了哪些程序,然后将这些程序一起安装,从而解析出软件包的依赖文件。我们将自动解决依赖关系的工具称为解决依赖关系的前端工具。Linux发行版主要分为两类:RedHat-like和Debain-like。不同发行版中使用的包管理器是不同的。下图显示了每个发行版中使用的包管理器:包管理器组成1.包的组件列表(每个包单独实现),其中包含在安全或卸载期间运行的文件和脚本列表2.位置数据库(public)包管理器数据库存放在/var/lib/rpm/目录下,包含了包的名称和版本、依赖、功能描述、文件路径和安装生成的每个文件的校验和信息等在。获取可靠安全程序包的途径1、系统发布光盘或官方文件服务器(或镜像站)http://mirrors.aliyun.comhttp://mirrors.sohu.comhttp://mirrors.163.com2、官方网站3.第三方机构:(1)EPEL(2)rpm搜索引擎http://pkgs.orghttp://rpmfind.nethttp://rpm.pbone.net4.自己制作rpm包rpm包命名格式在看rpm包命名格式之前,先看看源码的命名格式:sourcecode:name-VERSION.tar.gz其中VERSION包括:major.minor.releaserpm包命名格式name-VERSION-发布。arch.rpmVERSION:major.minor.release-->是源代码的发布号release.arch:rpm包架构的发布号:i386,x64(amd64),ppc,noarchredis-3.0.2-1.centos7.x64.rpm解包:主包和子包;Linux中的一个软件包一般都有一个主程序的安装包,然后是子程序的安装包。所谓子程序包就是软件上某个功能的安装包,或者是这个程序的插件。主包:name-VERSION-release.arch.rpm子包:name-function-VERSION-release.arch.rpmCentOS系统上的rpm命令管理包rpm包管理器的主要功能有:安装、升级、查询、校对和数据库维护rpm命令格式rpm[OPTIONS][PACKAGE_FILE]命令选项-i,--install:install-U,-update,-F,--freshen:upgrade-e,--erase:uninstall-q,--query:query-V,--verify:verify--builddb,--initdb:数据库创建1,安装rpm{-i|--install}[install-options]PACKAGE_FILE...#rpm-ivhPACKAGE_FILEGENERALOPTIONS-v:verbose,详细信息-vv:更详细的输出[install-options]-h:hashmarksoutputprogressbar;每个#表示2%的进度;--test:测试安装,检查并报告依赖关系和冲突信息等;--nodeps:忽略依赖;注意:忽略依赖安装程序时,安装完成后程序可能无法正常运行,所以不推荐使用该安装选项;--replacepkgs:重新安装;比如修改了某个程序的配置文件中的信息后,想要恢复配置文件,但是忘记了之前的配置。这时,您可以删除配置文件并使用此安装选项重新安装程序以恢复其部分配置文件。配置文件;--nosignature:不校验包签名信息,不校验包源合法性;--nodigest:不检查包完整性信息;--noscripts:安装时不执行脚本文件注意:rpm可以有自己的脚本rpm包中的脚本分为四类:preinstall:安装过程开始前运行的脚本,%pre,--noprepostinstall:运行的脚本安装过程完成后,%post,--nopostpreuninstall:在卸载过程实际开始之前运行的脚本,%preun,--nopreunpostuninstall:卸载过程完成后运行的脚本,%postun,--nopostun安装命令演示(1)安装1一个rpm包(二)忽略依赖安装php的rpm包出现依赖错误。这时可以忽略依赖,安装软件包(3)测试安装(4)重新安装2.升级rpm{-U|--upgrade}[install-options]PACKAGE_FILE...rpm{-F|--freshen}[install-options]PACKAGE_FILE...-U:升级或安装-F:升级rpm-UvhPACKAGE_FILE...rpm-FvhPACKAGE_FILE...[install-options]--oldpackage:降级--foece:强制升级注意:(1)不要升级内核;Linux支持多个内核版本共存,所以直接安装新版本的内核;(2))如果安装后修改了原程序包的配置文件,升级时,新版本程序提供的配置文件不会覆盖原版本的配置文件,而是重命名新版本的配置文件(FILENAME.rpmnew);3.卸载rpm{-e|--erase}[--allmatches][--justdb][--nodeps][--noscripts][--notriggers][--test]PACKAGE_NAME...--allmarches:卸载与指定名称匹配的所有版本的软件包;--nodeps:忽略依赖;--test:测试卸载,试运行模式4.查询rpm{-q|--query}[select-options][query-options][select-options]PACKAGE_NAME:查询指定包是否已安装及其版本;-a,--all:查询所有已经安装的包;-fFILE:查询指定文件由哪个程序安装包生成;-p,--packagePACKAGE_FILE:用于对卸载的包进行查询操作;--whatprovidesCAPABILITY:查询哪个包提供了指定的CAPABILITY;--whatrequiresCAPABILITY:查询指定的CAPABILITY依赖于哪个包;[query-options]--changelog:查询rpm包的changelog;-l,--list:包安装生成的所有文件列表;-i,--info:包相关信息,版本号,大小,分组等;-c,--configfiles:查询指定程序提供的配置文件;-d,--docfiles:查询指定包提供的文档;--provides:列出指定包提供的所有CAPABILITY;-R,--require:查询指定包的依赖;--scripts:查询包自带的脚本片段;查询命令demo(1)查询指定安装的程序(2)查询哪个程序安装包生成了指定文件(3)查询安装包或某个程序安装后生成的文件列表文件列表(4)列出所有提供的CAPABILITY指定的包(5)查询哪个包提供了指定的CAPABILITY(6)查询指定的CAPABILITY依赖于哪个包(7)查询指定包的依赖关系(8)查询程序包自带的脚本片段5.验证软件包的验证一般是验证其来源的合法性和验证软件包的完整性;来源合法性验证采用奇数个数字签名,完整性验证采用单函数加密技术封装验证命令rpm{-V|--verify}[select-options][verify-options]验证过程:(1)首先获取并导入可信包创建者的密钥。对于CentOS发行版,使用以下命令导入密钥:#rpm-import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7(2)验证a.安装由该机构签名的程序时,会自动进行验证;b.手动验证:rpm-KPACKAGE_FILE6,数据库重建rpm管理器数据库路径/var/lib/rpm/获取rpm数据库工具的帮助CentOS6:manrpmCentOS7:manrpmdb数据库重建命令rpm{--initdb|--rebuilddb}--initdb:初始化数据库,目前没有可以初始化新建的数据库;当前有时不执行任何操作;--rebuilddb:Rebuild,通过读取当前系统上所有已安装的程序包重新创建;
