程序包管理rpm和yum

Posted liuyuanq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序包管理rpm和yum相关的知识,希望对你有一定的参考价值。

Linux程序包管理:
	
	API:Application Programming Interface源码包
		POSIX:Portable OS

		程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 
			静态编译:
			共享编译:.so

	ABI:Application Binary Interface二进制包
		Windows与Linux不兼容
		库级别的虚拟化:
			Linux: WINE
				ELF
			Windows: Cywin
				exe,msl

	系统级开发 : 性能要求高
		C/C++/go : httpd,vsftpd,nginx
	应用级开发 : 
		java/Python/php/perl/ruby : hadoop,hbase(JVM),openstack(PVM)

	二进制应用程序的组成部分:
		二进制文件、库文件、配置文件、帮助文件

		程序包管理器:
			debian:deb, dpt
			redhat: rpm, rpm
				rpm: Redhat Package Manager
					RPM is Package Manager

			Gentoo: ports
			Archlinux: 

	
	源代码:name-VERSION.tar.gz
		VERSION: major.minor.release
	rpm包命名方式:
		name-VERSION-release.arch.rpm
			VERSION: major.minor.release
			release.arch:rpm的发行号
				release:release.OS

		如:	zlib-1.2.7-13.el7.i686.rpm
			redis-3.0.2-1.centos7.x64.rmp

			常见的arch:
				x86: i386, i486, i586, i686
				x86_64: x64, x86_64, amd64
				powerpc: ppc
				跟平台无关:noarch

		testapp: 拆包
			testapp-VERSION-ARCH.rpm: 主包
			testapp-devel-VERSION-ARCH.rpm:支包
			testapp-testing-VERSION-ARHC.rpm: 

		包之间:存在依赖关系
			X, Y, Z
				x-->a,b,c
					a-->y

		前段工具:自动决绝依赖关系
			yum:rhel系列系统上rpm包管理器的前端工具;
			apt-get:deb包管理器前端工具;
			zypper: suse上的rpm前端管理工具;
			dnf: Fedora 22+系统上的 rpm包管理器前端管理工具;

	查看二进制程序所依赖的库文件:
		ldd /PATH/TO/BINARY_FILE

	管理及查看本机装载的库文件:
		ldconfig 
			/sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系;

			配置文件为:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
			缓存文件:/etc/ld.so.cache

	程序包管理:
		功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作;

		1、程序的组成组成清单 (每个包独有)
			文件清单
			安装或卸载时运行的脚本
		2、数据库(公共)
			程序包名称及版本
			依赖关系;
			功能说明;
			安装生成的各文件的文件路径及校验码信息;
			等等等

			/var/lib/rpm

	管理程序包的方式:
		使用包管理器:rpm
		使用前端工具:yum, dnf

	获取程序包的途径:
		(1) 系统发版的光盘或官方的服务器;
			CentOS镜像:
				http://mirrors.aliyun.com
				http://mirrors.sohu.com
				http://mirrors.163.com
				http://mirror.hust.edu.cn
		(2) 项目官方站点
			http://zabbix.com
		(3) 第三方组织:
			Fedora-EPEL
			搜索引擎:
				http://pkgs.org
				http://rpmfind.net
				http://rpm.pbone.net
		(4) 自己制作

	建议:  检查其合法性
			来源合法性;
			程序包的完整性;


