1. 程式人生 > >程序包管理rpm和yum

程序包管理rpm和yum

rpm use and amd64 校驗碼 amd sbin glog base

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

  

程序包管理rpm和yum