首页 > 技术文章 > -linux-软件包管理

arher 2020-12-11 19:16 原文

一 软件包介绍

与Windows类似,在linux系统上也可以安装各种应用程序,或称软件包,Linux下软件包分为三类

分类 安装 特点
rpm包 预先编译打包,安装简单 通常软件的稳定版会被官方做成rpm,所以软件版本较低
源码包 手动编译打包,安装繁琐 软件版本丰富,可选择性强
二进制包 解压即可使用,安装简单 不能修改源代码

二 rpm包管理

1 什么是rmp包

在主流的Linux系统上,多数软件的安装、升级、移除以及维护工作都是RPM软件包管理程序来完成的,那什么是RPM软件包呢?

RPM 是Red-Hat Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat 的标志,但是其原始设计理念是开放式的,通常软件的稳定版会被官方做成rpm,所以软件版本偏低。

rpm包格式

rpm包格式举例

# 例1 mysql-connector-odbc-5.2.5-8.el7.x86_64.rpm 
软件包名:mysql-connector-odbc 
版本号Version:5.2.5 
发布版本Release:8.el7 
平台:el7.x86_64 
后缀:.rpm

# 例2 
abrt-python-doc-2.1.11-57.el7.centos.noarch.rpm 
abrt-python-doc 	#软件包的名称 
2.1.11 						#软件的版本 
57 								#软件编译之后的发布的次数 
el7 							#适合的操作系统的版本 
noarch 						#适用于不同版本的CPU 
.rpm 							#后缀名

RPM闭包使用的平台

# 查看自己当前的平台以及系统版本
[root@arther-linux /]# uname -m
x86_64
[root@arther-linux /]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

管理RPM包有两种命令

# 1.rpm命令:
		需要自己找到rpm包,并且手动解决包的依赖性关系
  	ps:	实际情况下,很难分辨缺少什么依赖包
      
# 2.yum命令:
		相关rpm包事先都被存放于一个仓库里,仓库包含了所有的依赖包,所以yum按照可以帮我们解决依赖性 问题。
  
# 具体联系与区别
rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装、查询、卸载、升级等工作。但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时。

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

RPM包获取

如果没有挂载,文件目录与外设硬件目录是两个概念,无法以软件操作系统的指令去打开硬件目录,如
[root@arther-linux /]# ls /dev/sr1
/dev/sr1
# 所以需要挂载,实现外设硬件的目录与操作系统软件目录的拼接(映射关系),将镜像中该目录下的文件挂载到opt中。


# 1.本地的ISO镜像光盘(软件包可能存在版本偏低情况) : 挂载镜像有以下三种方式
方式1: 
[root@localhost ~]# mount /dev/cdrom /opt/ 

方式2: 
[root@localhost ~]# mount /dev/sr0 /opt/ 
# 如果有两个光驱
[root@localhost ~]# mount /dev/sr1 /opt/ 

方式3:
[root@localhost ~]# mount -o loop /xxx.iso /opt 

查看光盘里的rpm包 
[root@localhost ~]# ls /opt/Packages/ 

# 2.自己去网上下载rpm包进行安装 

# 3.联网从yum仓库里获取rpm包 					# yum的时候

三 rpm命令

选项

#1、安装:rpm -ivh <RPM包名全称> 

#2、卸载:rpm -e <RPM包名> 

#3、升级:rpm -Uvh <RPM包名>

#4、查询:
rpm -qa								# 查询系统中安装的所有RPM软件包

rpm -qa | grep php 		#检索系统中已经安装有关php的软件包

rpm -q  RPM包名   		 #查询指定软件包是否已安装
											[root@arther-linux ~]# rpm -q zip
											zip-3.0-11.el7.x86_64
    
rpm -qi  RPM包名 		   #查询系统中已安装包的描述信息

rpm -ql  RPM包名 		   #查询系统中已安装包里所包含的文件

rpm -qc  RPM包名  		 #查询指定软件包的所有配置文件

rpm -qd <RPM包名> 		 #查询某个包安装的帮助文档

rpm -qf 文件路径 				#查询系统中指定文件所属的软件包 
											[root@arther-linux ~]# rpm -qf /usr/sbin/ifconfig 
											net-tools-2.0-0.25.20131004git.el7.x86_64
    
-p										#在上述选项的基础上加选项-p,就可以查看尚未安装的rpm包信息

额外选项 
--nomd5 # 不检验软件包的签名 

--nodeps # 忽略依赖性安装软件,安装后软件有可能无法使用,最好是解决依赖性后再安装 						[root@localhost ~]# rpm -e dos2unix --nodeps # 忽略依赖关系 

--force # 强制安装软件包,只有安装和升级可以强制执行

安装

#1、rpm包在本地 
[root@egon ~]# mount /dev/sr0 /opt 
[root@egon ~]# rpm -ivh /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm 

