软件包管理
课程目标
-
了解源码包和二进制包的区别
-
掌握rpm包的卸载、安装以及更新操作
-
掌握yum方式对rpm包的卸载、安装以及更新操作
-
掌握源码包的安装、卸载以及更新操作
-
掌握如何设置本地yum源
-
完成综合实战项目
课程实验
-
源码包和二进制包的讲解
-
rpm方式安装、卸载、更新rpm包
-
yum方式安装、卸载、更新rpm包
-
源码包的安装、卸载、更新操作
-
本地yum源的配置
课堂引入
不管是工作中还是生活中,电脑或者手机上都会安装各种各样的应用,在windows中我们都是安装EXE文件,在安卓手机中基本都是APK文件,那么,在Linux系统中,我们如何安装我们需要的软件?又如何更新?又如何卸载不需要的软件呢?
授课进程
一、软件包安装
1、软件包概述
概述:软件包就是用于安装、升级、卸载一个软件应用程序的。

以上是windows系统中的软件包,那么,在Linux中,软件包长什么样子呢?

2、软件包类型
Linux下也有很多可以安装的软件,而这些软件的安装包可细分为两种,分别是源码包 和二进制包。
1)二进制包与源码包的区别
二进制包(预制菜):二进制包,也就是源码包经过成功编译之后产生的包,二进制包是 Linux 下默认的软件安装包。
二进制包,指的是已经编译好了的软件包,只需要直接安装就可以使用
二进制包,不需要编译,直接下载安装即可
二进制包,需要根据自己的计算机CPU以及操作系统去选择合适的
二进制包,命名方式一般为:
xlockmore-5.31-2.el6.x86_64.rpm
源码包(原始材料):源码包就是一大堆源代码程序,是由程序员按照特定的格式和语法编写出来的。计算机只能识别机器语言,也就是二进制语言,所以源码包安装之前需要编译
源码包,指的是程序员写的原始的程序代码文件,不能够直接在计算机上运行
源码包,需要进行编译,变成二进制的软件包后,才可安装使用
源码包,一般可以在任何的计算机上安装使用
源码包,命名方式一般为:
软件包名.tar.gz
| 软件包类型 | 是否编译 | 安装难易程度 | 可定制性 |
|---|---|---|---|
| 二进制包 | 否 | 易(直接安装) | 差 |
| 源码包 | 是 | 难(配置--->编译--->安装) | 好 |
2)二进制包分类
不同的系统,二进制包的形式也是不一样的,以下是常用的系统下面二进制包的形式
| 系统平台 | 包类型 | 工具 | 在线安装 |
|---|---|---|---|
| RedHat/Centos/Fedora/SUSE | rpm | rpm,rpmbuild | yum |
| Ubuntu/Debian | deb | dpkg | apt |
3、二进制包的安装方式
二进制包有两种安装方式,以centos系统为例,主要是rpm安装方式和yum安装方式,这两种方式都是我们工作中经常使用过的软件安装方式。
-
安装方式:rpm是一种命令行方式安装软件包的工具,需要手动下载对应的rpm包并使用rpm命令进行安装,而yum是一种自动化的软件包管理工具,可以自动下载并安装软件包及其依赖项
-
依赖关系:rpm只能安装指定的软件包,如果软件包依赖其他软件包,需要手动下载并安装所有依赖的软件包;而yum可以自动解决软件包依赖关系,自动下载并安装所有依赖的软件包
-
更新管理:rpm只能安装指定版本的软件包,如果需要更新软件包需要手动下载并安装新版本的rpm包;而yum可以自动检查并更新所有已安装软件包的最新版本
-
操作简便性:由于yum可以自动解决依赖关系和更新管理,因此操作相对于rpm更加简单方便
二、RPM安装
1、rpm概述
1)概述
RPM(RedHat Package Manager)类似Windows里面的"添加、删除程序"。RPM软件包以rpm为扩展名,RPM也是一种软件包管理器,可以让用户方便的进行软件的安装、更新、卸载、查询等,操作命令为rpm。
RPM包管理系统:功能强大,安装、升级、査询和卸载非常简单方便,因此很多 Linux 发行版都默认使用此机制作为软件安装的管理方式,例如 Fedora、CentOS、SuSE 等
DPKG 包管理系统:由 Debian Linux 所开发的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理,主要应用在 Debian 和 Ubuntu 中
2)优缺点
优点
-
由于已经编译完成并且打包,所以安装很方便
-
由于套件信息已经记录在Linux主机的数据库中,方便查询、升级与卸载
缺点
-
安装环境必须与打包时的环境一致
-
需要满足软件的依赖属性需求
-
卸载时需要特别小心,最底层的软件不可以先删除,否则可能造成整个系统出问题
3)命名规则
格式:name-version-arch.rpm
说明:name:软件包名称 / version:带有主、次和修订的软件包版本 / arch:硬件平台 / src.rpm:源代码包
示例:xlockmore-5.31-2.el6.x86_64.rpm
-
xlockmore:软件包的名称
-
5.31-2 : 版本号
-
el6 : 在centos6系统版本中使用
-
x86_64 :64位操作系统
-
.rpm : rmp安装包
2、获取rpm安装包方式
要想装软件,和windows 下一样,先得找到安装包:xxx.rpm,软件包的获取方式有以下两种:
-
去官网去下载http://rpm.pbone.net
-
不介意老版本的话,可以从光盘(或者镜像文件)中读取
官网在国外,访问比较慢,可以考虑以下地址去获取:
在某一些情况下,一些特殊的软件在上面的网站找不到,则需要去一些特定的网站去查找,比如:
3、选择rpm安装包
我们平常个在windows中安装软件的时候,也需要注意一些版本的信息,那么,在Linux安装rpm的时候,也同样需要注意一些版本信息,主要从以下两个方便进行考量:
选择适合当前系统的版本号
-
找不到适合的,才去尝试别的系统版本号
-
el6兼容el5;el5无法安装 el6
选择适合当前计算机cpu的架构
-
x86_64包,只能安装在64位的系统上
-
i386,i586,i686的软件包可以安装在32和64位系统上
-
noarch表示这个软件包与硬件构架无关,可以通用
-
32位系统不能安装64位包
经验建议:建议不要跨大版本号去安装软件包,尽量使用当前系统版本自带软件包安装
4、获取rpm包
1)从光盘中获取【了解】

