您的位置:首页 > 产品设计 > 产品经理

RPM程序包管理

2015-12-08 00:00 579 查看
一、概述:
1、Linux下程序包分类:

源码包:程序源代码打包压缩;
二进制包:主流为rpm包和deb包;

2、程序包管理器:

rpm:Redhat Package Manager简写,最早由Red Hat开发,现在也由开源社区开发,程序包格式为rpm,大多数Linux发行版使用的包管理器,如Red Hat系列、SUSE系列等,其前端工具为yum;
dpkg:由Debian社区所开发出来的,软件包格式为deb,大多数Debian系列发行版使用的包管理器,如Debian、Ubuntu等,其前端工具为apt-get;

3、程序包的组成格式:

1)、二进制程序:

/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin,/usr/local/APP/bin,/usr/local/APP/sbin;

注意:有些特殊的应用程序放置于libexec目录中;有些第三方应用默认安装于/opt目录;

2)、库文件(开发库、运行库):
/lib64,/usr/lib64,/usr/local/lib64,/usr/local/APP/lib;

3)、配置文件:
/etc,/usr/local/APP/etc或conf目录;

4)、帮助文件:
/usr/share/man,/usr/local/share/man,/usr/local/APP/man;

4、程序包命名格式:
name:软件名;
version:版本号;
major:主版本号;
minor:次版本号;
release:发行号;

1)、源代码:name-version.tar.{gz,bz2,xz}:
version:major.minor.release

2)、rpm包的命名格式:
name-version-relase.arch.rpm
version:major.minor.release,同源代码;
release:rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS;

arch:适用于的硬件平台:
x86:i386,i486,i586,i686等;
x86_64:x86_64;
powerpc:ppc;
noarch:依赖于虚拟机;

5、分包机制:
核心包,主包:命名与源程序一致;
bash-4.2.3-3.centos7.x86_64.rpm
子包:
bash-a-4.2.3-3.centos7.x86_64.rpm
bash-b-4.2.3-3.centos7.x86_64.rpm
bash-devel-4.2.3-3.centos7.x86_64.rpm

6、获取rpm包的途径:
1)、发行的光盘或站点服务器:
镜像:
阿里云开源镜像站: http://mirrors.aliyun.com/
网易开源镜像站:http://mirrors.163.com/
搜狐开源镜像站:http://mirrors.sohu.com/



2)、项目的官网:
源代码,rpm包;

3)、很多第三方机构或个人制作并公开发布许多rpm包;
http://rpmfind.net http://rpm.pbone.net
可靠的途径:EPEL
Fedora-EPEL

二、包管理器的功能:
rpm包管理器的常见使用场景:打包,安装,卸载,升级,校验,数据库管理;

1、安装程序包:
#rpm [option] /path/to/package_file
-i:install,安装程序;
-v:显示安装信息,更详细的安装信息可用-vv,-vvv…;
-h:以#显示安装进度,一个#代表2%;
--test:测试安装;
--nodeps:忽略依赖关系;
如果依赖于其它包:
1)、解决依赖关系;
2)、忽略依赖关系;能安装上,但有可能无法运行;

--replacepkgs:重新安装;
如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为 .rpmnew

-ivh:常用组合安装选项;




2、卸载程序包:
#rpm [option] package_name
-e: erase:卸载程序;
--nodeps:
如果被其它包所依赖:
1)、将依赖于此包的所有包一并卸载;
2)、忽略依赖关系;能卸载,但依赖于此包程序包可能会运行不正常;

如果包的配置文件安装后曾被改动过,卸载时,此文件将不会卸载,而是被重命名并保留;
例如:
#warning:/etc/zprofilesaved as /etc/zprofile.rpmsave





3、升级程序包:
新版本替换老版本:
rpm [option]/path/to/package_file
-F:纯升级,需要升级的程序包必须已经安装;-Fvh
-U:升级或安装;需要升级的程序包若已安装,则升级;若未安装,则升级;-Uvh
--force:强制升级,升级后的版本冲突等;

注意:不应该对内核执行升级操作,而是安装,系统允许多内核并存;

4、查询操作:
1)、查询某包是否安装:
rpm -q package_name...




2)、查询所有已经安装的包:
#rpm -qa
按条件过滤:
#rpm -qa | grep 'PATTERN'




3)、查询包的描述信息:
#rpm -qi package_name





4)、查询某包安装生成了哪些文件:
#rpm -ql package_name


(1)、查询某包安装生成了哪些配置文件:
#rpm -qc package_name





(2)、查询某包安装生成了哪些帮助文件:
#rpm -qd package_name





(3)、查询程序包的相关脚本:
#rpm -q --scripts package_name

脚本有四类:
preinstall:安装前脚本;
postinstall:安装后脚本;
preuninstall:卸载前脚本;
postuninstall:年前后脚本;




5)、查询某文件是由哪个包安装生成的:
rpm -qf /path/to/some_file





6)、对尚未安装的包执行查询:
#rpm [option] /path/to/package_file
-qpi:描述信息;
-qpl:安装生成哪些文件;
-qpc:生成哪些配置文件;
-qpd:生成哪些帮助文件;


5、校验:
rpm包来源合法性及完整性检验:
包制作者制作完成之后会附加数字签名于包上,可用来验证rpm包的来源合法性和包的完整性;包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面;

验正过程:
前提:必须有可靠机制获取到包制作者的公钥;
1)、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;
2)、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,则意味着完整性没问题;

导入:
#rpm --import /path/to/key_file

显示所有已经导入的gpg格式的公钥:
#rpm -qa gpg-pubkey*

显示密钥的详细信息:
#rpm -qi gpg-pubkey-NAME


检查包:安装过程中会自动执行;

手动检查:
#rpm -K /path/to/package_file
#rpm --checksig /path/to/package_file

不检查包完整性:
#rpm -K --nodigest

不检查来源合法性:
#rpm -K �nosignature


检查程序包安装生成的文件属性是否发生变化:
#rpm -V package_name
-V:若程序包发生变化显示以下信息;某属性无变化,显示为.
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


6、数据库重建:
如果rpm管理器无法正常使用,可以尝试重建数据库解决;
数据库目录:/var/lib/rpm

重建:
初始化:
#rpm --initdb
如果事先没有库,会新建一个;如果有,则不新建;

重建:
#rpm --rebuilddb
直接重建,覆盖原有的数据库


本文出自 “小马的学习记录” 博客,请务必保留此出处http://masachencer.blog.51cto.com/8683770/1670525
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux 程序管理 rmp