Linux系统程序包管理之rpm
==============================================================================
概述:
本章内容:软件的运行环境,软件包基础,rpm包管理,yum管理,定制yum仓库,编译安装
==============================================================================
★API:Application Programming Interface (应用程序开发接口)
☉POSIX:Portable OS(国际标准)
程序源代码--> 预处理--> 编译--> 汇编--> 链接
★ABI:Application Binary Interface(应用二进制程序接口)
☉Windows与Linux不兼容
linux:文件格式:ELF(Executable and Linkable Format)
win:文件格式:exe,msl PE(Portable Executable)
☉库级别虚拟化
Linux:WINE(提供模拟windows的库,运行win环境)
Windows:Cywin(提供linux的运行环境)
★开发语言:
☉系统级开发:
C/C++(依赖于c库);
httpd,nginx,vsftpd,go
☉应用级开发:
java(依赖于jvm虚拟机)
Python(openstack云站),php,perl(依赖于per解释器),ruby
★程序格式
☉c/c++
源代码:文本格式的程序代码;
编译开发环境:编译器,头文件,开发库
二进制格式:文本格式的程序代码-->编译器-->二进制格式(二进制程序、库文件、配置文件、帮助文件)、
☉java/Python
源代码:编译能够在其虚拟机(jvm/pvm)运行的格式;
开发环境:编译器、开发库;
二进制
★项目构建工具
c/c++:make
jave:maven
1.概述:
★二进制应用程序的组成部分:
二进制文件、库文件、配置文件、帮助文件
★程序包管理:
源代码-->目标二进制格式(二进制程序、库文件、配置文件、帮助文件)-->组织成为一个或有限几个“包文件”(安装,升级,卸载,查询,校验)
☉程序包管理器:
deblan:dpt,dpkg 以".deb"后缀;
redhat:rpm (redhat package manager) 以 ".rpm"后缀 ;
S.u.S.E:rpm, ".rpm"命令
★包命名格式
☉源代码:name-VERSION.tar.gz|bz2|xz
ERSION: major(主版本号).minor(次版本号).release(发行号)
☉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:其它子包
☉包之间:可能存在依赖关系,甚至循环依赖
自动解决依赖包管理前端工具:
yum:rpm包管理器的前端工具;
apt-get:deb包管理器前端工具;
zypper:suse上的rpm前端管理工具;
dnf:Fedora 18+ rpm包管理器前端管理工具
2.库文件:
★查看二进制程序所依赖的库文件:
ldd /PATH/TO/BINARY_FILE
★管理及查看本机装载的库文件:
ldconfig;
/sbin/ldconfig-p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
3.包管理器:
★程序包管理器:
☉功能:
将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
☉程序包的组成清单:(每个程序包单独实现)
RPM包内的文件清单
RPM的元数据,如名称,版本,依赖性,描述等
安装或卸载时运行的脚本
☉数据库(公共)
路径:/var/lib/rpm
程序包名称及版本;
依赖关系;
功能说明;
包安装后生成的各文件路径及校验码信息
3.程序包的来源:
★管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
★获取程序包的途径:
☉系统开发版的光盘或官方的服务器(或CentOS镜像站点)
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
☉项目官方站点
☉第三方组织:
Fedora-EPEL:Extra Packages for Enterprise Linux
Rpmforge:RHEL推荐,包很全
搜索引擎:
http://pkgs.org;
http://rpmfind.net;
http://rpm.pbone.net;
https://sourceforge.net/
☉自己制作
注意:检查其合法性:来源合法性,程序包的完整性
1.rpm语法及选项概述:
★rpm:
安装、升级、卸载、查询和校验、数据库维护(都是通过rpm命令来实现的)
☉语法:
rpm [OPTIONS] [PACKAGE_FILE]
☉选项:
-i,--install:安装
-U,--update,-F,--freshen:升级
-e,--erase:卸载
-q,--query:查询
-V,--verify:校验
--builddb,--initdb:数据库维护
2.安装及子选项:
★语法:
rpm {-i|--install} [install-options] PACKAGE_FILE…
☉选项:
-v:verbose 显示详细信息;
-vv:更详细的输出;
-h: hash marks 输出进度条;每个#号表示2%的进度
--test:测试安装,检查并报告依赖关系及冲突关系,但不真正执行安装;称为dry run(干跑)模式;
--nodeps:忽略依赖关系,不建议;
--replacepkgs:替代原来的包,重新安装(先把由原来的配置文件删除再重装)
--nosignature:不检查包签名信息,不检查来源合法性
--nodigest:不检查包完整性
注意:rpm自带四类脚本(--noscripts)
%pre:安装前脚本; --nopre
%post:安装后脚本; --nopost
%preun:卸载前脚本; --nopreun
%postun:卸载后脚本;--nopostun
☉真正安装执行操作使用的命令
rpm -ivh PACKAGE_FILE
3.升级及子选项:
★语法:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
注意:
-U(upgrade):安装有旧版程序包,则“升级”如果不存在旧版程序包,则“安装”
-F(freshen):安装有
旧版程序包,则“升级”如果不存在旧版程序包,则不执行升级操作
★升级命令:
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降级(回滚操作)
--force: 强行升级
注意:
不要对内核做升级操作;Linux支持多内核版本并存,因此,可以直接安装新版本内核;
如果源程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留。
4.卸载及子选项:
★作用:
移除已安装的程序包
★语法:
rmp {-e|--erase}[--allmatches][--nodeps][--test] PACKAGE_NAME
注意:
卸载和查询是包的名,因为包已经存在了;而安装和升级,包是不存在的,所以是包的文件路径
★简单用法
rpm -e PACKAGE_NAME...
☉选项:
--allmatches:卸载所有匹配名称的程序包各版本
--nodeps:忽略依赖关系
--test:测试卸载,dry run 模式
5.查询:
★语法:
rpm {-q|--query} [select-options] [query-options]
☉[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
☉常用组合用法:
-qi PACKAGE;-qf FILE;-qc PACJAGE;-ql PACKAGE;-qd PACKAGE ;-qpi PACKAGE_FILE;-qpl PACKAGE_FILE;-qpc PACKAGE_FILE,..
演示:
[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.校验:
★语法:
rpm {-V|--verify} [select-options] [verify-options]
☉常见用法:
rpm -V PACHAGE_NAME
当没有输出结果时表示软件包完整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
★包来源合法性验正及完整性验正:
完整性验正:SHA256
来源合法性验正:RSA
☉获取并导入信任的包制作者的秘钥
对于CentOS发行版来说:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
◆验证:
安装此组织签名的程序时,会自动执行验证;
手动验证: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
查询操作:通过此处得到数据库进行
★用法:
rpm {--initdb|--rebuilddb}
☉选项:
--initdb: 初始化数据库。当前无任何数据库,则新建之;当前有时不执行任何操作。
--rebuilddb:重新构建。无论当前存在与否,都会直接重新创建数据库。
☉获取帮助
CentOS6 man rpm
CentOS7 man rpmdb
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。