Loading... <h3><span style="font-size: 16px">一、什么是RPM</span></h3> <p><span style="font-size: 14px"> RPM全称为“RedHat Package Manager”,看名字就知道这是RedHat公司搞出来的,后来因为RPM发展的很好,逐渐成为了一种通用的标准,就更名为“RPM is Package Manager"。</span></p> <p><span style="font-size: 14px"> RPM最大的特点就是将软件先编译,并打包成为RPM机制的安装包,包中包含了该软件安装时所必须依赖属性软件信息,如果这些被依赖的软件已经安装,则安装包可顺利安装完成,否则软件将会安装失败。</span></p> <p><span style="font-size: 14px"> RPM安装时会将该软件的信息写入到RPM数据库中,那么软件的查询、验证、升级、卸载等操作都可以从数据中直接调用执行。</span></p> <h3><span style="font-size: 16px">二、认识RPM包</span></h3> <p><span style="font-size: 14px"> 1、RPM包的命名格式</span></p> <p><span style="font-size: 14px"> name-version-release.OS.arch.rpm</span></p> <p><span style="font-size: 14px"> 解释:</span></p> <p><span style="font-size: 14px"> name:软件名称。</span></p> <p><span style="font-size: 14px"> version:major.minor</span></p> <p><span style="font-size: 14px"> major:主版本号;</span></p> <p><span style="font-size: 14px"> minor:次版本号;</span></p> <p><span style="font-size: 14px"> release:rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS。</span></p> <p><span style="font-size: 14px"> arch:适用于的硬件平台;</span></p> <p><span style="font-size: 14px"> x86:i386,i486,i586,i686等;</span></p> <p><span style="font-size: 14px"> x86_64:支持64位CPU;</span></p> <p><span style="font-size: 14px"> noarch:依赖于虚拟机。</span></p> <p><span style="font-size: 14px"> 例如:bash-4.2.3-3.centos5.x86_64.rpm</span></p> <p><span style="font-size: 14px"> 2、分包机制</span></p> <p><span style="font-size: 14px"> 对于一个功能比较多的软件来说,而用户可能并不会用户其所有的功能,那么OS Vendor(系统发行商)在制作RPM包时只会用将他们认为用户会经常用到的功能打包成为与源程序名一致的核心包,而将其它的功能再次的打包成为子包;比如:bash程序有20个功能,常用功能有8个,特殊功能A:3个,特殊功B:6个,二次开发相关功能:3个,那么其RPM的形式有可能是这样的:</span></p> <p><span style="font-size: 14px"> 核心包:</span></p> <p><span style="font-size: 14px"> bash-4.2.3-3.centos7.x86_64.rpm</span></p> <p><span style="font-size: 14px"> 子包:</span></p> <p><span style="font-size: 14px"> bash-a-4.2.3-3.centos7.x86_64.rpm</span></p> <p><span style="font-size: 14px"> bash-b-4.2.3-3.centos7.x86_64.rpm</span></p> <p><span style="font-size: 14px"> bash-devel-4.2.3-3.centos7.x86_64.rpm</span></p> <p><span style="font-size: 14px"> 如果需要用到子包中的功能的话,就需要把对应的子包进行安装。</span></p> <p><span style="font-size: 14px"> 3、获取rpm包的途径</span></p> <p class="MsoListParagraph" style="margin-left: 52px"><span style="font-size: 14px">1)发行的光盘式站点服务器</span></p> <p style="margin-left: 52px"><span style="font-size: 14px"> 镜像:</span></p> <p style="margin-left: 52px"><span style="font-size: 14px"> http://mirrors.163.com</span></p> <p style="margin-left: 52px"><span style="font-size: 14px"> http://mirrors.sohu.com</span></p> <p class="MsoListParagraph" style="margin-left: 52px"><span style="font-size: 14px">2)项目的官网</span></p> <p style="margin-left: 52px"><span style="font-size: 14px"> 源代码</span></p> <p style="margin-left: 52px"><span style="font-size: 14px"> RPM包</span></p> <p class="MsoListParagraph" style="margin-left: 52px"><span style="font-size: 14px">3)很多第三方机构或个人制作并公开发布许多rpm包</span></p> <p style="margin-left: 80px;text-indent: 4px"><span style="font-size: 14px">http://rpmfind.net</span></p> <p style="margin-left: 80px;text-indent: 4px"><span style="font-size: 14px">http://rpm.phone.net</span></p> <p><span style="font-size: 14px"> 可靠的途径:EPEL</span></p> <p><span style="font-size: 14px"> Fedora-EPEL</span></p> <p><span style="font-size: 14px"> 4、RPM包的合法性验证</span></p> <p><span style="font-size: 14px"> RPM包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特征码,附加在原始数据后面,如果想要正确的安装RPM包必须使用可靠机制获取到包制作者的公钥;其公钥的作用:</span></p> <p><span style="font-size: 14px"> 1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;</span></p> <p><span style="font-size: 14px"> 2、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,由意味着完整性没问题;</span></p> <h3><span style="font-size: 16px">三、RPM包管理器的使用</span></h3> <p><span style="font-size: 14px"> 1、安装程序包</span></p> <p><span style="font-size: 14px"> 命令格式:rpm [option] package_name</span></p> <p><span style="font-size: 14px"> option: </span></p> <p><span style="font-size: 14px"> -i:安装;</span></p> <p><span style="font-size: 14px"> -v:显示信息;</span></p> <p><span style="font-size: 14px"> -h:显示进度;</span></p> <p><span style="font-size: 14px"> -vv:显示详细信息;</span></p> <p><span style="font-size: 14px"> -vvv:显示更加详细信息;</span></p> <p><span style="font-size: 14px"> 组合选项:-ivh;</span></p> <p><span style="font-size: 14px"> –test:仅作测试,不真正执行安装;</span></p> <p><span style="font-size: 14px"> rpm -ivh –test 程序包</span></p> <p><span style="font-size: 14px"> –nodeps:忽略依赖关系;</span></p> <p><span style="font-size: 14px"> 忽略依赖关系可以将软件安装上,但可能无法运行;</span></p> <p><span style="font-size: 14px"> –replacepkgs:重新安装;</span></p> <p><span style="font-size: 14px"> 如果原有配置文件作了修改,很有可能不执行替换,而是将应该由安装生成的配置文件重命名为.rpmnew;</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160313-100.png" title="1431294476951622.png" alt="13.png" /></p> <p><span style="font-size: 14px"> 2、卸载程序包</span></p> <p><span style="font-size: 14px"> 命令格式:rpm [option] package_name</span></p> <p><span style="font-size: 14px"> option:</span></p> <p><span style="font-size: 14px"> -e:卸载;</span></p> <p><span style="font-size: 14px"> –nodeps:忽略依赖关系;</span></p> <p><span style="font-size: 14px"> 软件能卸载,但依赖于此包的程序可能运行不正常;</span></p> <p><span style="font-size: 14px"> 注意:如果包的配置文件发生改变,安装后曾被改动过,卸载时,此文件不会卸载,而是被重命名并保留。</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160313-94.png" title="1431294671654910.png" alt="1.1.png" /></span></p> <p><span style="font-size: 14px"> 3、升级程序包</span></p> <p><span style="font-size: 14px"> 命令格式:rpm [option] package_file</span></p> <p><span style="font-size: 14px"> option:</span></p> <p><span style="font-size: 14px"> -Uvh:升级或安装;</span></p> <p><span style="font-size: 14px"> -Fvh:纯升级;</span></p> <p><span style="font-size: 14px"> 必须存在老版本,否则不安装;</span></p> <p><span style="font-size: 14px"> –force:强制升级;</span></p> <p><span style="font-size: 14px"> 注意:不应该对内核执行升级操作;而要安装。系统允许多内核并存。</span></p> <p><span style="font-size: 14px"> 4、查询操作</span></p> <p><span style="font-size: 14px"> 1)查询某包是否已安装</span></p> <p><span style="font-size: 14px"> rpm -q package_name</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160313-38.png" title="1431294824121062.png" alt="1.1.png" /></span></p> <p><span style="font-size: 14px"> 2)查询所有已经安装的包</span></p> <p><span style="font-size: 14px"> rpm -qa</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160313-80.png" title="1431294892152224.png" alt="1.png" /> </span><span style="font-size: 14px">3)查询包的描述信息</span></p> <p><span style="font-size: 14px"> rpm -qi package_name</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160313-65.png" title="1431294934120379.png" alt="3.png" /></span></p> <p><span style="font-size: 14px"> 4)查询某包安装生成了哪些文件</span></p> <p><span style="font-size: 14px"> rpm -ql package_name</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160314-25.png" title="1431294973106122.png" alt="4.png" /></span></p> <p><span style="font-size: 14px"> 5)查询某包安装生成了哪些配置文件</span></p> <p><span style="font-size: 14px"> rpm -qc package_name</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160314-28.png" title="1431295040128045.png" alt="5.png" /></span></p> <p><span style="font-size: 14px"> 6)查询某包安装生成了哪些文档(帮助文件)</span></p> <p><span style="font-size: 14px"> rpm -qd package_name</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160314-100.png" title="1431295103720725.png" alt="6.png" /> </span><span style="font-size: 14px">7)查询程序包的相关脚本</span></p> <p><span style="font-size: 14px"> rpm -q –scripts package_name</span></p> <p><span style="font-size: 14px"> 脚本有四类:</span></p> <p><span style="font-size: 14px"> preinstall:安装前脚本</span></p> <p><span style="font-size: 14px"> postinstall:安装后脚本</span></p> <p><span style="font-size: 14px"> preuninstall:卸载前脚本</span></p> <p><span style="font-size: 14px"> postuninstall:卸载后脚本</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160314-90.png" title="1431295190913190.png" alt="7.png" /></span></p> <p><span style="font-size: 14px"> 8)查询某文件是由哪个包安装生成的</span></p> <p><span style="font-size: 14px"> rpm -qf /path/to/some_file</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160314-53.png" title="1431295281495467.png" alt="8.png" /></span></p> <p><span style="font-size: 14px"> 9)对尚未安装的包执行查询</span></p> <p><span style="font-size: 14px"> rpm [option] /path/to/package_file</span></p> <p><span style="font-size: 14px"> option:</span></p> <p><span style="font-size: 14px"> -qpi:包描述信息;</span></p> <p><span style="font-size: 14px"> -qpl:包会生成哪些文件;</span></p> <p><span style="font-size: 14px"> -qpc:包会生成哪些配置文件;</span></p> <p><span style="font-size: 14px"> -qpd:包会生成哪些帮助文件;</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160314-56.png" title="1431295499207839.png" alt="1.1.png" /><img src="//cto.wang/usr/uploads/2016/07/20160703160315-80.png" title="1431295574100404.png" alt="1.png" /></span></p> <p><span style="font-size: 14px"> 5、RPM包的校验</span></p> <p><span style="font-size: 14px"> 校验:检查包安装生成的文件属性是否发生变化</span></p> <p><span style="font-size: 14px"> rpm -V package_name</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160315-71.png" title="1431296059112758.png" alt="1.png" /> httpd的内容没有被修改的情况下rpm -V httpd命令不会有任何输出结果,但上例中出现了一行奇怪的符号,说明httpd的属性已经发生了变化,下面来我看一下前面的文字所代表的含义:</span></p> <p><span style="font-size: 14px"> S:文件的容量大小是否被改变;<br /></span></p> <p><span style="font-size: 14px"> M:文件的类型或文件的属性是否被改变;<br /></span></p> <p><span style="font-size: 14px"> 5:MD5指纹的内容已发生了变化;<br /></span></p> <p><span style="font-size: 14px"> D:设备的主/次代码已经改变;<br /></span></p> <p><span style="font-size: 14px"> L:Link路径已被改变;<br /></span></p> <p><span style="font-size: 14px"> U:文件的所有者已被改变;<br /></span></p> <p><span style="font-size: 14px"> G:文件的属组已被改变;<br /></span></p> <p><span style="font-size: 14px"> T:文件的创建时间被改变。<br /></span></p> <p><span style="font-size: 14px"> 文件名前还有个c,这一位代表不同的文件类型:<br /></span></p> <p><span style="font-size: 14px"> c:配置文件;<br /></span></p> <p><span style="font-size: 14px"> d:文档;<br /></span></p> <p><span style="font-size: 14px"> g:鬼文件;<br /></span></p> <p><span style="font-size: 14px"> l:授权文件;<br /></span></p> <p><span style="font-size: 14px"> r:自述文件。<br /></span></p> <p><span style="font-size: 14px"> rpm包来源合法性及完整性检验:</span></p> <p><span style="font-size: 14px"> 前提:在当前系统上导入包的制作者的公钥</span></p> <p><span style="font-size: 14px"> rpm –import /path/to/key-file</span></p> <p><span style="font-size: 14px"> rpm -qa gpg-pubkey* 显示所有已经导入的gpg格式的公钥</span></p> <p><span style="font-size: 14px"> rpm -qi gpg-pubkey-NAME 显示密钥的详细信息</span></p> <p><span style="font-size: 14px"> CentOS系统安装好后,会将原厂的gpg公钥存放在以下目录中:<br /></span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160315-42.png" title="1431296750704082.png" alt="1.png" /></span></p> <p><span style="font-size: 14px"> 导入这个公钥:</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160315-98.png" title="1431296840765540.png" alt="2.png" /> 查看已经导入的公钥:</span><img src="//cto.wang/usr/uploads/2016/07/20160703160315-55.png" title="1431296896908470.png" alt="3.png" style="font-size: 14px" /></p> <p><span style="font-size: 14px"> 显示公钥的详细信息:</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160315-90.png" title="1431297006350374.png" alt="4.png" /> </span><span style="font-size: 14px">检查包</span></p> <p><span style="font-size: 14px"> 手动检查:</span></p> <p><span style="font-size: 14px"> rpm -K /path/to/package_file</span></p> <p><span style="font-size: 14px"> rpm –checksig /path/to/pachage_file </span></p> <p><span style="font-size: 14px"> 不检查包完整性:</span></p> <p><span style="font-size: 14px"> rpm -K –nodigest</span></p> <p><span style="font-size: 14px"> 不检查来源合法性:</span></p> <p><span style="font-size: 14px"> rpm -K –nosignature</span></p> <p><span style="font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160316-8.png" title="1431297304114971.png" alt="1.1.png" /></span></p> <p><span style="font-size: 14px"> 6、RPM数据库重建</span></p> <p><span style="font-size: 14px"> 数据库目录:/var/lib/rpm</span></p> <p><span style="font-size: 14px"> 数据库重建:</span></p> <p><span style="font-size: 14px"> rpm –initdb </span></p> <p><span style="font-size: 14px"> 初始化:如果事先没有库会新建一个;如果有,则不新建;</span></p> <p><span style="font-size: 14px"> rpm –rebuilddb </span></p> <p><span style="font-size: 14px"> 重建:直接重建,覆盖原有的数据库。</span></p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信