微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux软件包管理-rpm

1.程序包管理

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

 

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

 文件清单

 安装或卸载是运行的脚本

2 数据库部分(公共)

程序包名称和版本

依赖关系

功能说明

安装生成文件位置路径及校验码信息

程序包我们在哪获取了?

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

最常用的例如像

http://mirrors.aliyun.com

http://mirrors.souhu.com

http://mirrors.163.com

2)程序官方站点下载

3)第三方组织的rpm包

(a)EPEL:红帽站点论坛组织,提供高效的yum原 

(b)搜索引擎搜索

pkgs.org

rpmfind.net

rpm.pbone.net

4)自己做

ps:下载时注意其合法性,来源合法



rpm :readhat package manager ;rpm is package manager 

2.rpm包命名格式

tree-1.5.3-3.el6.x86_64.rpm

name-version-release.arch.rpm

versiom:是指源代码版本

release.arch:rpm包的发行号

archetecture:架构号:i386,x64(amd64)..

  e16适用平台 6



3.rpm 特性

1,rpm分包机制

    将一个包的功能拆成n个不同功能支包

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

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

  function:功能 例如:devel开发功能

        untils工具程序

        libs库文件

2,依赖关系

   依赖关系:因为linux程序做到短小精湛,程序彼此之间依赖其他程序提供的功能,然后才能运行,所以导致包和包之间有着复杂的依赖关系

3,解决依赖

前端工具的出现自动解决包之间的依赖关系;

yum :rpm包管理器的前端工具

apt-get(apt-cache)deb包管理器的前端工具 用于debian 

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

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



4.rpm命令管理程序包:

安装升级、卸载、查询、效验、数据库维护、帮助

使用方法

rpm [OPTION] [PACKAGE_FILE]

   

安装 

rpm     {-i|--install}    [install-options] PACKAGE_FILE ...


 [GENERAL OPTIONS]:通用选项
    -v 详细信息输出
    -vv 更详细信息输出


[install-options]:安装选项
-h 显示以hash标记输出进度条
 yum -ivh
--test测试安装(不实际安装,仅测试,检查依赖及冲突关系);
--nodeps 忽略依赖关系安装;
--replacepkgs 重新安装;
ps:rpm可以自带脚本 --noscripts
四类:
 prelnstall:安装过程之前运行的脚本%pre --nopre
 postinstall:安装过程完成之后运行的脚本,%pot --post
 preuninstall:卸载过程真正开始执行之前运行的脚本 %preun 
 --nopreun
 postuninstall:卸载过程完成之后运行脚本 %postun  --nopostun
--nosignature:不检查包签名信息,不检查来源合法性;
--nodigest:不检查包完整性信息


例如:安装tree包

[root@localhost Packages]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm 
warning: tree-1.6.0-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
	package tree-1.6.0-10.el7.x86_64 is already installed

  升级 

 rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
 rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-U 升级或安装
-F升级
rpm -Uvh 
rpm -Fvh
--oldpackage:降级;
--force:强制升级;升级会影响依赖关系可能
#ps:1)不要对内核做升级操作;linux支持多内核,直接安装新版本内核即可;
#    2)如果原程序包配置文件安装后被修改过,升级是,新版本程序提供的同一个配置文件不会
覆盖原有版本的配置文件,会将新文件重命名后保留;


例如:验证 如果原程序包配置文件安装后被修改过,升级是,新版本程序提供的同一个配置文件不会覆盖原有版本的配置文件,会将新文件重命名后保留;

[root@localhost Packages]# rpm -ivh vsftpd-3.0.2-10.el7.x86_64.rpm 
warning: vsftpd-3.0.2-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:vsftpd-3.0.2-10.el7              ################################# [100%]
[root@localhost Packages]# 
#安装vsftp

[root@localhost vsftpd]# cat vsftpd.conf|wc -l
127
[root@localhost vsftpd]# vim vsftpd.conf
[root@localhost vsftpd]# cat vsftpd.conf|wc -l
27
#修改配置文件删除文件中100行内容)

[root@localhost Packages]# rpm -Uvh vsftpd-3.0.2-10.el7.x86_64.rpm --force
warning: vsftpd-3.0.2-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:vsftpd-3.0.2-10.el7              ################################# [100%]
#升级安装vsftpd   
[root@localhost vsftpd]# cat vsftpd.conf|wc -l
27
#配置文件行数与之前安装修改行数一样

卸载

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
           [--notriggers] [--test] PACKAGE_NAME ...
--allmatches:删除所有所匹配指定名称的程序包版本
--nodeps:忽略依赖关系
--test 测试卸载,不真正执行卸载


例如:卸载vsftpd

