Linux系统程序包管理之rpm
==============================================================================
概述:
本章内容:软件的运行环境,软件包基础,rpm包管理,yum管理,定制yum仓库,编译安装
==============================================================================
软件运行环境
★API:Application Programming Interface (应用程序开发接口)
☉POSIX:Portable OS(国际标准)
★ABI:Application Binary Interface(应用二进制程序接口)
☉Windows与Linux不兼容
☉库级别虚拟化
★开发语言:
☉系统级开发:
C/C++(依赖于c库);
httpd,nginx,vsftpd,go
☉应用级开发:
★程序格式
☉c/c++
☉java/Python
★项目构建工具
包管理
1.概述:
★二进制应用程序的组成部分:
★程序包管理:
☉程序包管理器:
★包命名格式
☉源代码:name-VERSION.tar.gz|bz2|xz
☉rpm包命名格式:name-VERSION-release.arch.rpm
VERSION:major.minor.release.arc
release:rpm包发行号
changelog文档(内容修复改进的相关文档)
常见的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64powerpc: ppc
跟平台无关:noarch (适用于所有平台)

示例:
bash-4.2.46-19.el7.x86_64.rpm
release:release.OS
★包:分类和拆包
Application-VERSION-ARCH.rpm:主包
Application-devel-VERSION-ARCH.rpm:开发子包
Application-utils-VERSION-ARHC.rpm:其它子包
Application-libs-VERSION-ARHC.rpm:其它子包

