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

软件包管理—rpm总结

2016-08-24 20:22 447 查看
描述:
RPM是RedHatPackageManager的缩写,是由RedHat公司开发的软件包安装和管理程序,同Windows平台上的Uninstaller比较类似。使用RPM,用户可以自行安装和管理Linux上的应用程序和系统工具。RPM可以让用户直接以binary方式安装软件包,并且可替用户查询是否已经安装了有关的库文件;在用RPM删除程序时,它又会聪明地询问用户是否要删除有关的程序。如果使用RPM来升级软件,RPM会保留原先的配置文件,这样用户就不用重新配置新的软件了。RPM保留一个数据库,这个数据库中包含了所有的软件包的资料,通过这个数据库,用户可以进行软件包的查询.

功能:
1、可以安装、删除、升级和管理软件;当然也支持在线安装和升级软件;
2、通过RPM包管理能知道软件包包含哪些文件,也能知道系统中的某个文件属于哪个软件包;
3、可以在查询系统中的软件包是否安装以及其版本;
4、作为开发者可以把自己的程序打包为RPM 包发布;
5、软件包签名GPG和MD5的导入、验证和签名发布
6、依赖性的检查,查看是否有软件包由于不兼容而扰乱了系统;

使用权限:
RPM软件的安装、删除、更新只有root权限才能使用;对于查询功能任何用户都可以操作;如果普通用户拥有安装目录的权限,也可以进行安装

包命名格式:
源码包: name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
rpm包:name-version-arch.rpm | name-version-arch.src.rpm




特殊标记:
1、fcXX,elXX:表示这个软件包的发行商版本,bash-4.2.46-19.e17.x86_64.rpm表示这个软件包是在RHEL 7.x(Red Hat Enterprise Linux)/CentOS 7.x下使用。
2、devel:表示这个RPM包是软件的开发包,例如mysql-devel-5.1.52-1.el6_0.1.i686.rpm。
3、noarch:说明这样的软件包可以在任何平台上安装,不需要特定的硬件平台。在任何硬件平台上都可以运行。

库文件:
查看二进制程序所依赖的库文件:
ldd /PATH/TO/BINARY_FILE
管理及查看本机装载的库文件:
ldconfig
/sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件
名及文件路径映射关系
配置文件: /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件: /etc/ld.so.cache

程序包的来源
管理程序包的方式:
使用包管理器: rpm
使用前端工具: yum, dnf
获取程序包的途径:
(1) 系统发版的光盘或官方的服务器;
CentOS镜像: https://www.centos.org/download/ http://mirrors.aliyun.com http://mirrors.sohu.com http://mirrors.163.com
(2) 项目官方站点
(3) 第三方组织:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推荐,包很全
搜索引擎: http://pkgs.org http://rpmfind.net http://rpm.pbone.net https://sourceforge.net/
(4) 自己制作
注意:检查其合法性: 来源合法性,程序包的完整性

常用命令组合:
-ivh:安装显示安装进度--install--verbose--hash
-Uvh:升级软件包--Update;
-qpl:列出RPM软件包内的文件信息[Query Package list];
-qpi:列出RPM软件包的描述信息[Query Package install package(s)];
-qf:查找指定文件属于哪个RPM软件包[Query File];
-Va:校验所有的RPM软件包,查找丢失的文件[View Lost];
-e:删除包

安装:
rpm {-i|--install} [install-options] PACKAGE_FILE…
-v: verbose 详细安装过程
-h: 以#显示程序包管理执行进度
rpm -ivh PACKAGE_FILE ...
示例:
安装html软件包



rpm包安装
[install-options]
--test: 测试安装,但不真正执行安装; dry run模式


--nodeps:忽略依赖关系,不建议使用该选项
--replacepkgs | replacefiles
--nosignature: 不检查来源合法性,不建议使用该选项
--nodigest:不检查包完整性,不建议使用该选项
--noscipts:不执行程序包脚本片断
%pre: 安装前脚本; --nopre
%post: 安装后脚本; --nopost
%preun: 卸载前脚本; --nopreun
%postun: 卸载后脚本; --nopostun

升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
upgrade:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则“安装”
freshen:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则不执行升级操作
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降级
--force: 强行升级

