rpm包命名格式:二进制格式 name-VERSION.tar.gz VERSION的格式: major.minor.release.os.arch arch:i386,x64(amd64),ppc(power pc),noarch(java编写的) os:e17(红帽七)
eg:主版本号为3,次版本号为0,发行号为2,编译次数为1,系统为centos7,平台为x64的rpm包 redis-3.0.2-1.centos7.x64.rpm fc 可能是 final candidate 最终版 alpha 内测版 beta 公测版 rc 发布候选版 release 正式版 拆包: 主包和支包
程序包管理器: 源代码---> 目标二进制格式----> 组织成为一个或有限几个“包”文件 实现软件的安装,升级,卸载,查询,校验
后端管理工具: debian:dpt,dpkg,".deb" redhat: rpm,".rpm" S.u.S.E:rpm ,".rpm" 源于rpm但是组织结构不同,并不能和redhat兼容 Ubantu:是debian的分支,包管理机制一样 Gentoo;parts Archlinux:linux界的新贵 因为linux的哲学思想是简单命令解决复杂任务,因此每个软件的功能较单一,所以各种包之间有着复杂的依赖关系,为了解决这种可以使用前端工具: 前端管理工具: 自动解决依赖关系 yum:rhel系列系统上的rpm包管理器的前端工具 apt-get:.deb包管理器的前端工具 zypper:suse的rpm包管理工具 dnf:Fedora系统上的rpm包管理器的前端工具,功能更强大,未来centos中也可能使用 程序包组成包管理器的功能: 将编译好的应用程序的各组成文件打包成一个或几个程序包文件。 1.程序包的组成清单(每个程序包都单独实现) 文件清单 安装或卸载时运行脚本 2.数据库(公共) 位于/var/lib/rpm 程序包的名称和版本 依赖关系 功能说明 安装生成的各文件的文件路径及校验码信息 等等 I 获得程序包的路径: 一定要保证包的安全性,不要使用随意搜索到的包,保险的做法是下面等方式 1.系统发行版的光盘或官方的文件服务器(或镜像站点) 2.项目的官方站点 3.第三方组织 EPEL(较为可靠的组织):阿里云等中的epel目录 搜素引擎:不是百度或者谷歌, http://pkgs.org http://rpm.pbone.net http://rpmfind.net 4.自己动手制作 建议:检查其合法性 来源合法性 程序包的完整性
CentOS系统上的rpm命令管理程序包: 安装,升级,卸载,查询和校验,数据库维护
rpm命令: rpm [OPTIONS] [PACKAGE_FILE] 安装: -i,--install 升级:-U,--updata,-F,freshen 卸载:-e,--erase 查询:-q,--query 校验: -V,--verify 数据库维护:--builddb,--initdb
1. 安装: 常用组合rpm -ivh PACKAGE_FILE 通用选项: -v:verbose 显示详细信息, -vv:更详细的输出 rpm {-i|--install} [install-options] PACKAGE_FILE... [install-options]: -h:hash marks 输出进度条,每个#表示2%的进度 --test:仅是测试,并不真的安装 --nodeps:忽略依赖关系,可以让你安装,但是不一定可以用。你建议使用 --replacepkgs;重新安装,如果自己不小心错误修改了某些配置文件,想要安装的初始文件,可以通过这个命令,但是要把改变过的文件删除,否则重新安装不会替换它 --nodigest:不检查程序包的完整性 --nosignature:不检查包签名信息,不检查来源合法性
注意: rpm可以自带脚本; 四类:--noscripts,不执行任何脚本 preinstall:安装过程开始之前运行的脚本,%pre postinstall:安装过程完成之后运行的脚本,%post peruninstall:卸载过程真正开始执行之前运行的脚本, postuninstall:卸载过程完成之后运行的脚本
2.升级: rpm {-U|--upgrade} [install-options] PACKAGE_FILE rpm {-F|--freshen} [install-options] PACKAGE_FILE -U:升级或安装,有则升级,无则安装 -F : 升级,如果事先没有也不会安装 --oldpackage:降级; --force:强制升级
常见用法: rpm -Uvh PACKAGE_FILE.... rpm -Fvh PACKAGE_FILE
注意: 1.不要对内核做升级操作;linux支持多内核版本共存,因此,直接安装新版本内核 2.如果某源程序的配置文件安装后被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名 (FILENAME.rpmnew)后提供
3.卸载: rpm {-e|--erase} [--allmatchs][--nodeps][--noscripts][--test]PACKAGE_NAME
--allmatchs:卸载所有匹配指定名称的程序包的各版本 --nodeps: 忽略依赖关系,即使该文件被依赖,也会卸载 --test: 仅是测试,并不真的卸载
4.查询: rpm {-q|--query}[select-options][query-options]
[select-options]: -a,-all:查询所有已经安装的包 -f FILE:查询指定的文件由那个程序安装生成 -p,--package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作 eg: rpm -qpi PACKAGE.NAME: 不安装包查看包的具体信息 rpm -qlp PACKAGE.NAME:不安装包直接查看生成的文件 rpm -qcp PACKAGE.NAME:不安装包查看包会生成的配置文件 --whatprovides CAPABILITY:查看指定的CAPABLITY由哪个程序包提供 --whatrequires CAPABLITY:查询指定的CAPABLITY被哪个包所依赖 [query-options] --changlog;查询rpm包的changlog; -l,--list:列出该安装包生成的文件列表 -i,--info:程序包相关的信息,版本号,大小,所属的包组等 -c,--configure:查询指定的程序包提供的配置文件 -d,--docfiles:查询指定的程序包提供的文档 --provides:列出指定的程序包提供的所有的CAPABLITY,提供了某个文件也是能力 -R,--requires:查询指定包的依赖关系 --scripts:查看程序包自带的脚本程序
eg: [iyunv@localhost ~]# rpm -q --provides bash bash提供的能力 config(bash) = 4.1.2-40.el6 bash = 4.1.2-40.el6 bash(x86-64) = 4.1.2-40.el6 [iyunv@localhost ~]# rpm -q --whatprovides 'config(bash)' ;'config(bash)' 这个能力是谁提供的 bash-4.1.2-40.el6.x86_64 [iyunv@localhost ~]# rpm -q --whatrequires 'config(bash)' ;'config(bash)' 这个能力被谁依赖 bash-4.1.2-40.el6.x86_64
常见用法: 已安装的包的相关命令 rpm -qi PACKAGE.NAME: 查询安装包的具体信息 rpm -ql PACKAGE.NAME:列出安装包生成的文件 rpm -qf FILE:查询某个文件是由那个安装包提供的 eg:[iyunv@localhost ~]# rpm -qf /usr/share/man/man1/wait.1.gz bash-4.1.2-40.el6.x86_64 rpm -qc PACKAGE.NAME:查看安装包生成的配置文件 rpm -qa :已经安装的所有包
不安装包直接查看: eg: rpm -qpi PACKAGE.NAME: 不安装包查看包的具体信息 rpm -qlp PACKAGE.NAME:不安装包直接查看生成的文件 rpm -qcp PACKAGE.NAME:不安装包查看包会生成的配置文件
校验: 务必保证公钥是安全的,合法的 rpm {-V|--verify} [select-options] [verify-options] eg: rpm -Va 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 eg: [iyunv@localhost ~]# rpm -V zsh S.5....T. /usr/share/zsh/4.3.11/scripts/newuser 这里对应的就是上面的信息,.表示没有变化
包来源合法性验证和完整性验证: 合法性:一个包制作者利用单向加密数据,然后利用私钥对数据的MD5加密,这样大家获得公钥后就可以验证这个包的来源了 完整性:自己利用单向加密方法计算数据的MD5,然后比对md5码比对,如果一致,说明数据内容没有被修改。 [iyunv@localhost ~]# rpm -K /media/cdrom/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm /media/cdrom/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
光盘中包的校验码就在光盘中,导入即可,这样以后可以自动校验了 [iyunv@localhost ~]# rpm --import /media/cdrom/RPM-GPG-KEY-CentOS-6 查看导入的秘钥文件 [iyunv@localhost ~]# rpm -qa gpg-pubkey* gpg-pubkey-c105b9de-4e0fd3a3 删除导入的文件: [iyunv@localhost ~]# rpm -e gpg-pubkey-c105b9de-4e0fd3a3
手动认证,比如提前有公钥 数据库的重建: rpm {--initdb|--rebuilddb}[--depath DIRECTORY][--root DIRECTORY] --initdb:初始化数据库,当前无任何数据库可实验化创建一个新的;当前有时不执行任何操作,不要轻易操作 --rebuilddb:重新构建,读取当前系统上所有已经安装过的程序包进行重新创建 --depath:指定数据库的路径 --root:指定根的路径 命令查看的帮助 centos6: man rpm centos7: man rpmdb
|