暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基于CTyunOS的软件包管理总结

IT那活儿 2023-04-10
7204

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!




前  言



上篇文章跟大家介绍了CTyunOS的中间件容器镜像》,本文章将讲解软件管理的三种方式:
  • RPM安装;
  • DNF安装;
  • 源码安装。

1. RPM概述

RPM是 一个默认的开源和最流行的包管理程序,用于基于Red Hat系统一样。该工具允许系统管理员和用户安装, 更新,卸载,查询, 验证,并在Unix/linux 操作系统管理系统软件包。该RPM原名,rpm的文件,包括由包需要编译的软件程序和库。该实用程序仅使用于该建在.rpm格式的软件包

2. DNF概述

因为yum工具性能差、内存占用过多、依赖解析速度变慢等问题长期得不到解决,同时yum工具过度依赖yum源文件,若是源文件出现问题,yum相关操作可能会失败,针对这种情况,DNF工具应运而生,DNF工具克服了YUM软件管理工具的一些瓶颈,提升了用户体验、内存占用、依赖分析及运行速度等方面的内容

3. 源码安装

源码包指的是开发编写好的程序源代码,但并没有将其编译为一个能正常使用的工具。




YUM与DNF区别




DNF(DANDIFIED YUM)

YUM(YELLOWDOG UPDATER MODIFIED)

DNF 使用 libsolv 来解析依赖关系,由 SUSE 开发和维护

YUM 使用公开的 API 来解析依赖关系

API 有完整的文档

API 没有完整的文档

由 C、C++、Python 编写的

只用 Python 编写

DNF 目前在 Fedora、RHEL 8、CentOS 8、OEL 8 和 Mageia 6/7 中使用

YUM 目前在 RHEL 6/7、CentOS 6/7、OEL 6/7 中使用

DNF 支持各种扩展

Yum 只支持基于 Python 的扩展

API 有良好的文档,因此很容易创建新的功能

因为 API 没有正确的文档化,所以创建新功能非常困难

DNF 在同步存储库的元数据时,使用的内存较少

在同步存储库的元数据时,YUM 使用了过多的内存

DNF 使用满足性算法来解决依赖关系解析(它是用字典的方法来存储和检索包和依赖信息)

由于使用公开 API 的原因,Yum 依赖性解析变得迟钝

DNF 更新:在 DNF 更新过程中,如果包中包含不相关的依赖,则不会更新

YUM 将在没有验证的情况下更新软件包

如果启用的存储库没有响应,DNF 将跳过它,并继续使用可用的存储库处理事务

如果有存储库不可用,YUM 会立即停止

安装包的依赖关系不更新

Yum 为这种行为提供了一个选项

清理删除的包:当删除一个包时,DNF 会自动删除任何没有被用户明确安装的依赖包

Yum 不会这样做

存储库缓存更新计划:默认情况下,系统启动后 10 分钟后,DNF 每小时会对配置的存储库检查一次更新。这个动作由系统定时器单元 dnf-makecache.timer 控制

Yum 也会这样做

内核包不受 DNF 保护。不像 Yum,你可以删除所有的内核包,包括运行中的内核包

Yum 不允许你删除运行中的内核

libsolv:用于解包和读取资源库。 

hawkey: 为 libsolv 提供简化的 C 和 Python API 库。

librepo: 提供 C 和 Python(类似 libcURL)API 的库,用于下载 Linux 存储库元数据和软件包。

libcomps: 是 yum.comps 库的替代品。它是用纯 C 语言编写的库,有 Python 2 和 Python 3 的绑定。

Yum 不使用单独的库来执行这些功能





实验环境



1. 环境准备

1)CTyunOS虚拟机
  • 操作系统:CTyunOS
  • 主机名:ctyunosTest
  • 操作用户:root
2)YUM服务器
  • 操作系统:CentOS7.8
  • 主机名:web3
  • 操作用户:root

2. 搭建YUM服务器

1)上传CTyunOS YUM仓库iso镜像
2)创建挂载目录
mkdir -p /data/iso
3)挂载iso镜像
mount -o loop ctyunos-2.0.1-220329-everything-x86_64-dvd.iso /data/iso/
4)下载httpd,创建软连接
yum install -y httpd
ln -s data/iso var/www/html/iso

