软件包管理——2day

软件包管理

课程目标

  1. 了解源码包和二进制包的区别

  2. 掌握rpm包的卸载、安装以及更新操作

  3. 掌握yum方式对rpm包的卸载、安装以及更新操作

  4. 掌握源码包的安装、卸载以及更新操作

  5. 掌握如何设置本地yum源

  6. 完成综合实战项目

课程实验

  1. 源码包和二进制包的讲解

  2. rpm方式安装、卸载、更新rpm包

  3. yum方式安装、卸载、更新rpm包

  4. 源码包的安装、卸载、更新操作

  5. 本地yum源的配置

课堂引入

不管是工作中还是生活中,电脑或者手机上都会安装各种各样的应用,在windows中我们都是安装EXE文件,在安卓手机中基本都是APK文件,那么,在Linux系统中,我们如何安装我们需要的软件?又如何更新?又如何卸载不需要的软件呢?

授课进程

一、软件包安装
1、软件包概述

概述:软件包就是用于安装、升级、卸载一个软件应用程序的。

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

2、软件包类型

Linux下也有很多可以安装的软件,而这些软件的安装包可细分为两种,分别是源码包二进制包

1)二进制包与源码包的区别

二进制包(预制菜):二进制包,也就是源码包经过成功编译之后产生的包,二进制包是 Linux 下默认的软件安装包。

  1. 二进制包,指的是已经编译好了的软件包,只需要直接安装就可以使用

  2. 二进制包,不需要编译,直接下载安装即可

  3. 二进制包,需要根据自己的计算机CPU以及操作系统去选择合适的

  4. 二进制包,命名方式一般为:xlockmore-5.31-2.el6.x86_64.rpm

源码包(原始材料):源码包就是一大堆源代码程序,是由程序员按照特定的格式和语法编写出来的。计算机只能识别机器语言,也就是二进制语言,所以源码包安装之前需要编译

  1. 源码包,指的是程序员写的原始的程序代码文件,不能够直接在计算机上运行

  2. 源码包,需要进行编译,变成二进制的软件包后,才可安装使用

  3. 源码包,一般可以在任何的计算机上安装使用

  4. 源码包,命名方式一般为:软件包名.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

  • 不介意老版本的话,可以从光盘(或者镜像文件)中读取

官网在国外,访问比较慢,可以考虑以下地址去获取:

  1. http://www.rpmfind.net/

在某一些情况下,一些特殊的软件在上面的网站找不到,则需要去一些特定的网站去查找,比如:

  1. http://www.mysql.com

  2. http://nginx.org/packages/

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安装之后生成了哪些文件

特别说明: 软件安装完成后,一共生成了以下几类文件

  1. 配置文件类:/etc目录

  2. 程序文件本身,二进制文件命令:/usr/sbin目录

  3. 文档手册:/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

课堂小结

  1. rpm方式安装、卸载、更新rpm包

  2. yum方式安装、卸载、更新rpm包

  3. 源码包的安装、卸载、更新操作

随堂作业

  1. 完成课堂的案例及练习

  2. 将今天的内容整理为思维导图的形式

  3. 完成综合实战

扩展内容

需求:使用源码的方式安装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服务

  1. 验证,打开浏览器,输入IP地址访问
相关推荐
ST小智1 天前
2025年创作历程回顾与个人生活平衡
大数据·linux·人工智能
loong_XL1 天前
elastic kibana可视化数据统计案例
运维·ai·智能体
惜.己1 天前
安装windows版本docker(配置镜像源+拉取运行docker)
运维·docker·容器
5G全域通1 天前
面向5G复杂性的下一代运维技术体系:架构、工具与实践
大数据·运维·人工智能·5g·架构
你好helloworld1 天前
ubuntu安装protobuf
linux·运维·ubuntu
chenyuhao20241 天前
Linux网络编程:UDP和TCP套接字编程
linux·网络·udp·tcp
一只努力学习的Cat.1 天前
Linux:五种IO模型
linux·服务器
Atri厨1 天前
awk入门练习题
linux·运维·服务器
胖好白1 天前
【RK3588开发】RK3588的Debian系统环境搭建
linux·vscode·debian
Alex Cafu1 天前
Linux网络编程1(OSI模型与TCP/IP协议栈)
linux·c语言·网络·tcp/ip