使用 # lsblk(list block devices)或者df -T 查看块状设备的信息

如果没有挂载目录则挂载:mount /dev/sr0 /挂载目录
进入 挂载目录/Packages目录

需求:切换到root账号,将firefox的rpm文件复制到root账号的家目录

2)去官网下载
从这个网站下载Firefox的rpm文件:http://www.rpmfind.net/linux/rpm2html/search.php?query=firefox&submit=Search+...

5、查询软件的安装情况
我们可以通rpm命令查询指定软件的安装情况,有时候我不确定这个软件有没有安装,安装的是哪一个版本,那么就可以通过这种方式来进行查看
命令:rpm
作用:查询软件的安装情况
语法:rpm -qa | grep
软件名称参数选项:
-q:查询,query
-a:全部,all
示例:
需求:查询firefox浏览器的安装情况
rpm -qa | grep firefox

需求:查询qq软件的安装情况

6、卸载rpm包
如果不需要的软件,则可以通过rpm卸载掉
命令:rpm
作用:卸载软件
语法:rpm -e 软件的名称(建议写完整的名称,通过-qa 查询)
参数选项:-e:卸载
示例
需求:卸载火狐浏览器(最好是先查询,在进行卸载)
rpm -qa | grep firefoxrpm
# firefox-68.10.0-1.el7.centos.x86_64
rpm -e firefox-68.10.0-1.el7.centos.x86_64
# 再次查询
rpm -qa | grep firefoxrpm

7、安装rpm包
可以通过rpm安装软件,前提是需要获取到rpm文件
命令:rpm
作用:管理rpm软件包
语法:rpm -ivh 软件包完整路径名称
参数选项:-i:install,安装
-v:显示进度条
-h:表示以"#"形式显示进度条
示例
需求:将刚刚卸载的firefox火狐浏览器重新安装(前提是已经将光盘中的rpm文件复制到root的家目录中)
cd # 切换到家目录
ls # 查看家目录中的内容,应该包含firefox的rpm文件
rpm -ivh firefox-68.10.0-1.el7.centos.x86_64.rpm