5)修改ctyunosTest的repo文件
cp /etc/yum.repos.d/ctyunos.repo{,.bak}
vi ctyunos.repo
[iso]
name=iso
baseurl=http://10.0.0.9/iso
enabled=1
gpgcheck=0

6)测试YUM仓库
yum list




软件管理



1. RPM管理

1.1 安装功能

1)使用rpm命令安装软件包,需要了解如下参数

  • -i #安装;
  • -v #详细信息;
  • -h #安装进度;
  • --test #测试是否能够安装成功;
  • --force #强制重新安装;
  • --nodeps #忽略依赖关系。
2)先上传一个nginx的RPM包
3)安装nginx RPM包(失败,缺少依赖关系
rpm -ivh nginx-1.20.2-1.el7.ngx.x86_64.rpm
1.2 查询功能

1)使用rpm命令查询已安装好的rpm包, 需要了解如下参数

  • rpm -q #查看指定软件包是否安装;
  • rpm -qa #查看系统中已安装的所有RPM软件包列表;
  • rpm -qi #查看已安装软件的详细信息;
  • rpm -ql #查询已安装软件包所安装的目录、文件列表;
  • rpm -qc #查询已安装软件包的配置文件;
  • rpm -qd #查询已安装软件包的帮助文档;
  • rpm -qf #查询文件或目录属于哪个RPM软件。

2)查询未安装的软件包信息

  • rpm -qip #查询未安装的rpm包详细信息;
  • rpm -qlp #查询未安装的软件包会产生哪些文件。
1.3 升级功能
  • rpm -U #不需要老版本安装包,直接安装最新的;
  • rpm -F #必须要有老版本安装包,才能更新。
1.4 卸载功能
rpm -e 文件 #卸载包时需要先把依赖的包卸载掉,如果依赖的包是系统所必须的,那就不能卸载这个包,否则会造成系统崩溃

2. DNF管理

2.1 搜索软件包
可以使用rpm包名称、缩写或者描述搜索需要的RPM包。
dnf search httpd
2.2 列出软件包清单
1)列出所有软件包
dnf list all
2)列出特定的软件包
dnf list |grep nginx
dnf list nginx

2.3 显示软件包信息
dnf info nginx
2.4 安装RPM包
dnf install -y httpd
2.5 删除安装包
dnf remove httpd
2.6 检查和更新
1)显示当前系统可用的更新
dnf check-update
2)更新已安装的RPM
dnf update httpd
2.7 DNF历史事件
1)查看dnf历史命令
dnf history
2)查询历史执行dnf命令ID详细信息,N是历史操作的事务编号
dnf history info 3
3)撤销历史执行过的dnf命令
如果历史执行的是安装命令,撤销则是指卸载。撤销之前安装的httpd。
dnf history undo 5
4)回滚历史执行过的dnf命令
ID5为安装httpd。
dnf history redo 5

3. 源码包管理

3.1 源码包编译为二进制可执行文件步骤
  • 1)下载源码安装包文件;
  • 2)tar解包(解压并释放源代码包到指定目录);
  • 3)./confgure配置(设置安装目录、安装模块等选项、生成makefile);
  • 4)make编译(将makefile生成可执行的二进制文件);
  • 5)make install安装(复制二进制文件到系统,配置应用环境)。
3.2 编译安装Nginx示例
1)上传Nginx tar包,解压tar包
tar xf nginx-1.20.2.tar.gz
2)配置安装目录
./configure --prefix=/usr/local/nginx
3)编译安装
make && make install
4)查看安装
ls /usr/local/

总 结:

1. RPM包下载之后可以直接安装,缺点是不能自己解决安装包依赖问题(不推荐生产使用)。
2. DNF能够通过互联网下载 .rpm 包并且安装,并可以自动处理依赖性关系,无须繁琐地一次次下载、安装。

3. 源码包可以自行修改源代码,定制需要的相关功能,且新版软件优先更新源码。缺点是相对YUM或DNF安装会复杂很多,标准化实施困难,自动化就无法落地。


END


本文作者:李俞松(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论