




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
rpm包管理详解(结合rpm,rpm2cpio,cpio提取rpm包的特定文件)在linux世界里流行两种包管理方式,分别是redhat系的rpm和debian系的deb。其中rpm的使用更为广泛,我打算接下来分多章详细介绍一下rpm的包管理机制。包管理是操作系统用来维护各组件版本的一种方式,对于软件发行者来说,将自己的程序制作成标准的rpm格式也会使得程序的安装、升级和卸载变得非常容易。因此linux下几乎所有流行的程序都有rpm格式的包,有些是发行者自己打包,也有些第三方提供rpm包,例如redhat发行版里的rpm都是redhat自己打包,他们定期打patch,升级并且维护包之间的依赖关系,他们制作的rpm包是最可以信任的。除此之外,/rpm/这个网站也提供很多较新的rpm包,在redhat官方找不到的包很多在这里都可以找到。在网上搜索rpm包最常用的方式是通过进行搜索,它会提供各个发行版下的各个版本的包下载。注意一定要找到正确的发行版下对应的包,由于依赖底层库和库版本的不同,不同版本的发行版的包最好不要混装。rpm的安装,基本的安装命令如下rpm -ivh xxxxxxx.rpmi代表安装,e代表卸载,v代表显示安装过程,h代表显示#号样式的进度下面看一个简单的例子lecontelocalhost soft$ sudo rpm -ivh enca-1.9-4.el5.rf.i386.rpm warning: enca-1.9-4.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6 Preparing. # 100% 1:enca # 100%rpm包这样就装上了,但是很多时候没有这么顺利,由于rpm包之间可能存在依赖关系,在依赖关系无法满足的情况下默认是没法继续安装的;再比如某个包已经安装过,如果想再装一次,也是无法继续的。这种情况下可以通过一些参数来强制执行,但是强制执行的后果可能是装的程序无法正常使用,因为它依赖的包你系统并没有提供。安装时常用的参数如下:-test 测试安装,并不真实安装而仅仅是测试能否安装。-nodeps 忽略依赖关系强行安装-force 强制替换现有版本-noscripts 仅安装文件不执行附加脚本-whatprovides查询系统中某个文件,某个目录,某个模块是由哪个包提供的.-whatrequires查询系统中某个文件,某个目录,某个模块是哪个包需要的-p ;(or -) 查询软件包的文件-f ; 查询;属于哪个软件包-a 查询所有安装的软件包-whatprovides ;查询提供了 ;功能的软件包-g ; 查询属于; 组的软件包-whatrequires ; 查询所有需要 ; 功能的软件包下面演示一个强行安装的例子lecontelocalhost soft$ sudo rpm -ivh awstats-6.9-1.noarch.rpm error: Failed dependencies: perl(LWP:UserAgent) is needed by awstats-6.9-1.noarch lecontelocalhost soft$ sudo rpm -ivh awstats-6.9-1.noarch.rpm -nodeps Preparing. # 100% 1:awstats # 100%awstats依赖的PERL模块LWP:UserAgent并没有装,因此默认是无法安装的,但是通过nodeps可以强制安装,而LWP:UserAgent可以通过cpan去后续安装。也就是说,如果你明白你在做什么,那么强制安装并不可怕。需要注意的是,rpm包的安装和卸载都需要在系统的rpm数据库里保存信息,因此需要root权限。本节接着介绍rpm的查询功能,查询是我们最常用的功能,例如查询一个包里包含哪些文件、一个文件属于哪个包、以及包之间的依赖关系等等。rpm的-q参数是用来进行查询的,需要明确的是rpm既可以对安装在系统上的包进行查询,也可以对一个未安装的rpm包进行查询。当一个rpm包安装到系统上之后,安装信息通常会保存在本地的/var/lib/rpm/目录下,数据会以berkeley DB的方式保存。查看/var/lib/rpm/Packages文件的类型可以验证这一点。lecontelocalhost rpm$ file /var/lib/rpm/Packages /var/lib/rpm/Packages: Berkeley DB (Hash, version 8, native byte-order)这种情况下的查询其实就是对bdb的读访问。而对一个未安装的rpm包进行查询,则是通过解读rpm包本身而获取信息,这一点是首先需要明确的。下面我就简单罗列一下rpm最常用的几个查询功能1.rpm -qa 用来查询系统安装的所有包,a代表all2.rpm -ql 包名 用来查询某个包里的文件列表,例如查询包passwd里包含的内容lecontelocalhost rpm$ rpm -ql passwd /etc/pam.d/passwd /usr/bin/passwd /usr/share/man/man1/passwd.1.gz3.rpm -qi 包名 用来查询包信息,其中包含包的介绍,作者,打包日期等重要信息。4.rpm -qf 文件名 用来查询一个文件所属的rpm包,例如:lecontelocalhost rpm$ rpm -qf /etc/passwd setup-2.5.58-4.el5系统配置文件/etc/passwd是属于setup这个包的。5.rpm -qV 包名 用来验证某个包中安装的各文件的状态,如果当前文件的大小、md5和安装时数据库里保存的信息不一致,该命令则会将不一致的文件列出来。该命令对于系统出问题的情况下的故障排查很有帮助。上面是几个最常用的查询命令,都是针对查询系统rpm包情况的。如果要查询未安装的rpm包则只需要加上p参数和包路径即可。例如查询包perl-Git--4.el5.i386.rpm的信息:lecontelocalhost soft$ rpm -qip perl-Git--4.el5.i386.rpm warning: perl-Git--4.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 217521f6 Name : perl-Git Relocations: (not relocatable) Version : Vendor: Fedora Project Release : 4.el5 Build Date: 2009年06月19日 星期五 21时28分05秒 Install Date: (not installed) Build Host: Group : Development/Libraries Source RPM: git--4.el5.src.rpm Size : 24878 License: GPL Signature : DSA/SHA1, 2009年06月20日 星期六 04时07分18秒, Key ID 119cc036217521f6 Packager : Fedora Project URL : /pub/software/scm/git/ Summary : Perl interface to Git Description : Perl interface to Git.rpm包之间会维持依赖关系,这是包管理系统的特色。我们都经历过安装一个包而因为依赖缺失而装不上的情况。后来yum的出现能一定程度解决这个问题,但我们仍然有必要了解rpm依赖关系背后的细节。自己打过rpm包的人都知道,在包的spec配置文件往往要明确写出此包所依赖的包名或文件名,同时也可能需要明确写出此包所提供的内容。这个内容可能是动态库也可能是其他一些名字,并不一定是文件名。各个包之间正是依靠这些内容来建立依赖关系的,每个包都提供一些内容同时依赖一些别的内容,整个系统就在这样一种相互依赖中形成了。在看具体的例子之前先介绍几个指令:rpm -qR 包名 可以用来查询指定包所依赖的内容rpm -q provides 包名 可以用来查询指定包所提供的内容rpm -q whatprovides 内容 可以用来查询哪个包提供了指定内容rpm -q whatrequires 内容 可以用来查看哪些包依赖于指定内容例如我们以time这个包为例进行查询,结果如下:lecontelocalhost soft$ rpm -qR time/bin/sh/bin/sh/sbin/install-infolibc.so.6libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1) libc.so.6(GLIBC_2.3.4) rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rtld(GNU_HASH)可见,time这个包如果要安装,上述内容必须已经存在,否则将会提示依赖缺失而无法安装。我们以列表中的/bin/sh为例进行反查,可以看到系统中哪个包提供了/bin/shlecontelocalhost soft$ rpm -q -whatprovides /bin/sh bash-3.2-24.el5很明显,bash这个包提供了/bin/sh,正是由于bash的安装才满足了time的安装需求。time依赖于bash等包,同时它也提供了一些内容,有可能被别的包依赖:lecontelocalhost soft$ rpm -q -provides time time = 1.7-27.2.2 lecontelocalhost soft$ rpm -q -whatrequires time no package requires time不幸的是系统中并没有包依赖于time,因为它本身属于较上层的包。对于一些底层内容就会有很多包依赖它,例如之前碰到的/bin/sh:lecontelocalhost soft$ rpm -q -whatrequires /bin/shbash-3.2-24.el5 bash-3.2-24.el5 info-4.8-14.el5 ncurses-5.5-24.20060715 libxml2-2.6.26- readline-5.1-1.1 .省略n行由于篇幅所限就不全列举出来了,这种依赖关系应该可以一目了然了。和上节类似,rpm -qR和rpm -q provides这两个查询指令同样可以加上-p参数应用到一个未安装的rpm包,例如lecontelocalhost soft$ rpm -qp -provides enca-1.9-4.el5.rf.i386.rpm warning: enca-1.9-4.el5.rf.i386.rpm:Header V3 DSA signature: NOKEY, key ID 6b8d79e6 libenca.so.0 enca = 1.9-4.el5.rf可以看到,enca这个rpm包提供了动态库libenca.so.0和enca本身。通过使用本节这四条依赖关系查询指令基本可以了解到系统上众多rpm包之间的耦合关系,明确了这一点,我们对rpm的理解也就更深了一步。介绍完了rpm包的安装和查询,本节接着来介绍rpm包的卸载和升级,这样以来rpm包的“增删改查”就都涉及到了。rpm包的卸载和升级的指令如下:rpm -e 包名 用来卸载一个rpm包rpm -U 包文件 用来升级一个现有的rpm需要注意的是,如果要卸载的rpm包中的内容被别的rpm包依赖,那么则无法卸载,例如lecontelocalhost $ rpm -e php-common error: Failed dependencies: php-common = 5.2.9-4 is needed by (installed) php-pdo-5.2.9-4.i386 php-common = 5.2.9-4 is needed by (installed) php-bcmath-5.2.9-4.i386 php-common = 5.2.9-4 is needed by (installed) php-curl-5.2.9-4.i386 php-common = 5.2.9-4 is needed by (installed) php-dba-5.2.9-4.i386php-common由于被 php-pdo等包依赖而无法单独卸载,php-pdo和php-common可以利用上节介绍过的依赖关系查询指令查到:lecontelocalhost $ rpm -qR php-pdo config(php-pdo) = 5.2.9-4 libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1.3) libc.so.6(GLIBC_2.3) libc.so.6(GLIBC_2.4) librt.so.1 libsqlite3.so.0 php-common = 5.2.9-4 . lecontelocalhost $ rpm -q -whatrequires php-common php-pdo-5.2.9-4 php-bcmath-5.2.9-4 php-curl-5.2.9-4 php-dba-5.2.9-4 php-gd-5.2.9-4 .这种情况下想要卸载php-common,只能将它依赖的所有包全部卸载掉。更暴力的方式是指定-nodeps忽略依赖关系限制,但是这样造成的后果就是php-pdo等包将无法正常使用,因此这种方式一般不推荐。rpm包的升级指的是rpm包的版本升级,这种情况下实际内部执行的动作分两步,即先安装新版本然后卸载老版本。此外,rpm也可以进行包的降级,只需要指定oldpackages参数即可。值得注意的是在卸载和升级的过程中, 包中的配置文件会被妥善处理,rpm会根据一系列规则决定配置文件是否保留,即使被替换,旧的配置文件也会被重命名后保存起来,你之前对配置文件做过的修改不会因为rpm包的升级而丢失。案例:rootteacher Packages# rpm -qf $(which system-config-selinux)policycoreutils-gui-2.0.83-19.1.el6.i686rootteacher Packages# rpm -qi policycoreutils-gui-2.0.83-19.1.el6.i686Name : policycoreutils-gui Relocations: (not relocatable)Version : 2.0.83 Vendor: Red Hat, Inc.Release : 19.1.el6 Build Date: 2010?08?25? ? 20?51?33?Install Date: 2011?04?02? ? 23?36?36? Build Host: Group : System Environment/Base Source RPM: policycoreutils-2.0.83-19.1.el6.src.rpmSize : 828672 License: GPLv2+Signature : RSA/8, 2010?08?25? ? 22?59?33?, Key ID 199e2f91fd431d51Packager : Red Hat, Inc. URL : Summary : SELinux configuration GUIDescription :system-config-selinux is a utility for managing the SELinux environmentrootteacher Packages# rpm -qg “System Environment/Base”setup-2.8.14-10.el6.noarchfilesystem-2.4.30-2.1.el6.i686.createrepo-0.9.8-4.el6.noarchsystem-config-kickstart--1.el6.noarchsetools-console-3.3.7-4.el6.i686policycoreutils-python-2.0.83-19.1.el6.i686policycoreutils-newrole-2.0.83-19.1.el6.i686policycoreutils-gui-2.0.83-19.1.el6.i686policycoreutils-sandbox-2.0.83-19.1.el6.i686-结合rpm,rpm2cpio,cpio提取rpm包的特定文件首先,要确定/etc/mail/sendmail.mc属于哪个rpm包:rootpps tmp# rpm -qf /etc/mail/sendmail.mcsendmail-8.13.8-2.el5然后从iso安装光碟中提取出sendmail-8.13.8-2.el5.i386.rpm(或者其它方式取得),确认一下sendmail.mc的路径:rootpps tmp# rpm -qlp sendmail-8.13.8-2.el5.i386.rpm | grep sendmail.mcwarning: sendmail-8.13.8-2.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186/etc/mail/sendmail.mc在提取sendmail.mc之前,有必要确认一下它的相对路径:rootpps tmp# rpm2cpio sendmail-8.13.8-2.el5.i386.rpm | cpio -t | grep sendmail.mc2570 blocks./etc/mail/sendmail.mc好,现在可以放心提取sendmail.mc了:rootpps tmp# rpm2cpio sendmail-8.13.8-2.el5.i386.rpm | cpio -idv ./etc/mail/sendmail.mc./etc/mail/sendmail.mc2570 blocks【注意】cpio参数后的文件路径./etc/mail/sendmail.mc必须和前面查询的相对路径一样,否则提取不成功。cpio参数说明:-t 列出的意思,和-list等同,注意,此时列出的是“相对路径”-i 抽取的意思,和-extract等同-d 建立目录,和-make-directories等同-v 冗余信息输出,和-verbose等同rpm参数说明:-q -query 查询-l -list 列出-f -file 指定文件-p -package 指定rpm包 rpm -q參數:在查詢的部分,所有的參數之前都需要加上 -q 才是所謂的查詢!查詢主要分為兩部分,一個是查已安裝,另一個則是查某個 rpm 檔案內容。查詢已安裝套件的資訊:-q :僅查詢,後面接的套件名稱是否有安裝;-qa :列出所有的,已經安裝在本機 Linux 系統上面的所有套件名稱;-qi :列出該套件的詳細資訊 (information),包含開發商、版本與說明等;-ql :列出該套件所有的檔案與目錄所在完整檔名 (list);-qc :列出該套件的所有設定檔 (找出在 /etc/ 底下的檔名而已)-qd :列出該套件的所有說明檔 (找出與 man 有關的檔案而已)-qR :列出與該套件有關的相依套件所含的檔案 (Required 的意思)-qf :由後面接的檔案名稱,找出該檔案屬於哪一個已安裝的套件;查詢某個 RPM 檔案內含有的資訊:-qpicdlR:注意 -qp 後面接的所有參數以上面的說明一致。但用途僅在於找出某個 RPM 檔案內的資訊,而非已安裝的套件資訊!benbotest$rpm -q sysstatsysstat-4.0.7-4benbotest$rpm -qa|grep sysstatsysstat-4.0.7-4benbotest$rpm -qi sysstatName : sysstat Relocations: (not relocateable)Version : 4.0.7 Vendor: Red Hat, Inc.Release : 4 Build Date: Mon 03 Mar 2003 11:05:04 PM CSTInstall Date: Sat 07 Oct 2006 10:31:38 PM CST Build Host: Group : Applications/System Source RPM: sysstat-4.0.7-4.src.rpmSize : 271171 License: GPLSignature : DSA/SHA1, Thu 17 Apr 2003 10:31:53 PM CST, Key ID 219180cddb42a60ePackager : Red Hat, Inc. Summary : The sar and iostat system monitoring commands.Description :This package provides the sar and iostat commands for Linux. Sar andiostat enable system monitoring of disk, network, and other IOactivity.benbotest$rpm -ql sysstat/etc/cron.d/sysstat/usr/bin/iostat/usr/bin/mpstat/usr/bin/sar/usr/lib/sa/usr/lib/sa/sa1/usr/lib/sa/sa2/usr/lib/sa/sadc/usr/share/doc/sysstat-4.0.7/usr/share/doc/sysstat-4.0.7/CHANGES/usr/share/doc/sysstat-4.0.7/COPYING/usr/share/doc/sysstat-4.0.7/CREDITS/usr/share/doc/sysstat-4.0.7/README/usr/share/doc/sysstat-4.0.7/TODO/usr/share/locale/af/LC_MESSAGES/sysstat.mo/usr/share/locale/de/LC_MESSAGES/sysstat.mo/usr/share/locale/es/LC_MESSAGES/sysstat.mo/usr/share/locale/fr/LC_MESSAGES/sysstat.mo/usr/share/locale/it/LC_MESSAGES/sysstat.mo/usr/share/locale/nb_NO/LC_MESSAGES/sysstat.mo/usr/share/locale/nn_NO/LC_MESSAGES/sysstat.mo/usr/share/locale/pt/LC_MESSAGES/sysstat.mo/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宜昌市重点中学2026届数学八年级第一学期期末监测模拟试题含解析
- 个人转让协议书(15篇)
- 2026届山东省济南市高新区数学七年级第一学期期末综合测试试题含解析
- 四川省眉山洪雅县联考2026届七年级数学第一学期期末考试模拟试题含解析
- 早餐机器人工作站行业投资策略研究
- 2026届山东省菏泽市数学七上期末考试模拟试题含解析
- 2026届内蒙古呼伦贝尔市海拉尔区第九中学数学九上期末监测试题含解析
- 工商银行阿勒泰地区富蕴县2025秋招笔试会计学专练及答案
- 邮储银行百色市凌云县2025秋招笔试英语阅读理解题专练30题及答案
- 邮储银行濮阳市华龙区2025秋招英文面试20问及高分答案
- 协会转让接手协议书模板
- 看板管理管理办法
- 2025至2030镍氢电池隔膜行业市场发展现状及竞争格局与投资价值报告
- 造林质量管理办法
- 高中考试中的数学解题技巧
- 学校保洁服务投标方案(技术标)
- 《商务大数据分析导论》全套教学课件
- 《淞沪会战》课件
- 国庆节课件下载
- 幼儿园中班彩虹泡泡龙课件
- 大量输血课件教学课件
评论
0/150
提交评论