设为首页 收藏本站
查看: 771|回复: 0

[经验分享] centos之rpm详解

[复制链接]

尚未签到

发表于 2018-4-27 13:17:37 | 显示全部楼层 |阅读模式
  写在前面-本节命令总览:rpm –i[vh] [ -–test –-nodeps  --replacepkgs –nosignature –nodigest ]
  rpm –[UF] [vh] [--oldpackages  --force] rpm –e[vh] [--allmatches –nodeps --test]
  rpm –q[-p –a -f] [--rpovides --whatprovides  --whatrequires ] [--changelog –l –i –c –d –R--scripts]
  rpm –V     rpm–initdb  --rebuilddb
  
centos之rpm

  RPM包管理的优点:
可以安装、除、升和管理
可以把自己做的程序包打包成rpm包
能利用名GPG和MD5检测软件包的来源安全性和内容完整性。
性的检查,解决由于不了解依性而件安装完不能运行的棘手问题。
  
  RPM的使用权限
RPM件的安装、除、更新只有root权限才能使用;查询功能任何用都可以操作;如果普通用户拥有安装目的权限,也可以行安装;
  
  rpm包命名格式:
软件包的全名:name-version-release.arch.rpm
name件名字
version:件的行版本号,包括主版本号major,次版本号minor,行号release
release.arch或者release.os.arch 是指rpm包的行号。
release指rpm包的版本,os指使用操作系,arch指使用CPU类型;注意os可以省略不写。
  
以下面两个例子解:
zabbix-2.4.6-2.el7.x86_64.rpm
redis-3.0.2-2.centos7.x86_x64.rpm
name:zabbix或redis
version:2.4.6或3.0.2
release:2
os:el7或centos7
arch:x86_x64
包格式:.rpm
  
  拆包:把rpm包拆分成功能比较单一的支包,下面是支包的命名格式,只是在name后面加了个function
支包命名格式:name-function-VERSION-release.arch.rpm
例:zabbix-get-2.4.6-2.el7.x86_64.rpm
  
  
  取程序包的途径
  (1) 统发行版的光或官方的文件服器(或像站点),如下国内几家比可靠的站点:
http://mirrors.aliyun.com,
http://mirrors.sohu.com,
http://mirrors.163.com
  (2) 目的官方站点
  (3) 第三方组织
(a) EPEL
(b) 用搜索引擎搜索
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
  (4) 动动手做rpm包,丰衣足食
  
  :安装前请务必注意以下几点,否早晚你会一次坑
1检查其合法性;
2、来源合法性;
3、程序包的完整性;
  
  rpm包的依关系
程序性能更好,工程把程序包做得短小精悍,功能专业且但一。但是由于构比较简单,需要依其他程序包提供的境才能运行起来,就形成了依关系。
  
  1安装:-i
  rpm用法模板:rpm {-i|--install}[install-options] PACKAGE_FILE ...
  
  GENERALOPTIONS:常用选项
  -v:verbose,安装提供详细安装程的信息
  -vv:安装提供更详细出信息
  
  rpm  -ivh  PACKAGE_FILE ...
[root@yph7 ~]# rpm -ivh./zsh-5.0.2-7.el7_1.2.x86_64.rpm
警告:./zsh-5.0.2-7.el7_1.2.x86_64.rpm: 头V3RSA/SHA256 Signature, 密钥ID f4a80eb5: NOKEY
准备中...                         ################################# [100%]
正在升级/安装...
  1:zsh-5.0.2-7.el7_1.2             ################################# [100%]

  install-options:安装选项
  -h:hash marks安装时输度条;每个#表示2%的度;如上面例子所示。
  --test测试安装,检查告依关系及冲突消息等,其并没有真正安装,可以理解安装;
