路漫漫其修远兮
吾将上下而求索

linux程序管理:rpm命令

项目构建工具:可以自动构建需要的文件,顺序等操作

        c/c++:make命令

        java:maven工具

程序包管理器:

从开发到最后的包:源代码->目标二进制格式(二进制程序,库文件,配置文件,帮助文件)->组织成为一个或有限几个包文件

对安装包的操作包括:安装、升级、卸载、查询、校验

程序包管理器:不同系用不同的管理器和包格式

        debian:dpt,dpkg,"deb"

        redhat:redhat package manager,"rpm";rpm is package manager

        suse:rpm

下载的源代码命名格式一般是:name-VERSION.tar.gz

        VERSION包含的组成部分:major:主版本号,minor次版本号,release发行号:比如:redis-3.0.2

下载的rpm包命名格式:name-VERSION-release.arch.rpm

        VERSION包含的部分,这个是源码的版本号:major.minor.release

        release.arch:rpm包的发行号,有时候是源代码没有改变,但是改变了制作rpm的配置文件,可以改这个release,arch指的是架构

        有时候rpm包的命名为:realese.os.arch.rpm,会增加一个系统os,来区分是安装在哪个系统上,比如centos6或者centos7

                这是个例子:redis-2.4.10-1.el6.x86_64

                由源码编译为rpm包:redis-3.0.2.tar.gz—redis-3.0.2-1.centos7.x86.rpm

有时候rpm包有拆包的习惯:主包和支包

主包:name-VERSION-release.arch.rpm

支包:name-function-VERSION-release.arch.rpm

比如下面的

openssl-1.0.1e-48.el6.x86_64.rpm

openssl-devel-1.0.1e-48.el6.x86_64.rpm

openssl-perl-1.0.1e-48.el6.x86_64.rpm

前端工具:自动解决依赖关系,a依赖b,会自动安装b

yum:rhel系列系统上rpm包管理器的前端工具

apt-get:deb包管理器的前端工具

zypper:suse的rpm包管理器前端工具

dnf:fedora 22+系统上rpm包管理器的前端工具

程序包管理器:

功能:将编译好的应用程序的各组成文件打包成一个或多个程序包文件,从而更方便的实现程序包的安装,升级,等管理操作

程序包组成清单(每个程序包都单独实现)

文件清单

安装或卸载时运行的脚本

数据库(公共)

程序包的名称和版本

依赖关系

功能说明

安装生成各文件的文件路径及校验码信息

……

获取程序包的途径:

系统发行版光盘或官方文件服务器(镜像站点)

http://mirrors.aliyum.com

http://mirrors.163.com

第三方组织

epel源

搜索引擎:

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

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

rpm命令:centos系统上管理命令

rpm [options] [package_file]
	安装:-i,--install
	升级:-U,--update,-F,freshen
	卸载:-e,--erase
	查询:-q,--query
	校验:-V,--verify
	数据库维护:--builddb,--initdb

安装

rpm {-i|--install} [install-options] PACKAGE_FILE ..
	rpm ivh PACKAGE_FILE ..  最常用的命令
	general options:
		-v:verbose,详细信息
		-w:更详细的信息
	[install-options]
		-h:hash marks:输出进度条,每个#表示2%的进度
		--test:测试安装,检查并报告依赖关系及冲突消息
		--nodeps:忽略依赖关系,不建议
		--replacepkgs:重新安装
		--nodigest:不检查包的完整性信息
		--nosignature:不检查包签名信息,不检查来源的合法性
		rpm可自带脚本
			preinstall:安装过程开始之前运行脚本,%pre
			postinstall:安装过程完成之后运行脚本,%post
			preuninstall:卸载过程真正开始执行之前运行脚本,%preun
			postuninstall:卸载过程完成之后运行的脚本,%postun

升级

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...   升级或安装
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...	升级,如果没有安装,不会安装
	rpm Uvh PACKAGE_FILE ..
	rpm Fvh PACKAGE_FILE ..
	[install-options]
		和上面一样
		--oldpackage:降级为老版本
		--force:强制升级,可能影响依赖的关系,a依赖b,b升级后的版本假如a使用不了,a就可能受影响
		注意:不要对内核做升级,linux支持多内核版本存在,因此,直接安装新版内核
		注意:如果某源程序包的配置文件安装后曾被修改过,升级时新版本的程序提供的同一个配置文件不会覆盖原来的配置文件,\
		而是把新版本的配置文件重命名后(FILENAME.rpmnew)提供