8、升级rpm包
随着时间的推移,各种应用软件都会进行迭代升级,那么,此时就需要对系统上的应用软件进行升级操作
命令:rpm
作用:管理rpm软件包
语法:rpm -Uvh 完整的安装包路径
参数选项:
-U:upgrade,升级
-v:表示显示进度条
-h:表示以#形式显示进度条
示例
需求:将安装的Firefox软件进行升级(可以去http://www.rpmfind.net/下载最新版的Firefox的rpm文件,注意版本)
su - root
cp /home/woniu/firefox-115.6.0-1.el7.centos.x86_64.rpm ~

升级Firefox
rpm -Uvh firefox-115.6.0-1.el7.centos.x86_64.rpm

9、依赖关系
概述:一个软件必须先有其他软件才能运行,例如之前Firefox启动过程中提示的缺少nspr与nss,称之为依赖,是firefix依赖于nspr与nss。
那么,如果我们想要安装Firefox,那么就必须先安装号nspr与nss,这是rpm安装软件比较麻烦的地方,后面我们使用yum安装,会自动先帮我们安装所需要的依赖。
10、rpm安装选项
1)强制选项
语法:--force
示例:
rpm -ivh 软件包 --force 强制安装软件包
rpm -e 软件包名 --force 强制卸载软件包
2)忽略选项
语法:--nodeps
示例:
rpm -ivh 软件包 --nodeps 忽略依赖关系安装
rpm -e 软件包 --nodeps 忽略依赖关系卸载
3)查看文件所属的包名
命令:rpm
作用:查看文件所属的包名
语法:rpm -qf 需要查询的文件路径
参数选项:
-f:查询文件所属包
示例
需求:查询/etc/ntp.conf 属于哪个软件包
rpm -qf /etc/ntp.conf

4)查询软件安装完成后,生成了哪些文件
命令:rpm
作用:查询软件安装完成后,生成了哪些文件
语法:rpm -ql 需要查询的软件包名称
参数选项:
-l:生成了哪些文件
示例
需求:查询Firefox安装之后生成了哪些文件
特别说明: 软件安装完成后,一共生成了以下几类文件
配置文件类:/etc目录
程序文件本身,二进制文件命令:/usr/sbin目录
文档手册:/usr/share/doc或man目录
rpm -ql firefox

11、总结
rpm命令总结
查询软件的安装情况: rpm -qa | grep 软件名称
卸载rpm包: rpm -e 软件的名称(建议写完整的名称,通过-qa 查询)
安装rpm包: rpm -ivh 软件包完整路径名
升级rpm包: rpm -Uvh 完整的安装包路径
强制选项 --force
取消依赖 --nodeps
查询属于哪一个软件 rpm -qf 文件名
查询生成的文件 rpm -ql 软件名
三、YUM安装
1、yum概述
yum,是Yellow dog Updater, Modified 的简称,是杜克大学为了提高RPM 软件包安装性而开发的一种软件包管理器。起初是由yellow dog 这一发行版的开发者Terra Soft 研发,用python写成,那时还叫做yup(yellow dog updater),后经杜克大学的Linux@Duke 开发团队进行改进,遂有此名。yum 的宗旨是自动化地升级,安装/移除rpm 包,收集rpm 包的相关信息,检查依赖性并自动提示用户解决。yum 的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是http 或ftp 站点,也可以是本地软件池,但必须包含rpm 的header,header 包括了rpm 包的各种信息,包括描述,功能,提供的文件,依赖性等。正是收集了这些header 并加以分析,才能自动化地完成余下的任务。
yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个distribution 的应用程序相互关系,根据计算出来的软件依赖关系进行相关的升级、安装、删除等等操作,减少了Linux 用户一直头痛的dependencies 的问题。这一点上,yum 和apt 相同。apt 原为debian 的deb 类型软件管理所使用,但是现在也能用到RedHat 门下的rpm 了。
yum 主要功能是更方便的添加/删除/更新RPM 包,自动解决包的倚赖性问题,便于管理大量系统的更新问题。
yum 可以同时配置多个资源库(Repository),简洁的配置文件(/etc/yum.conf),自动解决增加或删除rpm 包时遇到的依赖性问题,保持与RPM 数据库的一致性。