#2、rpm来自于网络,如果安装过程中报错:curl: (60) Peer's Certificate has expired,请先 将系统时间修改正确,然后再安装即可 
[root@egon ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0- 2.el7.x86_64.rpm

安装与依赖性

[root@egon ~]# rpm -ivh /opt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm 错误:依赖检测失败: 
/etc/mime.types 被 httpd-2.4.6-88.el7.centos.x86_64 需要 
httpd-tools = 2.4.6-88.el7.centos 被 httpd-2.4.6-88.el7.centos.x86_64 
需要 
libapr-1.so.0()(64bit) 被 httpd-2.4.6-88.el7.centos.x86_64 需要 libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-88.el7.centos.x86_64 需要 [root@egon ~]#

# 解决思路:安装提示的库,将依赖的库全部安装,安装

升级rpm包

#1、下载一个低版本、一个高版本 
wget https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent- 3.0.9-1.el7.x86_64.rpm 
  
wget https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent- 4.2.0-1.el7.x86_64.rpm
  
#2、先安装低版本 
[root@egon ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm

#3、再安装高版本,会报错 
[root@egon ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm

#4、如果采用--force选项,那就是强制安装,会同时存在两个版本,该方案不可取
[root@egon ~]# rpm -qa |grep zabbix zabbix-agent-3.0.9-1.el7.x86_64 
[root@egon ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm --force 。。。安装成功。。。 
[root@egon ~]# rpm -qa |grep zabbix # 同时两个版本共存 
zabbix-agent-3.0.9-1.el7.x86_64 
zabbix-agent-4.2.0-1.el7.x86_64

#5、重来,采用升级方式安装 
[root@egon ~]# rpm -e zabbix-agent-3.0.9-1.el7.x86_64 
[root@egon ~]# rpm -e zabbix-agent-4.2.0-1.el7.x86_64 
[root@egon ~]# rpm -qa |grep zabbix 
[root@egon ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm 
[root@egon ~]# rpm -Uvh zabbix-agent-4.2.0-1.el7.x86_64.rpm 
# 清理老版本,安装新版本。。。 
[root@egon ~]# rpm -qa |grep zabbix-agent 
# 只留下一个新版本 
zabbix-agent-4.2.0-1.el7.x86_64 
[root@egon ~]#

三 yum管理RPM包

1 yum介绍

yum自动解决依赖关系

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell 前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关 系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

查看yum命令与配置文件

[root@arther-linux /]# rpm -q yum
yum-3.4.3-168.el7.centos.noarch

[root@arther-linux /]# rpm -qc yum
/etc/logrotate.d/yum
/etc/yum.conf
/etc/yum/version-groups.conf

yum命令常用选项

常用选项说明: 
#仓库 
				yum repolist 							# 查询可用仓库 
  			yum repolist all 					# 查看包括已启用或禁用的所有仓库状态 
    
    # 关闭与启用仓库:本质:都是在修改repo文件中的enable的值 0 不启用 1 启用 
    yum-config-manager --disable epel #关闭仓库epel 
    yum-config-manager --enable epel #启用仓库epel 
    
#查看 
				yum list 											# 列出可用仓库中所有的软件包 
  			yum list | less yum grouplist # 列出可用仓库中的软件组 
        yum provides /usr/sbin/ifconfig 
      # 查询命令所属的软件包,可以不加路径,只写 命令名字 
      # 与rpm -qf的区别在于yum provides后可 以只跟命名名
      
#安装 
				yum install httpd httpd-tools  # 加上-y选项可以变成非交互 
  			yum groupinstall "开发工具" -y  
    		# 安装软件组,一个软件组中包含了多个软件包 
        yum groups install "开发工具" -y #同上
        
#恢复
				yum reinstall httpd # 不小心删除了配置文件的时,可以reinstall一下
  
#更新 		
				yum check-update 		# 检查可以更新的软件包 
				yum update -y       # 更新所有软件包,包括内核,通常只在刚装完系统时执行
    	  yum update NetworkManager.x86_64 -y # 更新某个软件包
      
      
#缓存 
				yum makecache 			# 制作元数据缓存 
  			yum clean all 			# 清理元数据缓存 
    		vim /etc/yum.conf 	# 默认软件包下载安装后会自动删除 
      											# 设置keepcache=1 即开启了软件包缓存 
        										# 缓存目录为配置文件中指定的cachedir
          
# 历史记录 
				yum history 						# 查看执行过的yum命令历史记录 
  			yum history info ID号 	 # 查看具体某一条yum命令的详细信息 
    		yum history undo ID号   # 撤销执行过的历史命令
      
# 关于安装需要注意: 
无论yum安装的软件来自何方,yum时刻以自己仓库中的repodata存储的依赖关系为准,如果有多个仓库,就 依次检索 
#1、yum直接安装公网的rpm包, 会自动查找当前系统上已有的仓库解决依赖关系 
yum install https://mirrors.aliyun.com/centos/7.6.1810/os/x86_64/Packages/samba- 4.8.3-4.el7.x86_64.rpm 
  
#2、Yum直接安装本地的rpm包,会自动查找当前系统上已有的仓库解决依赖关系 
yum localinstall -y /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm

要使用yum前,需要准备一个yum源(我们也称为yum仓库), 这个可以是一个互联网上的仓库,也可以是本地自己搭建的仓库.仓库里面有什么呢?里面全部都是.rpm的软件包.一台linux,可以添加N多个yum源, 能搜索的软件包数量就是N个yum源之和.系统常见yum

1.自定义的本地源 

2.网络上的源头,如:base基础源、epel扩展源、与服务相关的源(官网)

推荐阅读