升级注意项
(1) 不要对内核做升级操作; Linux支持多内核版本并存,因此,对直接安装新版本内核
(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

包查询
rpm {-q|--query} [select-options] [query-options] [select-options]
[root@localhost Packages]# rpm -q tree    查询tree包是否已安装
tree-1.6.0-10.el7.x86_64
-a: 所有包
-f: 查看指定的文件由哪个程序包安装生成
[root@localhost Packages]# rpm -qf /usr/share/doc/tree-1.6.0
tree-1.6.0-10.el7.x86_64
-p rpmfile:针对尚未安装的程序包文件做查询操作;

--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
[root@CentOS 7 ~]# rpm -q --whatprovides `which ifconfig`
net-tools-2.0-0.17.20131004git.el7.x86_64
[root@CentOS 7 ~]# rpm -q --whatprovides /usr/sbin/ifconfig
net-tools-2.0-0.17.20131004git.el7.x86_64
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
rpm2cpio 包文件|cpio –itv 预览包内文件
rpm2cpio 包文件|cpio –id “ *.conf” 释放包内文件

包查询
[query-options]
--changelog:查询rpm包的changelog
-c: 查询程序的配置文件
-d: 查询程序的文档
-i: information
-l: 查看指定的程序包安装后生成的所有文件;
--scripts:程序包自带的脚本片断
-R: 查询指定的程序包所依赖的CAPABILITY;
--provides: 列出指定程序包所提供的CAPABILITY;

包查询
查询用法:
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE,-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...-qa
卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [-test]PACKAGE_NAME

包校验
rpm {-V|--verify} [select-options] [verify-options]
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 Link路径改变
U User ownership differs 文件的所有者是否改变
G Group ownership differs 文件的所属组是否改变
T mTime differs 文件的创建时间是否改变
P capabilities differ

包校验
包来源合法性验正及完整性验正:
完整性验正: SHA256
来源合法性验正: RSA
公钥加密:
对称加密:加密、解密使用同一密钥;
非对称加密:密钥是成对儿的
public key: 公钥,公开所有人
secret key: 私钥, 不能公开
导入所需要公钥:
rpm -K|checksig rpmfile 检查包的完整性和签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7发行版光盘提供: RPM-GPG-KEY-CentOS-7
rpm -qa gpg-pubkey*

rpm数据库
数据库重建:
/var/lib/rpm
rpm {--initdb|--rebuilddb}
initdb: 初始化 如果事先不存在数据库,则新建之否则,不执行任何操作
rebuilddb:重建 无论当前存在与否,直接重新创建数据库

总结:
一、删除rpm包后利用本地光盘恢复rpm包的实验的步骤:(以CentOS 7为例,CentOS 6的方法类似)
1,rpm -e rpm --nodeps (在执行此操作前先做快照);reboot
2,光盘启动,进入救援模式
Centos 6
df
mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom (执行此操作前确保光盘处于正在使用状态)
Cenots 7
3, df (查看光盘是否挂载)
4,rpm -ivh /run/../Package/rpm-4...*.rpm --root=/mnt/sysimage
5,reboot



























1,rpm解决不了软件包之间的依赖性
2,常用组合选项:

-ivh:安装显示安装进度--install--verbose--hash -Uvh:升级软件包--Update; -qpl:列出RPM软件包内的文件信息[Query Package list]; -qpi:列出RPM软件包的描述信息[Query Package install package(s)]; -qf:查找指定文件属于哪个RPM软件包[Query File]; -Va:校验所有的RPM软件包,查找丢失的文件[View Lost]; -e:删除包3,常用参数: Install/Upgrade/Erase options:
-i, --install install package(s)
-v, --verbose provide more detailed output
-h, --hash print hash marks as package installs (good with -v)
-e, --erase erase (uninstall) package
-U, --upgrade=+ upgrade package(s)
--replacepkge 无论软件包是否已被安装,都强行安装软件包
--test 安装测试,并不实际安装
--nodeps 忽略软件包的依赖关系强行安装
--force 忽略软件包及文件的冲突
Query options (with -q or --query):
-a, --all query/verify all packages
-p, --package query/verify a package file
-l, --list list files in package
-d, --docfiles list all documentation files
-f, --file query/verify package(s) owning file

作业:

1,删除kernel包后,无法启动,并恢复之 (CentOS 7为例)






































内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux 管理 软件包