软件包管理
【1】、Linux软件类型
- 开源软件软件源代码开放,供用户免费学习,允许用户二次开发,用户使用放心,后期如果开发者不再进行维护,会有其他人进行维护
- 闭源软件软件代码不公开发布,无法二次开发,后期开发者如果不进行维护损失很大
【2】、开源软件包类型
- 源码包
- 优点:可以看到软件源代码,安装灵活,可以自定义安装路径和按照功能,卸载方便
- 缺点:安装过程麻烦,需要用户手动编译,需要手动解决软件包的依赖关系
- 二进制包(RPM包)
- 优点已经被编译好了,安装简单、安装速度快
- 缺点所有功能、路径无法自定义
封包类型 说明
rpm软件包 扩展名为.rpm,适用于RedHat系列
deb软件包 扩展名为.deb,适用于Debian系列
源代码软件包 通常以.tar.gz、.tar.bz2格式的压缩包提供包含程序的原始代码文件
其他 提供install.sh、setup、*bin、*.pl
绿色免安装、提供已经编译好的程序及相关软件
【3】、RPM软件包
Redhat Package Manager
- 由红帽公司提出,Redhat、SUSE等系列采用
- 建立集中数据库,记录软件包安装/卸载等变化信息,分析软件包依赖关系
RPM包文件名特征
rpm软件包下载网站
- 软件名-版本信息.操作系统.硬件架构.rpmfirefox-91.9.0-1.el8_5.x86_64.rpm
1、RPM包的安装位置
文件类别 | 默认安装位置 |
---|---|
普通执行程序(命令) | /usr/bin、/bin/ |
服务器程序、管理工具 | /usr/sbin/、/sbin/ |
配置文件 | /etc/、/etc/软件名/ |
日志文件 | /var/log/、/var/log/软件名 |
程序文档、man手册页 | /usr/share/doc/、/usr/share/man/ |
2、RPM查询软件
-q:查询某一软件是否安装
-qa:查询系统中安装的所有软件包
-ql:显示软件在系统中安装产生了哪些数据
-qi:显示软件的详细信息
-qf:查看某一个命令是由哪一个软件包产生的
查看软件在系统中安装产生了哪些数据
rpm -ql tree-1.7.0-15.el8.x86_64
/usr/bin/tree
/usr/lib/.build-id
/usr/lib/.build-id/47
/usr/lib/.build-id/47/6e749c56abc75d25e3bc5c29e83507a605fd53
/usr/share/doc/tree
/usr/share/doc/tree/LICENSE
/usr/share/doc/tree/README
/usr/share/man/man1/tree.1.gz
查询软件的详细信息
{24-05-29 16:28}locahost:/ root# rpm -qi tree-1.7.0-15.el8.x86_64
Name : tree
Version : 1.7.0
Release : 15.el8
Architecture: x86_64
Install Date: Tue 28 May 2024 07:45:59 PM CST
Group : Unspecified
Size : 108563
License : GPLv2+
Signature : RSA/SHA256, Mon 12 Apr 2021 05:23:54 PM CST, Key ID 15af5dac6d745a60
Source RPM : tree-1.7.0-15.el8.src.rpm
Build Date : Mon 12 Apr 2021 04:38:17 PM CST
Build Host : ord1-prod-x86build003.svc.aws.rockylinux.org
Relocations : (not relocatable)
Packager : infrastructure@rockylinux.org
Vendor : Rocky
URL : http://mama.indstate.edu/users/ice/tree/
Summary : File system tree viewer
Description :
The tree utility recursively displays the contents of directories in a
tree-like format. Tree is basically a UNIX port of the DOS tree
utility.
查看系统中安装了多少个软件包
{24-05-29 16:43}locahost:/ root# rpm -qa | wc -l
663
查看某一个命令是由哪一个软件包产生的
{24-05-29 16:51}locahost:/ root# rpm -qf /usr/bin/chsh
util-linux-user-2.32.1-43.el8.x86_64
{24-05-29 16:51}locahost:/ root# rpm -qf /usr/bin/ls
coreutils-8.30-15.el8.x86_64
3、rpm软件包管理
- 软件包依赖问题
- 树形依赖:a—>b—>c—>d
- 环形依赖:a—>b—>c—>d—>a
- 模块依赖:需要模块文件支持
- 如何使用光驱所提供的软件包
- 首先我们需要将光驱挂载到系统中
[root@bogon ~]# ll /dev/cdromlrwxrwxrwx. 1 root root 3 Apr 9 08:35 /dev/cdrom -> sr0#这是光驱所在的位置
- 进行挂载
- 创建磁盘分区
mkdir /mnt/cdrom
- 把光驱挂载到创建的磁盘分区下,这是临时挂载,重启或者关机后失效
mount /dev/sr0 /mnt/cdrom
- 永久挂载,修改配置文件,在path:/erc/fstab写入如下文件,保存并退出
/dev/sr0 /mnt/cdrom iso9660 defaults 0 0
- 创建磁盘分区
- 首先我们需要将光驱挂载到系统中
- 对于RPM软件包的管理,我们使用rpm命令去进行管理
- -ivh:i安装,v显示详细信息,h显示软件安装进度
- {24-05-29 17:15}locahost:/opt root# rpm -i /mnt/sr0/AppStream/Packages/v/vsftpd-3.0.3-36.el8.x86_64.rpm{24-05-29 17:20}locahost:/opt root# rpm -q /mnt/sr0/AppStream/Packages/v/vsftpd-3.0.3-36.el8.x86_64.rpmvsftpd-3.0.3-36.el8.x86_64
- -Uvh:升级安装包(升级前先做好备份)
- -e:卸载软件包
- -qpi:查询软件包的信息
- –nodesps:卸载软件包时忽略依赖关系(一般不要忽略)
- –import:导入红帽签名文件,一般来源于光盘的包都存在签名
【4】、yum机制
软件仓库
- 本地仓库(也称本地yum源):自己搭建的,创建文件,在文件中配置仓库参数
- 特点:不需要连接外网,软件包存放本机
- 网络仓库:阿里、中科大、清华大学、163仓库等
- 特点:需要连接外网、无需任何配置,直接下载
yum可以帮助我们自动解决依赖
- yum repolist:列出可用的软件仓库
[root@xu ~]# yum repolist
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
repo id repo name
appstream local_redhat_appstream
base local_redhat_base
yum list:列出软件包(包含为安装的),也可以查找包
[root@xu ~]# yum list nginx
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
Last metadata expiration check: 0:09:44 ago on Tue 09 Apr 2024 10:14:00 PM CST.
Available Packages
nginx.x86_64 1:1.14.1-9.module+el8.0.0+4108+af250afe appstream
- yum provides 命令:搜索该命令是由哪个软件包提供的
- yum update:升级软件包
- yum list 软件包 –showduplicate:列出软件包所有的版本
[root@xu yum.repos.d]# yum list nginx --showduplicates
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
nginx stable repo 51 kB/s | 55 kB 00:01
Available Packages
nginx.x86_64 1.16.0-1.el8.ngx nginx-stable
nginx.x86_64 1:1.14.1-9.module+el8.0.0+4108+af250afe appstream
nginx.x86_64 1:1.16.1-1.el8.ngx nginx-stable
nginx.x86_64 1:1.18.0-1.el8.ngx nginx-stable
nginx.x86_64 1:1.18.0-2.el8.ngx nginx-stable
nginx.x86_64 1:1.20.0-1.el8.ngx nginx-stable
nginx.x86_64 1:1.20.1-1.el8.ngx nginx-stable
nginx.x86_64 1:1.20.2-1.el8.ngx nginx-stable
nginx.x86_64 1:1.22.0-1.el8.ngx nginx-stable
nginx.x86_64 1:1.22.1-1.el8.ngx nginx-stable
nginx.x86_64 1:1.24.0-1.el8.ngx nginx-stabl
yum install –setopt=obsoletes=0 软件包:指定安装版本(使用yum安装软件,如果不指定软件版本,则默认安装软件仓库中的最新版)
[root@xu yum.repos.d]# yum install –setopt=obsoletes=0 nginx*1.20.0 -y
- yum clean all :清楚缓存
- yum makecache :生成缓存在使用网络仓库时一般会生成缓存,提高下载速度,记录软件在网络仓库所在的位置
【5】、yum软件仓库配置
1、永久挂载光驱
- mkdir /mnt/cdrom
- 把光驱挂载到创建的磁盘分区下,这是临时挂载,重启或者关机后失效
- mount /dev/sr0 /mnt/cdrom
- 永久挂载,修改配置文件,在path:/erc/fstab写入如下文件,保存并退出
- /dev/sr0 /mnt/cdrom iso9660 defaults 0 0
2、yum的本地配置
- 修改yum的repo文件
- 在path:/etc/yum.repo.d/rhel8.repo中填入以下内容,保存退出
- [basos] # 具有唯一性,不可重复
- name=cdrom baseos packages #仓库描述,描述信息,自定义,不具备唯一性
- baseurl=file:///mnt/cdrom/BaseOS #指定软件仓库地址,file://用于指定本地软件包存放位置
- enabled=1 #软件仓库是否启动,1启动,0不启动
- gpgcheck=0 #是否检测软件包签名,0不检测,1检测,一般自己创建的仓库都是0
- [appstream]
- name=cdrom baseos packages
- baseurl=file:///mnt/cdrom/AppStream
- enabled=1
- gpgcheck=0
清理yum的缓存文件
[root@localhost ~]# yum clean all
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
20 files removed
重新加载cache
[root@localhost ~]# yum makecache
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
mplayer 5.6 MB/s | 23 kB 00:00
cdrom baseos packages 33 MB/s | 2.4 MB 00:00
cdrom appstream package 65 MB/s | 8.1 MB 00:00
Metadata cache created.
3、禁用yum源
- 修改yum源的名字能够正常使用yum源的必要条件:1、yum源的文件名必须以:.repo结尾2、yum源的文件必须在path:/etc/yum.repo.d/目录下因此我们可以采用移动文件夹或者修改yum源的文件路径
- 修改yum源的配置文件,将enabled=1,改为enabled=0yum源的配置文件中enabled=1表示允许调用这个源我们把想要禁用的源中的enabled改为0,则表示这会源被禁用。
4、系统升级 / kernel升级
- 把虚拟机的光驱更换为更新的版本(8.8—>8.9)
- 将新的光驱挂载到/mnt/cdrom下
- yum list kernel 列出当前使用的kernel,和可用的kernel
- yum update 更新yum源(更新所有的源–>系统升级)
- yum install kernel -y,下载新的kernel(只更新kernel–>内核升级)
- systemctl reboot,重启系统,升级完成
- 如果是系统升级,重启后会有两个选项(8.8 / 8.9)我们选择8.9,进入系统
- 查找系统中所有的kernel version
- rpm -qa | grep kernel
- 447是旧的版本
- 513是新的版本
- 将旧的版本删除
- rpm -qa | grep kernel | grep 477 | rpm -e
5、下载阿里云的yum的repo文件
- 使用wget下载
wget https://mirrors.aliyun.com/repo/Centos-8.repo
- 我们可以禁用其他的repo源,也可以保留,但是要保证每一个repo源的唯一性,即repo源文件中【name】的唯一性
【6】、源码包管理
现有源码包(tar包)—–> 编译安装
- 自定义性强,灵活度高
再有rpm软件包—–>yum rpm
源码包安装步骤,以nginx
为例
官网下载源码包
[root@xu ~]# wget https://nginx.org/download/nginx-1.24.0.tar.gz
我们通过官网下载的源码包一般都是tar包
- 系统安装源码包依赖
我们可以去nginx官网查询下载nginx时所需要的依赖,通常我们对于依赖的下载是通过yum去下载,每一个软件的依赖都是不同的,需要去对应的官网进行查询
- 解压源码包&进入源码包安装路径
[root@xu ~]# tar -xf nginx-1.24.0.tar.gz
[root@xu ~]# ls
anaconda-ks.cfg nginx-1.24.0 nginx-1.24.0.tar.gz
[root@xu ~]# cd nginx-1.24.0/
[root@xu nginx-1.24.0]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
- configure检测系统环境&指定安装路径与功能
- 通过config我们可以指定安装路径,指定安装的功能模块,这就是通过源码包安装的优势,方便我们的管理和自定义
- 在我们完成指定之后,他就会帮我们去检测系统安装环境
- [root@xu nginx-1.24.0]# ./configure –prefix=/usr/local/ngix
- checking for OS
- Linux 4.18.0-513.5.1.el8_9.x86_64 x86_64
checking for C compiler … found - using GNU C compiler
- gcc version: 8.5.0 20210514 (Red Hat 8.5.0-20) (GCC)
checking for gcc -pipe switch … found
checking for -Wl,-E switch … found
checking for gcc builtin atomic operations … found
…
- make编译,将原代码转换为二进制
#检测完成后,将源码,编译为二进制文件,所谓的源码都是一个一个的用编程语言写的源文件,因此需要通过编译成为计算机可以识别的二进制文件
[root@xu nginx-1.24.0]# make
make -f objs/Makefile
make[1]: Entering directory '/root/nginx-1.24.0'
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/nginx.o \
src/core/nginx.c
...
- make install 安装软件包
#编译为二进制文件后,我们就可以直接去安装了
[root@xu nginx-1.24.0]# make install
【7】、自定义软件仓库
yum运行思路:
运行yum命令程序—->仓库配置文件—->软件包仓库
软件包仓库:
1、众多的软件包
2、仓库数据文件(仓库清单)
- 模拟在Linux不能上网的情况下去按照软件1、我们首先需要通过宿主机把软件下载好,在使用传输工具或者命令传到虚拟机中2、然后就可以在虚拟机中进行安装了
- 解压传入的压缩包,里面是一个个的rpm软件包
- 在下载之前需要让yum去识别这个软件的安装方式
1、首先看下光盘中的安装方式是什么样的
BaseOS和AppStream目录下的repodata里面的repomd存储的是下载方式的索引,在使用yum去下载时都需要在repomd里找到对应的软件下载方式后再去packages目录下去下载
repodata也就仓库清单
- [root@localhost ~]# ls /mnt/cdrom/BaseOS/repodata/
- 005f3daf06049c081565a4066404ce4ca5bb0275b8a9e5a04c725b09ac0bbb07-comps-BaseOS.x86_64.xml
- 6dcf6de7dd1089a452d5caa14fa1db8ce7cb79aad28a47a95f5aed14bd22f767-productid.gz
- 9b3a380a984ef4d552ce527b40f3415775e18955b6ca9a9c305f60cf6529f602-filelists.xml.gz
- a28f983c96f2d691c966620431244d8c4a8415ec349e31b9cce280783ec323d3-primary.xml.gz
- ab4ec8c050898edbe33646155dff8b15d16e3d29f3a13b029b2e2e6ca5c24a57-other.xml.gz
- dd3fd62a2077ecf119b6f7971aa8882a546356fef66a874bf4860f8a6d45f416-comps-BaseOS.x86_64.xml.gz
- productid
- repomd.xml
- TRANS.TBL
- [root@localhost ~]# ls /mnt/cdrom/AppStream/repodata/
- 2adc257c8b938376e8d66f70b6dd601f46111b6f46e06d610d67f4e9daab434c-primary.xml.gz
- 2c384cc97bc979264430666010a3f52aeca381fd2137abba70ab6672429ac194-filelists.xml.gz
- 45295e7b00a783d7ef66a3d6f2f5890477a61c5c465f7190a910b50d7cf222e4-modules.yaml.gz
- 468fea75becd836ab1fc45fe77d820e37ab22b18cc2a4a992f65b81833f96854-comps-AppStream.x86_64.xml
- 6dcf6de7dd1089a452d5caa14fa1db8ce7cb79aad28a47a95f5aed14bd22f767-productid.gz
- ad09469a33bac2649097cdf63bdc43d4415c6bfaffabdf6ce3da47b6fcb03596-comps-AppStream.x86_64.xml.gz
- e0bb60aac5d524ef1cf945f2a934e27a63d77238bc2b25f13c7335286bf1869c-other.xml.gz
- productid
- repomd.xml
- TRANS.TBL
2、生成repodata文件
因此我们也需要按照BaseOS和AppStream目录下的repodata生成新的repodata
使用createrepo命令去生成mplayer的repodata文件
createrepo默认是没有下载的
yum list createrepo # 查看下载createrepo所需要的包
createrepo_c # 需要createrepo_c
yum install createrepo_c -y
createrepo /opt/tools #生成了repodata文件
本篇文章涉及到的完整资源和代码请付费购买: