软件包管理——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地址访问
相关推荐
大白菜13248 小时前
进程的信号
linux
XH-hui8 小时前
【打靶日记】群内靶机Secure
linux·网络安全
Shingmc38 小时前
【Linux】进程控制
linux·服务器·算法
视觉装置在笑7138 小时前
Shell 变量基础与进阶知识
linux·运维
Web极客码9 小时前
如何通过命令行工具检查 Linux 版本信息
linux·运维·服务器
Lynnxiaowen9 小时前
今天我们继续学习Kubernetes内容pod资源对象
运维·学习·容器·kubernetes·云计算
欢鸽儿9 小时前
Vitis】Linux 下彻底清除启动界面 Recent Workspaces 历史路径
linux·嵌入式硬件·fpga
繁华似锦respect10 小时前
C++ 智能指针底层实现深度解析
linux·开发语言·c++·设计模式·代理模式
远程软件小帮手10 小时前
云电脑挂机功能上线!边上班摸鱼边游戏多开教程
运维·服务器