卸载

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]  [--notriggers] [--test] PACKAGE_NAME ...
	rpm -e PACKAGE_NAME,卸载时是PACKAGE_NAME,安装时是PACKAGE_FILE
	--allmatches:卸载时所有匹配指定名称的程序包的各版本,一个系统可以多版本共存
	--nodeps:忽略依赖关系
	--test:测试卸载,dry run模式

查询

rpm {-q|--query} [select-options] [query-options]
select-options:PACKAGE_NAME:查询指定的程序包是否已安装,及其安装版本
		rpm -q zsh  
	-a;--all;查询所有已经安装过的包
		rpm -qa | grep "zsh" #模糊查询
	-f FILE:查询指定的文件由哪个程序包安装生成
		rpm -qf  /etc/fstab
	-p,--package PACKAGE_FILE 对未安装过的程序包执行查询操作,假如下载下来一个rpm包,可以不按照这个rpm来查看都有哪些东西
	--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供
		rpm -q --whatprovides bash  
	--whatrequires CAPABILITY(能力):查询指定的CAPABILITY被哪个包所依赖
query-options
	--changelog:查询rpm包的changelog
		rpm -q --changelog zsh
	-l,--list:程序安装生成的文件列表
	-i,--info:查询information,包括版本号,大小,所属的包组
		rpm -qi:
	-c,--configfiles:查询程序包有哪些配置文件
	-d,--docfiles:查询指定的程序包提供的文档
	--provides:列出指定程序包提供的所有的能力
	-R,--requires:查询程序包的的依赖关系,这个包依赖哪些东西才能工作
		rpm -qR bash
	--scripts:查看程序包自带的脚本片段都有哪些信息
		rpm -qp[i|c|i|d...]  PACKAGE   根据程序的安装包查询未安装时候的各种信息

校验:看那些文件属性和内容更改了,查看是人为的还是其他人所为

rpm {-V|--verify} [select-options] [verify-options]
verify-options
# rpm -V zsh  当修改这个命令列表里面的某一个文件改一下,再执行这个校验命令都会显示改的文件

包来源合法性验证和完整性验证:

获取并导入信任的包制作者的秘钥

对于centos发行版来说:rpm –import /path/RPM-GPG-KEY-CentOS-7

[root@localhost /etc/pki/rpm-gpg]#ls	#导入后保存的位置
RPM-GPG-KEY-CentOS-6        RPM-GPG-KEY-CentOS-Security-6
RPM-GPG-KEY-CentOS-Debug-6  RPM-GPG-KEY-CentOS-Testing-6

验证:

安装此组织签名的程序时,会自动执行校验

手工验证:rpm -K PACKAGE_FILE  未安装的时候,检查包的合法性

签名:用作者的私钥签署rpm包的指纹信息,确保来源的合法性,包的完整性

实验

将更新的rpm包到root目录下

# cp /run/media/root/CentOS\ 7\ x86_64/Packages/zsh-5.0.2-14.el7.x86_64.rpm /root/
导入信任的rpm公钥,
# rpm --import /run/media/root/CentOS\ 7\ x86_64/RPM-GPG-KEY-CentOS-7
# ll /etc/pki/rpm-gpg/    可以在/etc/pki/rpm-gpg/下看到导入的公钥
# rpm -ivh zsh-5.0.2-14.el7.x86_64.rpm 安装不会报警告
# rpm -K zsh-5.0.2-14.el7.x86_64.rpm  手工校验rpm包

数据库重建:所有的安装数据都存放在数据库里面,删除后系统将不知道命令是否已经安装,依赖性等等

rpm管理器数据库路径:/var/lib/rpm

获取帮助:

centos6:man rpm

centos7:man rpmdb

rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY] [--root DIRECTORY]  当数据库损坏了,或者删除了,可以自动创建数据库,删除/var/lib/rpm后可重建
--initdb:初始化数据库,当前无任何数据库初始化,创建一个新的。当前有时不执行任何操作
#rpm --initdb --dbpath /tmp/rpm  将系统的数据库重建到该目录下
--rebuilddb:重新构建,通过读取当前系统上所有已安装过的程序包进行重新创建

经过测试,重建不出来,,,

未经允许不得转载:江哥架构师笔记 » linux程序管理:rpm命令

分享到:更多 ()

评论 抢沙发

评论前必须登录!