zoukankan      html  css  js  c++  java
  • 程序包管理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: 所有包
    				[root@study_centos6 ~]# rpm -qa | grep "^zsh"
    				zsh-4.3.11-9.el6_10.x86_64
    
    			-f: 查看指定的文件由哪个程序包安装生成
    				[root@study_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
    				[root@study_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
      
    Linux程序包管理(2)
    
    	CentOS: yum, dnf
    
    	YUM: yellow dog, Yellowdog Update Modifier
    
    	yum repository: yum repo
    		存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata);
    
    		文件服务器:
    			ftp://
    			http://
    			nfs://
    			file:///
    
    	yum客户端:
    		配置文件:
    			/etc/yum.conf:为所有仓库提供公共配置
    			/etc/yum.repos.d/*.repo:为仓库的指向提供配置
    
    		仓库指向的定义:
    		[repositoryID]
    		name=Some name for this repository
    		baseurl=url://path/to/repository/
    		enabled={1|0}
    		gpgcheck={1|0}
    		gpgkey=URL
    		enablegroups={1|0}
    		failovermethod={roundrobin|priority}
    			默认为:roundrobin,意为随机挑选;
    		cost=
    			默认为1000
    
    
    		教室里的yum源:http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/
    		CentOS 6.6 X84_64 epel: http://172.16.0.1/fedora-epel/6/x86_64/
    
    	yum命令的用法:
    		yum [options] [command] [package ...]
    
           command is one of:
            * install package1 [package2] [...]
            * update [package1] [package2] [...]
            * update-to [package1] [package2] [...]
            * check-update
            * upgrade [package1] [package2] [...]
            * upgrade-to [package1] [package2] [...]
            * distribution-synchronization [package1] [package2] [...]
            * remove | erase package1 [package2] [...]
            * list [...]
            * info [...]
            * provides | whatprovides feature1 [feature2] [...]
            * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
            * makecache
            * groupinstall group1 [group2] [...]
            * groupupdate group1 [group2] [...]
            * grouplist [hidden] [groupwildcard] [...]
            * groupremove group1 [group2] [...]
            * groupinfo group1 [...]
            * search string1 [string2] [...]
            * shell [filename]
            * resolvedep dep1 [dep2] [...]
            * localinstall rpmfile1 [rpmfile2] [...]
               (maintained for legacy reasons only - use install)
            * localupdate rpmfile1 [rpmfile2] [...]
               (maintained for legacy reasons only - use update)
            * reinstall package1 [package2] [...]
            * downgrade package1 [package2] [...]
            * deplist package1 [package2] [...]
            * repolist [all|enabled|disabled]
            * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
            * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
            * check
            * help [command]
    
        显示仓库列表:
        	repolist [all|enabled|disabled]
    
        显示程序包:
        	list
        		# yum list [all | glob_exp1] [glob_exp2] [...]
        		# yum list {available|installed|updates} [glob_exp1] [...]
    
        安装程序包:
        	install package1 [package2] [...]
    
        	reinstall package1 [package2] [...]  (重新安装)
    
        升级程序包:
        	update [package1] [package2] [...]
    
        	downgrade package1 [package2] [...] (降级)
    
        检查可用升级:
        	check-update
    
        卸载程序包:
        	remove | erase package1 [package2] [...]
    
        查看程序包information:
        	info [...]
    
        查看指定的特性(可以是某文件)是由哪个程序包所提供:
        	provides | whatprovides feature1 [feature2] [...]
    
        清理本地缓存:
        	clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    
        构建缓存:
        	makecache
    
        搜索:
        	search string1 [string2] [...]
    
        	以指定的关键字搜索程序包名及summary信息;
    
        查看指定包所依赖的capabilities:
        	deplist package1 [package2] [...]
    
        查看yum事务历史:
        	history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
    
        安装及升级本地程序包:
    		* localinstall rpmfile1 [rpmfile2] [...]
               (maintained for legacy reasons only - use install)
            * localupdate rpmfile1 [rpmfile2] [...]
               (maintained for legacy reasons only - use update)
    
        包组管理的相关命令:
            * groupinstall group1 [group2] [...]
            * groupupdate group1 [group2] [...]
            * grouplist [hidden] [groupwildcard] [...]
            * groupremove group1 [group2] [...]
            * groupinfo group1 [...]
    
        如何使用光盘当作本地yum仓库:
        	(1) 挂载光盘至某目录,例如/media/cdrom
        		# mount -r -t iso9660 /dev/cdrom /media/cdrom
        	(2) 创建配置文件
        	[CentOS7]
        	name=
        	baseurl=
        	gpgcheck=
        	enabled=
    
        yum的命令行选项:
        	--nogpgcheck:禁止进行gpg check;
        	-y: 自动回答为“yes”;
        	-q:静默模式;
        	--disablerepo=repoidglob:临时禁用此处指定的repo;
        	--enablerepo=repoidglob:临时启用此处指定的repo;
        	--noplugins:禁用所有插件;
    
        yum的repo配置文件中可用的变量:
        	$releasever: 当前OS的发行版的主版本号;
        	$arch: 平台;
        	$basearch:基础平台;
        	$YUM0-$YUM9:自定义变量
    
        	http://mirrors.magedu.com/centos/$releasever/$basearch/os
    
        创建yum仓库:
        	createrepo [options] <directory>
    

      

  • 相关阅读:
    python学习第十五天
    python学习第十三、十四天
    python学习第十二天
    python学习第j十一天
    python学习第十天
    ViewController push的自定义动画
    iOS 判断设备是否越狱
    iOS
    OBJC字面量
    ios8 share Extension 分享扩展
  • 原文地址:https://www.cnblogs.com/liuyuanq/p/10000367.html
Copyright © 2011-2022 走看看