[root@localhost Packages]# rpm -e --nodeps vsftpd 
warning: /etc/vsftpd/vsftpd.conf saved as /etc/vsftpd/vsftpd.conf.rpmsave
#卸载vsftpd包
[root@localhost ~]# ll /etc/vsftpd/
total 4
-rw-------. 1 root root 1127 Aug 23 21:10 vsftpd.conf.rpmsave
[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf.rpmsave |ec -l
bash: ec: command not found...
[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf.rpmsave |wc -l
27
#卸载后将配置文件备份成了一个文件


查询 

rpm {-q|--query} [select-options] [query-options]
1)select-options:
PACKAGE_NAME 直接给出包名查看是否已经安装
-a,--all 查询所有已安装的包 rpm -qa
[root@localhost ~]# rpm -qa |grep http
-f,--file 查询文件生成安装包
[root@localhost ~]# rpm -qf /etc/fstab 
setup-2.8.71-6.el7.noarch
-p --pachage 查寻未安装的包
--whatprovides CAPABILITY:查询指定的CAPABILITY安装包
 --whatrequires CAPABILITY:查询指定的CAPABILITY安装包有哪些依赖包
2)query-options:
--changelog 查看rpm改进日志
-l, --list 安装生成文件
rpm -ql 查看安装这个程序包后生成了哪些文件
-i --info 查询程序包相关的信息(版本,大小,所属的包组)
rpm -qi 程序名
 -c, --configfiles 查询指定程序包提供的配置文件
 -d, --docfiles 查询指定程序包提供的文档
 --provides 列出程序提供的CAPABTLITY
 --scripts 查看指定程序安装后的脚本



查询举例: 

#查询某个包是否已经安装的多个方法
[root@localhost vsftpd]# rpm -q vsftpd
package vsftpd is not installed
[root@localhost vsftpd]# rpm -qa vsftpd
[root@localhost vsftpd]# rpm -qa |grep vsftpd
[root@localhost vsftpd]# rpm -q vsftpd
vsftpd-3.0.2-10.el7.x86_64
[root@localhost vsftpd]# rpm -qa |grep vsftpd
vsftpd-3.0.2-10.el7.x86_64

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#查询某个文件是由哪个安装包生成的
[root@localhost vsftpd]# rpm -qf /etc/vsftpd/
vsftpd-3.0.2-10.el7.x86_64

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#查看某个包安装过后生成文件
[root@localhost vsftpd]# rpm -ql vsftpd 
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/lib/systemd/system-generators/vsftpd-generator
/usr/lib/systemd/system/vsftpd.service
/usr/lib/systemd/system/vsftpd.target
/usr/lib/systemd/system/vsftpd@.service
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-3.0.2
/usr/share/doc/vsftpd-3.0.2/AUDIT
/usr/share/doc/vsftpd-3.0.2/BENCHMARKS
/usr/share/doc/vsftpd-3.0.2/BUGS
/usr/share/doc/vsftpd-3.0.2/copYING
/usr/share/doc/vsftpd-3.0.2/Changelog
/usr/share/doc/vsftpd-3.0.2/EXAMPLE
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.xinetd
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONfig
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONfig/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONfig/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONfig/hosts.allow
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/logins.txt
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2/README
/usr/share/doc/vsftpd-3.0.2/FAQ
/usr/share/doc/vsftpd-3.0.2/INSTALL
/usr/share/doc/vsftpd-3.0.2/LICENSE
/usr/share/doc/vsftpd-3.0.2/README
/usr/share/doc/vsftpd-3.0.2/README.security
/usr/share/doc/vsftpd-3.0.2/REWARD
/usr/share/doc/vsftpd-3.0.2/Security
/usr/share/doc/vsftpd-3.0.2/Security/DESIGN
/usr/share/doc/vsftpd-3.0.2/Security/IMPLEMENTATION
/usr/share/doc/vsftpd-3.0.2/Security/OVERVIEW
/usr/share/doc/vsftpd-3.0.2/Security/TRUST
/usr/share/doc/vsftpd-3.0.2/SIZE
/usr/share/doc/vsftpd-3.0.2/SPEED
/usr/share/doc/vsftpd-3.0.2/Todo
/usr/share/doc/vsftpd-3.0.2/TUNING
/usr/share/doc/vsftpd-3.0.2/vsftpd.xinetd
/usr/share/man/man5/vsftpd.conf.5.gz
/usr/share/man/man8/vsftpd.8.gz
/var/ftp
/var/ftp/pub

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#查询指定程序包包含的配置文件
[root@localhost Packages]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#查询指定程序包提供的文档
[root@localhost Packages]# rpm -qd vsftpd
/usr/share/doc/vsftpd-3.0.2/AUDIT
/usr/share/doc/vsftpd-3.0.2/BENCHMARKS
/usr/share/doc/vsftpd-3.0.2/BUGS
/usr/share/doc/vsftpd-3.0.2/copYING
/usr/share/doc/vsftpd-3.0.2/Changelog
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.xinetd
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONfig/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONfig/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONfig/hosts.allow
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/logins.txt
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2/README
/usr/share/doc/vsftpd-3.0.2/FAQ
/usr/share/doc/vsftpd-3.0.2/INSTALL
/usr/share/doc/vsftpd-3.0.2/LICENSE
/usr/share/doc/vsftpd-3.0.2/README
/usr/share/doc/vsftpd-3.0.2/README.security
/usr/share/doc/vsftpd-3.0.2/REWARD
/usr/share/doc/vsftpd-3.0.2/Security/DESIGN
/usr/share/doc/vsftpd-3.0.2/Security/IMPLEMENTATION
/usr/share/doc/vsftpd-3.0.2/Security/OVERVIEW
/usr/share/doc/vsftpd-3.0.2/Security/TRUST
/usr/share/doc/vsftpd-3.0.2/SIZE
/usr/share/doc/vsftpd-3.0.2/SPEED
/usr/share/doc/vsftpd-3.0.2/Todo
/usr/share/doc/vsftpd-3.0.2/TUNING
/usr/share/doc/vsftpd-3.0.2/vsftpd.xinetd
/usr/share/man/man5/vsftpd.conf.5.gz
/usr/share/man/man8/vsftpd.8.gz