2、yum源分类
- 本地yum源
yum仓库在本地(系统光盘/镜像文件)
- 网络yum源
yum仓库不在本地,在远程,需要通过网络进行访问
国内较知名的网络源(aliyun源,163源,sohu源,知名大学开源镜像等)
国外较知名的网络源(centos源、redhat源、扩展epel源等)
特定软件相关的网络源(Nginx、MySQL、Zabbix等)
3、网络yum配置
使用本地镜像的yum源可以不用网络,但是存在一个问题,就是本地光盘里面的yum源可能比较旧,另外可能也不是很齐全,只有4000多个文件,所以,某些时候,我们还是需要通过网络上的yum源下载安装文件。
需求:配置阿里云的yum源
第一步:百度,搜索你想要的YUM源,进入官网,找到CentOS
地址:https://developer.aliyun.com/mirror/

第二步:根据官网提示,配置阿里云的YUM源
官网的配置步骤
1)备份(我们已经将所有的配置都已经打包成一个压缩包了,所以,此处我们不需要在进行备份了)
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2)下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
3)运行 yum makecache 生成缓存
yum clean all # 清除缓存
yum makecache # 重新生成缓存
4)测试
需求:重新安装httpd应用
yum -y remove httpd # 卸载httpd软件
yum install httpd -y # 安装httpd软件

4、配置扩展源
本地YUM仓库可以解决没有网络的情况下安装软件,网络YUM可以从网络YUM仓库安装版本比较新的软件,但是,有些软件在官方的YUM源仓库中没有,比如接下来我们要安装的这个软件,那么此时就需要配置一个扩展源,一些找到不到的软件可以从扩展源中进行查找
概述:EPEL是对官网源的一个扩展
-
CentOS-Base.repo文件 => 基础源(官方在带的YUM源)
-
epel.repo文件 => 扩展源,是对官方YUM源的一个补充
需求:安装sl软件
yum install sl -y

配置扩展源
yum install epel-release -y

再次安装sl
yum install sl -y


5、yum安装rpm包
命令:yum
作用:管理rpm软件包
语法:yum -y install 软件包名
参数选项:
-y:选项表示取消交互
说明:包组里面包含很多的软件包
需求:安装firefox软件
yum install firefox -y

6、yum卸载rpm包
命令:yum
作用:管理rpm软件包
语法:yum -y remove 软件包名
参数选项:
-y:选项表示取消交互
说明:包组里面包含很多的软件包
需求:卸载firefox软件
yum -y remove firefox
7、yum升级rpm包
命令:yum
作用:管理rpm软件包
语法:yum -y update 软件包名
参数选项:
-y:选项表示取消交互
需求:先使用rpm安装旧版本的Firefox,在使用yum进行更新操作
rpm -ivh firefox-68.10.0-1.el7.centos.x86_64.rpm # 安装旧版本的Firefox
yum update firefox # 使用yum进行更新Firefox
8、yum其它选项
yum list # 列出仓库里的软件包
yum repolist # 列出可用仓库
yum clean all # 清空yum缓存
yum makecache # 创建yum缓存
四、源码安装
1、源码安装概述
源码包是指C等语言所开发的源代码文件的一个压缩包,通常压缩为.tar.gz或.tar.bz2。源码通常需要编译器将其编译成二进制文件,如gcc编译器。
源码安装的优点:
(1)开源,有能力者可以修改源代码;特别是要对某个软件,从头开发时,就特别需要对源码进行解读分析。
(2)可自由选择所需功能;
(3)软件通过编译安装,更加稳定、效率更高;
(4)卸载方便,直接删除目录即可。不了软件所依赖的环境及关系,也容易引发混乱,产生大量分散的垃圾。
(5)对于学习者而言,源码安装更有利于学习者发现软件环境和工具之间所依赖的关系。
2、安装选项
源码安装时,有很多的选项,不同的选项具有不同的含义,以下是常用的选项及说明
--prefix=... Directories to put files in /usr/local # 软件家目录
--bindir=... $prefix/bin # 命令的目录
--etcdir=... $prefix/etc # 配置文件的目录
--mandir=... $prefix/share/man man # 文档路径
--locale=... $prefix/share/locale # 语言编码
...
3、安装步骤
1)下载源码包
在开始安装之前,我们需要先下载软件的源码包。可以到软件官方网站或者GitHub等代码托管平台下载
2)解压源码包
解压源码包后,我们会得到一个包含源代码的目录
3) 安装依赖包
在编译安装软件之前,我们需要先安装一些依赖包。这些依赖包通常是开发工具、库文件或其他软件包
4)配置编译选项
在编译安装软件之前,我们需要先配置编译选项。不同的软件包可能有不同的编译选项,具体可以参考软件包的README文件或者官方文档
5)编译
配置完编译选项后,我们可以使用make命令编译源代码
编译完成后,使用make install命令安装软件
6)安装
4、安装示例
需求:将axel软件安装到/opt/axel目录下
1)将安装包复制到root账号的家目录下面