CentOS系统上rpm命令管理程序包:
	安装、卸载、升级、查询、校验、数据库维护
		-i:安装
		-U:升级
		-e:卸载
		-q:查询
		-V:校检
		--builddb,--initdb:数据库维护
	安装:INSTALL  OPTIONS

		rpm {-i|--install} [install-options] PACKAGE_FILE ...
			-v: verbose,详细详细
			-vv: 更为详细的输出
			-h: 以#显示程序包管理执行进度;每个#表示2%的进度

			rpm -ivh PACKAGE_FILE ...

				[install-options]
					--test: 测试安装,但不真正执行安装过程;dry run模式;
					--nodeps:忽略依赖关系;
					--replacepkgs: 重新安装;

					--nosignature: 不检查来源合法性;即密钥;
					--nodigest:不检查包完整性;

					--noscipts:不执行程序包脚本片断;
						%pre: 安装前脚本; --nopre
						%post: 安装后脚本; --nopost
						%preun: 卸载前脚本; --nopreun
						%postun: 卸载后脚本;  --nopostun

	升级: UPGRADE OPTIONS

		rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
		rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

			-U :升级;安装;
				安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”;
			-F :升级;
				安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;

			rpm -Uvh PACKAGE_FILE ...
			rpm -Fvh PACKAGE_FILE ...

			--oldpackage:降级;
			--force: 强行升级;

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

	查询: QUERY OPTIONS

		rpm {-q|--query} [select-options] [query-options]
		PACKAGE SELECTION OPTIONS:
		[select-options]
			-a: 所有包
				[[email protected]_centos6 ~]# rpm -qa | grep "^zsh"
				zsh-4.3.11-9.el6_10.x86_64

			-f: 查看指定的文件由哪个程序包安装生成
				[[email protected]_centos6 ~]# rpm -qf /etc/fstab
				setup-2.8.14-23.el6.noarch

			-p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;

			--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;
			--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
		PACKAGE QUERY OPTIONS:
		[query-options]
			--changelog:查询rpm包的changlog
				# rpm -q --changelog bash
			-c: 查询程序的配置文件
			-d: 查询程序的文档
			-i: information
			-l: 查看指定的程序包安装后生成的所有文件;
				rpm -ql bash
			--scripts:程序包自带的脚本片断
			-R: 查询指定的程序包所依赖的CAPABILITY;
			--provides: 列出指定程序包所提供的CAPABILITY;

		用法:
			-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
			-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
			-qa

	卸载:ERASE OPTIONS

		rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts][--notriggers] [--test] PACKAGE_NAME ...

			--allmatch: 卸载所有匹配指定名称的程序包的个版本
			--nodeps:
			--test:测试卸载;

    校验:VERIFY OPTIONS
    	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
	       U User ownership differs
	       G Group ownership differs
	       T mTime differs
	       P caPabilities differ

	包来源合法性验正及完整性验正:
		完整性验正:SHA256
		来源合法性验正:RSA

		公钥加密:
			对称加密:加密、解密使用同一密钥;
			非对称加密:密钥是成对儿的;
				public key: 公钥,公开所有人
				secret key: 私钥, 不能公开


		导入所需要公钥:
			rpm --import /PATH/FROM/GPG-PUBKEY-FILE

			CentOS 7发行版光盘提供的密钥文件:RPM-GPG-KEY-CentOS-7
				[[email protected]_centos6 ~]# ls /etc/pki/rpm-gpg/
				RPM-GPG-KEY-CentOS-6  RPM-GPG-KEY-CentOS-Debug-6  RPM-GPG-KEY-CentOS-Security-6  RPM-GPG-KEY-CentOS-Testing-6
		验正:
			(1)安装此组织签名的程序时,会自动执行验正;
			(2)手动验正:rpm -K package_file

	数据库重建:
		centos6: man rpm
		centos7: man rpmdb 

		rpm {--initdb|--rebuilddb}
			initdb: 初始化
				如果事先不存在数据库,则新建之;否则,不执行任何操作;

			rebuilddb:重建
				无论当前存在与否,直接重新创建数据库;

回顾:Linux程序包管理的实现、rpm包管理器

	rpm命令实现程序管理:
		安装:-ivh, --nodeps, --replacepkgs
		卸载:-e, --nodeps
		升级:-Uvh, -Fvh, --nodeps, --oldpackage
		查询:-q, -qa, -qf, -qi, -qd, -qc, -q --scripts, -q --changlog, -q --provides, -q --requires
		校验:-V

		导入GPG密钥:--import, -K, --nodigest, --nosignature
		数据库重建:--initdb, --rebuilddb

  

以上是关于程序包管理rpm和yum的主要内容,如果未能解决你的问题,请参考以下文章

rpm,yum程序包管理器

linux应用程序基础及安装方式(RPM,YUM和源代码编译)!

程序包管理:RPM YUM的总结

软件包管理 2 -----基本知识 rpm yum

Linux学习命令汇总七——软件包管理(rpm包 yum repo源码包管理及相关命令)

linux程序包管理 rpm yum 编译