效验                                                                

rpm {-V|--verify} [select-options] [verify-options]
  --nodeps
              Don't verify dependencies of packages.
       --nodigest
              Don't verify package or header digests when read
              ing.
       --nofiles
              Don't verify any attributes of package files.
       --noscripts
              Don't  execute  the  %verifyscript  scriptlet (if
              any).
   
       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
不添加任何参数认就是检查所有参数
rpm -V --nodeps

程序包的合法性验证:

    来源合法:由制作者提供,依赖于制作者的数字签名,签名是作者使用自己的私钥加密程序包的特性码进行的;

    内容合法:包未被二次修改,依赖于:制作者提供的程序特征码;

     验正方式:安装者用同样的特征码提取算法提取程序包的特征码,并与原作者提供的相比较;

举例:

rpm --import /misc/cd/RPM-GPG-KEY-CentOS-6 
rpm -K vsftpd-3.0.2-10.el7.x86_64.rpm 
vsftpd-3.0.2-10.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

  

数据库维护

rpm管理器数据库:/var/lib/rpm
rpmdb {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]
  --initdb: 初始化数据库数据库不存在,才会新建;
 --rebuilddb: 无论当前数据库是否存在,都会直接重建此库;

举例:

#删除库
[root@localhost rpm]# ls
Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5
Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername
[root@localhost rpm]# rm -fr *
[root@localhost rpm]# ls
#使用查询重新生成库
[root@localhost rpm]# rpm -qa vsftpd
[root@localhost rpm]# ls
Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5
Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername
[root@localhost rpm]#
#使用命令rpmdb --initdb生成库
[root@localhost rpm]# rm -fr *
[root@localhost rpm]# ll
total 0
[root@localhost rpm]# rpmdb --initdb
[root@localhost rpm]# ll
total 388
-rw-r--r--. 1 root root   8192 Aug 23 22:19 Basenames
-rw-r--r--. 1 root root   8192 Aug 23 22:19 Conflictname
-rw-r--r--. 1 root root 270336 Aug 23 22:19 __db.001
-rw-r--r--. 1 root root  81920 Aug 23 22:19 __db.002
-rw-r--r--. 1 root root 107048 Aug 23 22:19 __db.003
-rw-r--r--. 1 root root   8192 Aug 23 22:19 Dirnames
-rw-r--r--. 1 root root   8192 Aug 23 22:19 Group
-rw-r--r--. 1 root root   8192 Aug 23 22:19 Installtid
-rw-r--r--. 1 root root   8192 Aug 23 22:19 Name
-rw-r--r--. 1 root root   8192 Aug 23 22:19 Obsoletename
-rw-r--r--. 1 root root  12288 Aug 23 22:19 Packages
-rw-r--r--. 1 root root   8192 Aug 23 22:19 Providename
-rw-r--r--. 1 root root   8192 Aug 23 22:19 Requirename
-rw-r--r--. 1 root root   8192 Aug 23 22:19 Sha1header
-rw-r--r--. 1 root root   8192 Aug 23 22:19 Sigmd5
-rw-r--r--. 1 root root   8192 Aug 23 22:19 Triggername

  

帮助

  1. man rpm

  



linux软件包管理-rpm


2. man rpmdb

linux软件包管理-rpm

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