2)将压缩包解压到当前目录
tar -zxvf axel-1.0a.tar.gz

3)安装c++编译器
yum install gcc-c++ -y
4)配置编译选项
mkdir /opt/axel # 创建目录
./configure --prefix=/opt/axel # 进入解压目录执行指定安装目录
5)编译
make
6)安装
make install
7)测试是否安装成功
axel https://mirrors.aliyun.com/repo/Centos-7.repo

导致该问题可能出现的原因:
-
命令没有安装
-
命令安装了但是找不到 原因:命令安装了但是不能找到,原因是不知道去/opt/axel/bin目录里找。 说明:系统中有PATH环境变量,该变量里保存的是命令的路径,只要PATH中有命令的所在路径,就可以找到。
-
命令敲错了
7)配置环境变量
echo $PATH # 查看当前系统的环境变量
export PATH=$PATH:/opt/axel/bin # 将axel的临时添加到环境变量中
vi /etc/profile # 将axel的永久添加到环境变量中
export PATH=$PATH:/opt/axel/bin
source /etc/profile # 重新读取配置文件(变更生效)

5、源码卸载
make uninstall # 卸载安装
make distclean # 卸载编译和配置过程
需求:卸载axel软件
cd # 回到家目录
cd axel-1.0a # 进入到axel目录
make uninstall # 卸载安装

五、综合实战
公司之前计划将现有的MySQL数据库从云平台迁移到云下物理真机上,并且已经在相应的物理机上安装好相应的操作系统。现在需要运维人员协助在测试机Centos7上安装好MySQL-5.6版本用于前期迁移准备工作,同时配置好yum源方便后续软件包安装
安装步骤参照:https://www.wolai.com/xfhXhUF99WczjBCvMkUEZC
课堂小结
-
rpm方式安装、卸载、更新rpm包
-
yum方式安装、卸载、更新rpm包
-
源码包的安装、卸载、更新操作
随堂作业
-
完成课堂的案例及练习
-
将今天的内容整理为思维导图的形式
-
完成综合实战
扩展内容
需求:使用源码的方式安装nginx软件
需要安装 gcc 的环境
yum install -y gcc-c++
第三方的开发包
PCRE
yum install -y pcre pcre-devel
zlib
yum install -y zlib zlib-devel
OpenSSL
yum install -y openssl openssl-devel
1)把 nginx 的源码包nginx-1.22.0.tar.gz上传到 linux 系统
2)解压缩:tar zxvf nginx-1.22.0.tar.gz -C /usr/local
3)进入nginx-1.22.0目录 使用 configure 命令创建一 makeFile 文件
./configure
4)编译
make
5)安装
make install
6 ) 启动nginx服务
systemctl stop firewalld 关闭防火墙
cd /usr/local/nginx/sbin 进入到nginx安装目录的命令目录中
./nginx 启动nginx服务
- 验证,打开浏览器,输入IP地址访问
