Loading... <p style="text-indent: 2em"><span style="font-size: 18px"><strong>前言</strong></span></p> <hr /> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">Linux平台上常见的软件包格式主要有三种,分别是源码格式包、通用二进制格式包和rpm格式包本文主要讲解rpm格式包安装及管理。RPM是Redhat Package Manager的缩写,是由Redhat公司开发的Linux软件包管理具,因其便捷的管理方式与开源思想,逐渐被其他Linux发行商所采用,现已成Linux平台下通用的软件包管理方式。</span></p> <p style="text-indent: 2em"><strong>rpm包的命名格式</strong></p> <hr /> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">name-version-release.arch.rpm</span></p> <p style="text-indent: 2em"><span style="font-size: 12px">name:软件包名字<br style="text-indent: 2em" /></span></p> <p style="text-indent: 2em"><span style="font-size: 12px">version:由主版本号.次版本号.发行号组成(同源代码包)</span></p> <p style="text-indent: 2em"><span style="font-size: 12px">主版本号改变:重大改进</span></p> <p style="text-indent: 2em"><span style="font-size: 12px">次版本号改变:某个子功能发生重大变化</span></p> <p style="text-indent: 2em"><span style="font-size: 12px">发行号改变:修正了部分bug,调整了一点功能</span></p> <p style="text-indent: 2em"><span style="font-size: 12px">release:rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS</span></p> <p style="text-indent: 2em"><span style="font-size: 12px">arch:适用硬件平台<br style="text-indent: 2em" /></span></p> <p style="text-indent: 2em"><span style="font-size: 12px">例如:httpd-2.2.15-39.el6.x86_64.rpm<br style="text-indent: 2em" /></span></p> <p style="text-indent: 2em"><span style="font-size: 12px">一个程序有20个功能:常用功能有8个,特殊A:3个,特殊B:6个,二次开发相关功能:3个,而rpm包可能只包含其中的几个,所以如果有需要还需手动编译,在此略提一下。</span></p> <p style="text-indent: 2em"><strong>分包机制</strong></p> <hr /> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">核心包,主包命名方式与源程序一致:</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">例如:httpd-2.2.15-39.el6.x86_64.rpm</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">子包:httpd-tools-2.2.15-39.el6.x86_64.rpm</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">OS Vendor: 系统发行商提供的包</span></p> <p style="text-indent: 2em"><strong>获取rpm包的途径</strong></p> <p style="text-indent: 2em"><strong>1、发行的光盘或站点服务器</strong></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">镜像:</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">http://mirrors.163.com</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">http://mirrors.sohu.com</span></p> <p style="text-indent: 2em"><strong>2、项目的官网</strong></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">源代码</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">rpm包</span></p> <p style="text-indent: 2em"><strong>3、第三方机构或个人制作并公开发布的rpm包</strong></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">http://rpmfind.net</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">http://rpm.pbone.net</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">可靠的途径:EPEL<br style="text-indent: 2em" /></span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">Fedora-EPEL</span></p> <p style="text-indent: 2em"><strong>rpm包的合法性验正</strong></p> <hr /> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。通过验证可得知:rpm包来源合法性和完整性。</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">验正过程:</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">前提:必须通过可靠途径获取到包制作者的公钥。</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法。</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">2、使用与制作者同样的单向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,则意味着软件包完整。</span></p> <pre class="brush:bash;toolbar:false">导入: rpm --import /path/to/key_file #导入公钥 rpm -qa gpg-pubkey* #显示所有已经导入的gpg格式的公钥 rpm -qi gpg-pubkey-NAME #显示密钥详细信息 检查包:安装过程中会自动执行 手动检查: rpm -K /path/to/package_file rpm --checksig /path/to/package_file rpm -K --nodigest #不检查包完整性 rpm -K --nosignature #不检查来源合法性[object Object]</pre> <p style="text-indent: 2em"><strong><img src="//cto.wang/usr/uploads/2016/07/20160703180132-11.jpg" title="1427445093101973.jpg" alt="1.jpg" /></strong></p> <p style="text-indent: 2em"><strong>RPM管理之安装</strong></p> <hr /> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">命令格式:</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">rpm [option] /path/to/package_file </span></p> <pre class="brush:bash;toolbar:false">-i:安装 -v:显示详细信息 #想更详细显示可用-vv -vvv -h:显示安装进度 #一个“#”代表2% -ivh:一般组合使用 --test:测试安装 --nodepes:忽略依赖关系 #能安装上,但可能无法运行 --replacepkgs:重新安装 #如果原有配置文件作了修改,很有可能不执行替换,而是将生成的配置文件重命名为 .rpmnew</pre> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180132-16.jpg" title="1427445163100990.jpg" alt="2.jpg" /></p> <p style="text-indent: 2em"><strong>RPM管理之卸载</strong></p> <hr /> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">命令格式:</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">rpm [option] package_name</span></p> <pre class="brush:bash;toolbar:false">-e:卸载 --nodeps:忽略依赖关系 #能卸载,但依赖于此包程序包可能会运行不正常(建议一并卸载)</pre> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180132-65-1.jpg" title="1427445208917676.jpg" alt="3.jpg" /></p> <p style="text-indent: 2em"><strong>RPM管理之升级</strong></p> <hr /> <p style="text-indent: 2em"><span>-Uvh:升级或安装 #如果软件包没有安装则安装;否则,升级</span></p> <pre class="brush:bash;toolbar:false">-Fvh:升级 #需要升级的软件包必须已经安装 --force: 强制升级 #升级后可能存在版本冲突 注意:内核不应该直接升级,而是安装,系统允许多内核并存</pre> <p style="text-indent: 2em"><strong>RPM管理之查询</strong></p> <hr /> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">命令格式:</span></p> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">rpm [option] package_name</span></p> <pre class="brush:bash;toolbar:false">rpm -q package_name:查询某包是否安装</pre> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180133-16.jpg" title="1427445237546748.jpg" alt="4.jpg" /></p> <pre class="brush:bash;toolbar:false">rpm -qa:查询所有已经安装的包 按条件过滤:rpm -qa | grep 'PATTERN'</pre> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180133-41.jpg" title="1427445252121690.jpg" alt="5.jpg" /></p> <pre class="brush:bash;toolbar:false">rpm -qi package_name:查询包的描述信息</pre> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180133-33.jpg" title="1427445288563096.jpg" alt="6.jpg" /></p> <pre class="brush:bash;toolbar:false">rpm -ql package_name:查询某包安装生成了哪些文件 rpm -qc package_name:查询某包安装生成了哪些配置文件 rpm -qd package_name:查询某包安装生成了哪些帮助文件</pre> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180133-24.jpg" title="1427445308567522.jpg" alt="7.jpg" /></p> <pre class="brush:bash;toolbar:false">rpm -q --scripts package_name:查询程序包的相关脚本 #脚本有四类: preinstall:安装前脚本 postinstall: 安装后脚本 preuninstall: 卸载前脚本 postuninstall: 卸载后脚本 #</pre> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180133-87.jpg" title="1427445332450517.jpg" alt="8.jpg" /><br style="text-indent: 2em" /></p> <pre class="brush:bash;toolbar:false">rpm -qf /path/to/some_file:查询某文件是由哪个包安装生成的</pre> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180133-80.jpg" title="1427445349103651.jpg" alt="9.jpg" /></p> <pre class="brush:bash;toolbar:false">rpm {-qpi|-qpl|-qpc|-qpd} /path/to/package_file:对尚未安装的包执行查询</pre> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180133-2-1.jpg" title="1427445367138948.jpg" alt="10.jpg" /></p> <p style="text-indent: 2em"><strong>RPM管理之校验</strong></p> <hr /> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">命令格式:</span></p> <p style="text-indent: 2em"><span style="font-size: 12px">rpm [option] package_name</span></p> <pre class="brush:bash;toolbar:false">rpm -V package_name:检查包安装生成的文件属性是否发生变化 #校验已安装的包的文件与保存在rpm数据库里的包的元数据,如果相同无任何显示, #如果不同则显示改变的地方,下面是每个字符代表的意义: #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 mTime differs #P caPabilities differ #手动改变httpd的文件</pre> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180133-58.jpg" title="1427445382109791.jpg" alt="11.jpg" /></p> <p style="text-indent: 2em"><strong>RPM管理之数据库重建</strong></p> <hr /> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">数据库目录:/var/lib/rpm</span></p> <p style="text-indent: 2em"><span style="font-size: 12px">如果rpm的数据库损坏,会导致查询等相关操作无法正常进行,这时就需要重建数据库。</span></p> <pre class="brush:bash;toolbar:false">rpm --initdb:初始化 #如果事先没有数据库,会创建一个;如果有,则不创建 rpm --rebuilddb: 重建 #直接重建,覆盖原有的数据库</pre> <p style="text-indent: 2em"><strong>The end</strong></p> <hr /> <p style="text-indent: 2em"><span style="text-indent: 2em;font-size: 12px">好了,RMP管理就总结到这里,希望对新手有所帮助,以上仅个人学习整理,如有错漏,大神勿喷~~~</span></p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信