一、rpm包管理器
1、介绍rpm
在linux系统中,服务是要通过程序来提供的,通过调用API接口编写好之后的源码包文件对于普通用户来说,安装起来较为繁琐。于是人们将源码在编译安装的环境下制作了更加高级的rpm包,它的最大特点是避免了对原软件包的编译安装,以更加简便的安装方式提供给用户。可以使用rpm(RedhatPackage Manager)管理器来进行安装.
rpm包格式
2、rpm包管理器
<1>安装
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm -i FILE..
-i:表示安装 -v:输出详细过程 -h:以进度条的方式显示安装过程
常用选项
--test:测试安装,不进行实际安装 --nodeps:忽略依赖关系安装 --replacepkgs:重新安装 --force:强制安装
<2>升级
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
rpm -U FILE..
-U:安装或者升级 -F:仅升级 -v:输出详细过程 -h:以进度条的方式显示安装过程
常用选项
--oldpackage:降级成旧版本 --force:强制升级到新版本
<3>卸载
rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...
rpm -e FILE..
常用选项
-allmatches:卸载所有匹配指定程序包名称的程序包的各版本 --nodeps:忽略依赖关系卸载程序包 --test:测试卸载程序包
<4>查询
rpm {-q|--query} [select-options] [query-options] [FILE..]
-q file.rpm:查询指定的rpm包是否安装
[select-options]
-p:查询未安装的包的信息 -a,--all:查询已安装的所有程序包 -f FILE:查询指定的文件由哪个程序包安装生成 --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供 --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
[query-options]
-c: 查询程序的配置文件 -d: 查询程序的文档 -i: 查询程序的详细信息 -l: 查看指定的程序包安装后生成的所有文件; --scripts:程序包自带的脚本片断 -R: 查询指定的程序包所依赖的CAPABILITY; --provides: 列出指定程序包所提供的CAPABILITY;
*这里注释一下cpio的特殊用法
示例:如果删除了一个rpm包的程序文件,而又不想重新安装时还原原有的配置文件,可以选择只安装rpm包中的程序文件。
步骤1、查看rpm安装包的文件列表
[[email protected] Packages]# rpm2cpio tree-1.5.3-3.el6.x86_64.rpm | cpio -t ./usr/bin/tree ./usr/share/doc/tree-1.5.3 ./usr/share/doc/tree-1.5.3/LICENSE ./usr/share/doc/tree-1.5.3/README ./usr/share/man/man1/tree.1.gz 132 blocks
步骤2、解压包内文件
[[email protected] ~]# rpm2cpio tree-1.5.3-3.el6.x86_64.rpm | cpio -id 132 blocks
步骤3、移动程序文件
[[email protected] ~]# cp usr/bin/tree /usr/bin
<5>包校验
rpm {-V|--verify} [select-options] FILE..
注:[select-options]与上不同,不予列出
下面介绍俩个常用的检查机制
▲合法性校验:rpm --import Public_key
[[email protected] ~]#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [[email protected] ~]#rpm -ivh zsh-5.0.2-14.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-14.el7 ################################# [100%]
安装过程不提示警告
补充:导入密钥之后,如果再删除之,再安装就会提示警告信息
[[email protected] ~]#rpm -qa gpg* gpg-pubkey-f4a80eb5-53a7ff4b gpgme-1.3.2-5.el7.x86_64 [[email protected] ~]#rpm -e gpg-pubkey-f4a80eb5-53a7ff4b [[email protected] ~]#rpm -ivh zsh-5.0.2-14.el7.x86_64.rpm warning: zsh-5.0.2-14.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-14.el7 ################################# [100%]
▲完整性校验rpm -K file.rpm
[[email protected] ~]#echo ‘ ‘ > zsh-5.0.2-14.el7.x86_64.rpm [[email protected] ~]#rpm -K zsh-5.0.2-14.el7.x86_64.rpm error: zsh-5.0.2-14.el7.x86_64.rpm: not an rpm package
检查出现错误
<6>数据库维护
系统上的rpm包依靠一个数据库(var/lib/rpm/)来维护,一旦rpm数据库删除,系统上关于包的任何操作都将无法进行,因为程序包的操作都是由数据库来维护的。
rpm --initdb: 创建数据库
rpm --rebuilddb:创建数据库索引
[[email protected] /var/lib/rpm]#rm -rf * [[email protected] /var/lib/rpm]#rpm -q bash package bash is not installed [[email protected] /var/lib/rpm]#rpm --initdb [[email protected] /var/lib/rpm]#ls Basenames __db.001 __db.003 Group Name Packages Requirename Sigmd5 Conflictname __db.002 Dirnames Installtid Obsoletename Providename Sha1header Triggername [[email protected] /var/lib/rpm]#rpm -q bash package bash is not installed
上面例子证明:即使使用rpm --initdb恢复数据库,也是无济于事,因为其中并没有rpm包的数据息。友情提示:危险操作,切勿模仿
3、yum机制及其使用
二、yum包管理器
1、介绍yum
前面提到rpm的安装,但是因为库调用的原因,各个软件包之间会存在依赖条件,为了解决这个问题,出现了yum(Yellow dog Updter, Modified),作为rpm的前端程序,可自动处理依赖性关系(即当一个包依赖到另一个包时,自动安装对应的包)
2、yum工作原理
yum的工作模式分为俩部分:yum服务器端,client的yum工具。
◆yum服务器端存放着全部rpm包,以及特定的数据库文件来索引rpm包和记录rpm包之间的依赖关系。
◆client端每次调用yum命令的时候,通过解析/etc/yum.repos.d配置文件中的URL找到yum服务器。并且yum会定期去更新yum服务器上的rpm包的元数据和依赖关系信息到本地(/var/cache/yum/),每次使用yum操作rpm包时,根据数据库里信息确定安装包的名字,版本号,所需要的依赖包等,然后再去yum服务器实现操作。
工作原理示例图
3、配置yum源
yum源配置格式
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
URL书写格式
ftp://
http://
file:///
<1>本地
###新建cdrom目录 [[email protected] ~]#mkdir /media/cdrom ####挂载光盘文件到目录下 [[email protected] ~]#mount /dev/cdrom /media/cdrom/ mount: /dev/sr0 is write-protected, mounting read-only ####包文件就在Packages中,repodata父目录即为yum源目录 [[email protected] ~]#cd /media/cdrom/ [[email protected] /media/cdrom]#ls CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7 EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL ####新建yum配置文件 [[email protected] /media/cdrom]#cd /etc/yum.repos.d/ [[email protected] /etc/yum.repos.d]#ls CentOS-Base.repo.bak CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo CentOS-Base.repo CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo [[email protected] /etc/yum.repos.d]#vim base.repo ###注意:要先移除原来的repo文件 [base] name=Local yum repository baseurl=file:///media/cdrom gpgcheck=1 ####此处如果gpgcheck=0的话,可以不写gpgkey enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
<2>远端Server
如果虚拟机支持联网的话,可以直接使用网络上的yum源
####直接在/etc/yum.repo下建立配置文件即可 [[email protected] /etc/yum.repos.d]#vim base2.repo ####此处给出示例 [base2] name=Server yum repository baseurl=http://10.1.0.1/cobbler/ks_mirror/7/ gpgcheck=1 enabled=1 gpgkey=http://10.1.0.1/cobbler/ks_mirror/7/RPM-GPG-KEY-CentOS-7
4、yum命令
yum [options] [command] [package ...]
<1>显示仓库列表
yum repolist
<2>显示程序包
yum list {available|installed|updates}
- <3>安装升级
- yum install package...
- yum apdate package...
- yum downgrade package..
- <4>查看包的详细信息
- yum info package...
- <5>删除程序包
- yum remove package...
- <6>构建缓存
- yum makecache
- <7>清理缓存
- yum clean [ metadata | all ]
- <8>搜索
- yum search Key_word
- <9>查看yum事务历史
- yum history
- yum history undo # :可以撤销某个事物历史的所有安装包,类同卸载
- <10>包组的查看
- yum gruplist
- <11>包组的安装
- yum groupinstall group...
- <12>包组的升级
- yum groupupdate group..
- <13>包组的卸载
- yum groupremove group...