☉包之间:可能存在依赖关系,甚至循环依赖
自动解决依赖包管理前端工具:
2.库文件:
★查看二进制程序所依赖的库文件:
★管理及查看本机装载的库文件:
3.包管理器:
★程序包管理器:
☉功能:
☉程序包的组成清单:(每个程序包单独实现)
RPM包内的文件清单
RPM的元数据,如名称,版本,依赖性,描述等
安装或卸载时运行的脚本
☉数据库(公共)
路径:/var/lib/rpm
程序包名称及版本;
依赖关系;
功能说明;
包安装后生成的各文件路径及校验码信息
3.程序包的来源:
★管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
★获取程序包的途径:
☉系统开发版的光盘或官方的服务器(或CentOS镜像站点)
☉项目官方站点
☉第三方组织:
Fedora-EPEL:Extra Packages for Enterprise Linux
搜索引擎:
http://pkgs.org;
http://rpmfind.net;
http://rpm.pbone.net;
https://sourceforge.net/
☉自己制作
rpm 命令管理程序包详解
1.rpm语法及选项概述:
★rpm:
☉语法:
☉选项:
2.安装及子选项:
★语法:
☉选项:
-v:verbose 显示详细信息;
-vv:更详细的输出;
-h: hash marks 输出进度条;每个#号表示2%的进度
--test:测试安装,检查并报告依赖关系及冲突关系,但不真正执行安装;称为dry run(干跑)模式;
--nodeps:忽略依赖关系,不建议;
--replacepkgs:替代原来的包,重新安装(先把由原来的配置文件删除再重装)
--nosignature:不检查包签名信息,不检查来源合法性
--nodigest:不检查包完整性
注意:rpm自带四类脚本(--noscripts)
%pre:安装前脚本; --nopre
%post:安装后脚本; --nopost
%preun:卸载前脚本; --nopreun
%postun:卸载后脚本;--nopostun
☉真正安装执行操作使用的命令
3.升级及子选项:
★语法:
注意:
★升级命令:
--oldpackage:降级(回滚操作)
--force: 强行升级
注意:
4.卸载及子选项:
★作用:
★语法:
注意:
★简单用法
☉选项:
5.查询:
★语法:
☉[select-options] 挑选选项
-q PACKAGE_NAME:查询某包或某些包是否安装
-qa:查询已安装的所有包
-qf FILE:查看指定的文件由哪个程序包安装生成
-p PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;
--whatprovides CAPABILITY(能力):查询指定的CAPABILITY由哪个包所提供
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
rpm2cpio 包文件|cpio–itv预览包内文件
rpm2cpio 包文件|cpio–id “*.conf”释放包内文件
☉[query-options] 查询选项
--changelog:查询rpm包的changelog(变更记录)
-c:查询指定的程序包的配置文件
-d:查询程序包安装完成后所生成的帮助文档
-qi,-info:程序包相关的信息,版本号,大小,所属的包组等
-l,--list:查看指定的程序包安装后生成的所有文件列表;
--scripts:查看程序包自带的脚本片断
-R,--requires:查询指定的程序包所依赖的CAPABILITY;
--provides:列出指定程序包所提供的CAPABILITY
☉常用组合用法:
演示:
[root@centos7 ~]# rpm -q tree
tree-1.6.0-10.el7.x86_64
[root@centos7 ~]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz
[root@centos7 ~]# rpm -qf /etc/fstab
setup-2.8.71-6.el7.noarch
[root@centos7 ~]# rpm -qc bash
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc
[root@centos7 ~]# rpm -qi bash
Name : bash
Version : 4.2.46
Release : 19.el7
Architecture: x86_64
Install Date: 2016年11月06日 星期日 18时31分30秒
Group : System Environment/Shells
Size : 3663618
License : GPLv3+
Signature : RSA/SHA256, 2015年11月25日 星期三 22时14分53秒, Key ID 24c6a8a7f4a80eb5
Source RPM : bash-4.2.46-19.el7.src.rpm
Build Date : 2015年11月20日 星期五 13时04分53秒
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.gnu.org/software/bash
Summary : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.
[root@centos7 ~]# rpm -qc httpd
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-systemd.conf
/etc/httpd/conf.modules.d/01-cgi.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/logrotate.d/httpd
/etc/sysconfig/htcacheclean
/etc/sysconfig/httpd
[root@centos7 ~]# rpm -qd httpd
/usr/share/doc/httpd-2.4.6/ABOUT_APACHE
/usr/share/doc/httpd-2.4.6/CHANGES
/usr/share/doc/httpd-2.4.6/LICENSE
/usr/share/doc/httpd-2.4.6/NOTICE
/usr/share/doc/httpd-2.4.6/README
/usr/share/doc/httpd-2.4.6/VERSIONING
/usr/share/doc/httpd-2.4.6/httpd-dav.conf
/usr/share/doc/httpd-2.4.6/httpd-default.conf
/usr/share/doc/httpd-2.4.6/httpd-info.conf
/usr/share/doc/httpd-2.4.6/httpd-languages.conf
/usr/share/doc/httpd-2.4.6/httpd-manual.conf
/usr/share/doc/httpd-2.4.6/httpd-mpm.conf
/usr/share/doc/httpd-2.4.6/httpd-multilang-errordoc.conf
/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
/usr/share/doc/httpd-2.4.6/proxy-html.conf
/usr/share/man/man8/apachectl.8.gz
/usr/share/man/man8/fcgistarter.8.gz
/usr/share/man/man8/htcacheclean.8.gz
/usr/share/man/man8/httpd.8.gz
/usr/share/man/man8/rotatelogs.8.gz
/usr/share/man/man8/suexec.8.gz
6.校验:
★语法:
☉常见用法:
当没有输出结果时表示软件包完整ok,当有相应的结果输出表明对应的内容有修改,及具体如下:
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:mTimediffers 文件的创建时间已被改变;
P:capabilities differ
★包来源合法性验正及完整性验正:
☉获取并导入信任的包制作者的秘钥
◆验证:
安装此组织签名的程序时,会自动执行验证;
手动验证:rpm -K PACKAGE_FILE
◆加密方法:
公钥加密:
对称加密:加密、解密使用同一密钥;
非对称加密:密钥是成对儿的
public key:公钥,公开所有人
secret key:私钥, 不能公开
◆导入所需要的公钥:
rpm -K |checksigrpmfile:检查包的完整性和签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
rpm -qagpg-pubkey*
演示:
[root@centos7 ~]# rpm -V httpd
遗漏 c /etc/httpd/conf.d/welcome.conf
S.5....T. c /etc/httpd/conf/httpd.conf
7.数据库重建:
★rpm数据库路经:
/var/lib/rpm
查询操作:通过此处得到数据库进行
★用法:
☉选项:
☉获取帮助
CentOS6 man rpm
CentOS7 man rpmdb