[root@yph7 ~]#rpm -ivh --test zabbix-2.4.6-1.el7.x86_64.rpm
警告:zabbix-2.4.6-1.el7.x86_64.rpm: 头V4DSA/SHA1 Signature, 密钥ID 79ea5ed4: NOKEY
准备中...                         ################################# [100%]
[root@yph7 ~]# rpm -qi zabbix ----------虽然已经提示安装成功,但只是测试,并没有安装
未安装软件包 zabbix   
[root@yph7 ~]# rpm -ivh --testbooth-0.2.0-31.1.x86_64.rpm
警告:booth-0.2.0-31.1.x86_64.rpm: 头V3RSA/SHA1 Signature, 密钥ID 17280ddf: NOKEY
错误:依赖检测失败:
      cluster-glue-libs>= 1.0.6 被 booth-0.2.0-31.1.x86_64 需要------有很多依赖关系
      libplumb.so.2()(64bit)被 booth-0.2.0-31.1.x86_64 需要
      libplumbgpl.so.2()(64bit)被 booth-0.2.0-31.1.x86_64 需要
      pacemaker>= 1.1.8 被 booth-0.2.0-31.1.x86_64 需要

  --nodeps:安装忽略依关系;不过这样类似强制安装,即便安装成功也未必能使用,所以不建议这么做;
             [root@yph7 ~]# rpm -ivh --nodepsbooth-0.2.0-31.1.x86_64.rpm
  --replacepkgs:重新安装 -----------可以用来重新安装被除的程序包的配置文件
[root@yph7 ~]# rm -f /bin/zsh
[root@yph7 ~]# ll /bin/zsh
ls: 无法访问/bin/zsh: 没有那个文件或目录  ---------------/bin/zsh已被删除
[root@yph7 ~]# rpm -ivh --replacepkgszsh-5.0.2-7.el7_1.2.x86_64.rpm
警告:zsh-5.0.2-7.el7_1.2.x86_64.rpm: 头V3RSA/SHA256 Signature, 密钥ID f4a80eb5: NOKEY
准备中...                         ################################# [100%]
正在升级/安装...
  1:zsh-5.0.2-7.el7_1.2             ################################# [100%]
[root@yph7 ~]# ll /bin/zsh       --------------------/bin/zsh又重新安装了回来
-rwxr-xr-x. 1 root root 711768 11月  3 21:49 /bin/zsh

  --nosignature:不检查名信息,不检查来源合法性;
上个例子安装zsh提示“警告:zsh-5.0.2-7.el7_1.2.x86_64.rpm:V3 RSA/SHA256 Signature, ID f4a80eb5: NOKEY”,指没有验证rpm包的合法性,下面取消验证直接安装
[root@yph7 ~]# rpm -iv --nosignaturezsh-5.0.2-7.el7_1.2.x86_64.rpm
软件包准备中...           -------------这次安装没有再提示警告信息。
zsh-5.0.2-7.el7_1.2.x86_64

  --nodigest:不检查包完整性信息,直接安装,但很可能安装失,或不能使用。除非自己已包的完整性。
[root@yph7~]# rpm -ivh --nodigest zsh-5.0.2-7.el7_1.2.x86_64.rpm

  2-U  -F
  rpm{-U|--upgrade} [install-options] PACKAGE_FILE ...
  rpm{-F|--freshen} [install-options] PACKAGE_FILE ...
  
  -U:升或安装;可以用来升rpm包,也可以用来安装rpm包。
rpm  -UvhPACKAGE_FILE ...
[root@yph7 ~]# rpm –e zsh       ---------- 先卸载zsh,下面在安装
[root@yph7 ~]# rpm -Uvzsh-5.0.2-7.el7_1.1.x86_64.rpm    用“rpm -Uv”来安装rpm包
警告:zsh-5.0.2-7.el7_1.1.x86_64.rpm: 头V3RSA/SHA256 Signature, 密钥ID f4a80eb5: NOKEY
软件包准备中...
zsh-5.0.2-7.el7_1.1.x86_64
[root@yph7 ~]# rpm -Uvzsh-5.0.2-7.el7_1.2.x86_64.rpm  ---------用“rpm -Uv”来升级zsh
警告:zsh-5.0.2-7.el7_1.2.x86_64.rpm: 头V3RSA/SHA256 Signature, 密钥ID f4a80eb5: NOKEY
软件包准备中...
zsh-5.0.2-7.el7_1.2.x86_64   ---------把“…1.1.x86_64”升级到“1.2.x86_64”版本
zsh-5.0.2-7.el7_1.1.x86_64

  -F:升,只能用来升,不能用来安装,如果程序没有安装,是不能拿“rpm -F”来升的,升方法与“rpm -U”相同
rpm  -Fvh PACKAGE_FILE ...
[root@yph7 ~]# rpm -Fv zsh-5.0.2-7.el7_1.2.x86_64.rpm
警告:zsh-5.0.2-7.el7_1.2.x86_64.rpm: 头V3RSA/SHA256 Signature, 密钥ID f4a80eb5: NOKEY
软件包准备中...
zsh-5.0.2-7.el7_1.2.x86_64  ---------从1.1版本升级到1.2版本
zsh-5.0.2-7.el7_1.1.x86_64

  --oldpackage:降;如果升发现新版本令自己十分不意,可以用来回旧版本。
[root@yph7 ~]# rpm -Uvh --oldpackage zsh-5.0.2-7.el7_1.1.x86_64.rpm-----把1.2版本降级到1.1
警告:zsh-5.0.2-7.el7_1.1.x86_64.rpm: 头V3RSA/SHA256 Signature, 密钥ID f4a80eb5: NOKEY
准备中...                         ################################# [100%]
正在升级/安装...
  1:zsh-5.0.2-7.el7_1.1             ################################# [ 50%]
正在清理/删除...
  2:zsh-5.0.2-7.el7_1.2             ################################# [100%]

  --force:强制升,如果升后依关系不能足,就不能正常升,可以强制升
             [root@yph7 ~]# rpm -Uvh --forcezsh-5.0.2-7.el7_1.2.x86_64.rpm  强制从1.1版本升到1.2版本
  注意:(1) 不要内核做升操作;Linux支持多内核版本并存,因此,直接安装新版本内核;
  (2) 如果某原程序包的配置文件安装后曾被修改,升级时,会认为你修改的信息是很重要的,所以新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
  
  3)卸载 –e
  rpm {-e|--erase}[--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
[root@yph7 ~]# rpm -evh zsh
准备中...                         ################################# [100%]
正在清理/删除...
  1:zsh-5.0.2-7.el7_1.2             ################################# [100%]

  --allmatches:卸所有匹配指定名称的程序包的所有版本,因有的程序包可能多个版本并存,这样可以同
[root@yph7~]# rpm -evh --allmatches zsh  
  --nodeps:卸载时忽略依关系,不管三七二十三,也不后果是否重,就是卸
             [root@yph7 ~]# rpm -evh --nodeps zsh
  --test测试,dry run模式,只是模拟测试,并没有正真卸
[root@yph7 ~]# rpm -e --test zsh
[root@yph7 ~]# rpm -ql zsh-------------并没有真正卸载
/bin/zsh
/etc/skel/.zshrc
/etc/zlogin


  (4)查询:-q
  rpm {-q|--query}[select-options] [query-options]
  
  select-options选择选项
  rpm  -q PACKAGE_NAME查询指定的程序包是否已安装,及其版本;
        [root@yph7 ~]# rpm -q zsh
zsh-5.0.2-7.el7_1.2.x86_64
  -a,--all查询所有已安装的包;
        [root@yph7 ~]# rpm –qa ----------能列出电脑上所有安装的包,太多了我就不列出了
[root@yph7 ~]# rpm -qa | grep "^z"  ----列出已经安装的并且以z开头的程序包
zip-3.0-10.el7.x86_64
zenity-3.8.0-4.el7.x86_64
zlib-1.2.7-13.el7.x86_64

  -f FILE查询指定的文件由哪个程序包安装生成;
[root@yph7 ~]# rpm -q -f /usr/share/zsh/5.0.2/scripts
zsh-5.0.2-7.el7_1.2.x86_64
  -p,--package PACKAGE_FILE:用于实现对未安装的程序包查询操作;具体查询什么后面会详细演示。
[root@yph7 ~]# rpm -q -p zabbix-2.4.6-1.el7.x86_64.rpm
警告:zabbix-2.4.6-1.el7.x86_64.rpm: 头V4DSA/SHA1 Signature, 密钥ID 79ea5ed4: NOKEY
zabbix-2.4.6-1.el7.x86_64

  
  query-options查询选项
  --changelog查询rpm包的changlog;
[root@yph7 ~]# rpm -q --changelog zsh
* 一 10月 262015 Kamil Dudka <kdudka@redhat.com> - 5.0.2-7.el7_1.2
- fix SIGSEGV of the syntax check in ksh emulationmode (#1222867)
………………………………………………………..还有很多,不一一列举

  -l,--list:程序安装生成的所有文件列表;
[root@yph7 ~]# rpm -ql bash | wc -l
109            -----------------------------可以看到bash程序包一共生成109个文件
  -i,--info:程序包相关的信息,版本号、大小、所属的包,等;
[root@yph7 ~]# rpm -q -i zsh
Name        :zsh
Version     :5.0.2
Release     :7.el7_1.2
Architecture: x86_64
………………………………..

  -c,--configfiles查询指定的程序包提供的配置文件;
[root@yph7 ~]# rpm -q -c zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout -----------------------还有很多,不一一列举

  -d,--docfiles查询指定的程序包提供的文档;
[root@yph7 ~]# rpm -q -d zsh
/usr/share/doc/zsh-5.0.2/BUGS
/usr/share/doc/zsh-5.0.2/CONTRIBUTORS-----------------------还有很多,不一一列举

  --provides:列出指定的程序包提供的所有的CAPABILITY;
[root@yph7 ~]# rpm -q --provides zsh
config(zsh) = 5.0.2-7.el7_1.2
zsh = 5.0.2-7.el7_1.2
zsh(x86-64) = 5.0.2-7.el7_1.2

  --whatprovidesCAPABILITY查询指定的CAPABILITY由哪个程序包提供;
[root@yph7 ~]#rpm -q --whatprovides 'config(zsh)'
zsh-5.0.2-7.el7_1.2.x86_64
[root@yph7 ~]#rpm -q --whatprovides config\(zsh\)
zsh-5.0.2-7.el7_1.2.x86_64  

  --whatrequiresCAPABILITY查询指定的CAPABILITY被哪个包所依
[root@yph7 ~]# rpm -q --whatrequires bash | wc -l
9                 -------------一共有9个依bash功能
  -R,--requires查询指定的程序包的依关系;
[root@yph7~]# rpm -q -R zsh
  --scripts看程序包自的脚本片断;
[root@yph7~]# rpm -q --scripts zsh
  查询未安装包的信息
  -qpi PACKAGE_FILE,查询未安装的程序包的版本,大小,包等信息
[root@yph7 ~]# rpm -qpi zabbix-2.4.6-1.el7.x86_64.rpm
Name        :zabbix
Version     :2.4.6
Release     :1.el7
Architecture: x86_64
Install Date: (not installed)

   -qpl PACKAGE_FILE, 查询未安装包能够生成的文件列表
[root@yph7 ~]# rpm -qpl zabbix-2.4.6-1.el7.x86_64.rpm
警告:zabbix-2.4.6-1.el7.x86_64.rpm: 头V4DSA/SHA1 Signature, 密钥ID 79ea5ed4: NOKEY
/etc/zabbix
/usr/lib/tmpfiles.d/zabbix.conf

  -qpcPACKAGE_FILE, ... 查询未安装包能够生成的配置文件
  [root@yph7 ~]#rpm -qpc booth-0.2.0-31.1.x86_64.rpm
  警告:booth-0.2.0-31.1.x86_64.rpm:V3 RSA/SHA1 Signature, ID 17280ddf: NOKEY
  /etc/booth/booth.conf.example
  
  
  5)校验:-V
  rpm {-V|--verify}[select-options] [verify-options]
  
[root@yph7 ~]#rpm -V zsh
[root@yph7~]#          -------------------没有消息,说明没有不安全的信息
[root@yph7 ~]#file /usr/share/zsh/5.0.2/functions/zfget---- 查看一下zsh的一个文件,发现是text类型
/usr/share/zsh/5.0.2/functions/zfget:ASCII text
[root@yph7 ~]#vim /usr/share/zsh/5.0.2/functions/zfget ------就拿vim 修改一下里面内容
[root@yph7 ~]#rpm -V zsh
S.5....T.    /usr/share/zsh/5.0.2/functions/zfget  --------再次检测就检测出问题了  

  S明大小改   5:md5特征码变化  T: Tmtime改
  具体检测结果表示的信息:
  S: file Size differs文件大小
  M: Mode differs (includes permissions and file type)权限或文件类型
  5 :digest (formerly MD5 sum) differs。  md5码发
  D: Device major/minor number mismatch 设备主次设备号不匹配
  L: readLink(2) path mismatch
  U: User ownership differs  属主
  G: Group ownership differs  属组变
  T: mTime differs   最近一次修改时间mtime
  P: caPabilities differ   能力
  
  --nofiles 。Don't verify any attributes of package files.不检查文件的参数
   [root@yph7 ~]# rpm -V --nofiles zsh  
  [root@yph7 ~]#    -------才我修改的那个文件就没有示出来
  --nodigest   Don't verify package or header digests whenreading.检测完整性
  --nodeps   Don't verify dependencies of packages.检测关系
  --nosignature  检测签名信息,即来源合法性
  
  包来源合法性正和完整性
  来源合法性正:
  者用向加密提取程序包的特征,然后用称加密方式来加密程序包特征。开者私加密特征,用可以拿与之配的公,配成功个特征是原版的,个文件也就是原版的。
  完整性正:
  验证来源合法性成功后,再来验证内容完整性。用拿与开者相同的向加密算法提取程序包的特征,然后比自己算出的特征与用公解密出的特征是否相同,如果相同明程序包内容是完整的。如果程序包内容被改,特征必定会改这样一来,就能个包是被人修改的。
  
  
  取并入信任的包制作者的
  的位置:以centos7例,一般装完系后,在下面目下有密
  [root@yph7 ~]# ls/etc/pki/rpm-gpg/
  RPM-GPG-KEY-CentOS-7
  
  于CentOS行版来入公的方法如下:
  [root@yph7 ~]#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  入公后再安装程序就不会再警告了
[root@yph7 ~]#rpm -ivh zsh-5.0.2-7.el7_1.1.x86_64.rpm
准备中...                          #################################[100%]
正在升级/安装...
   1:zsh-5.0.2-7.el7_1.1              #################################[100%]  

  入公后手动验正rpm包的合法性和完整性:
  [root@yph7 ~]#rpm -K zsh-5.0.2-7.el7_1.2.x86_64.rpm
  zsh-5.0.2-7.el7_1.2.x86_64.rpm:rsa sha1 (md5) pgp md5 确定
  pgp来源合法性没问题;md5确定完整性也没问题
  
  6数据重建
  rpm管理器数据路径:/var/lib/rpm/几乎所有的查询操作,都是通的数据库进行。
  例如卸某程序个数据记录着要卸的文件在哪个路径下。
  
  若要取相关帮助,用下列方法:
  CentOS 6:man rpm
  CentOS 7:man rpmdb
  
  rpm{--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
  --initdb:初始化数据,当前无任何数据始化建一个新的;当前有行任何操作;
[root@yph7 rpm]# cd /var/lib/rpm
[root@yph7 rpm]# rpm –initdb
[root@yph7 rpm]# ls
Basenames    __db.001  __db.003  Group      Name          Packages     Requirename  Sigmd5
Conflictname __db.002  Dirnames  Installtid Obsoletename  Providename  Sha1header  Triggername

  --rebuilddb:重新构建,通过读取当前系上所有已安装的程序包行重新建;
[root@yph7 rpm]# rpm --rebuilddb
[root@yph7 rpm]# ls  ----------------发现少了一些文件
Basenames    Dirnames  Installtid  Obsoletename Providename  Sha1header  Triggername
Conflictname Group     Name        Packages      Requirename  Sigmd5

[root@yph7 rpm]# rpm --initdb
[root@yph7 rpm]# ls           -----------------少的文件又回来了
Basenames    __db.001  __db.003  Group      Name          Packages     Requirename  Sigmd5
Conflictname __db.002  Dirnames  Installtid Obsoletename  Providename  Sha1header  Triggername



rpm可以自脚本
preinstall:安装程开始之前运行的脚本,%pre , 不行此脚本用--nopre
postinstall:安装程完成之后运行的脚本,%post , 不行此脚本用--nopost
preuninstall:卸载过程真正开始行之前运行的脚本,%preun, 不行此脚本用--nopreun
postuninstall:卸载过程完成之后运行的脚本,%postun , 不行此脚本用--nopostun
四类脚本都不行:用--noscripts



  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-452763-1-1.html 上篇帖子: 关于centos7 下篇帖子: CentOS 5.11开启VNC访问
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表