openEuler 软件包管理:RPM、DNF 与源码编译
前言
在 openEuler 系统中,软件包的安装、升级与卸载是日常运维的基础操作。本文围绕 RPM、DNF 与源码编译三种主流软件管理方式展开,系统讲解各自的原理、常用命令与适用场景,帮助读者根据实际环境选择最合适的部署方案。
目录
- Linux 应用程序基础
- RPM 软件包管理工具
- DNF 软件包管理器(openEuler 默认,YUM 的下一代)
- 源代码编译安装(定制化部署)
- 三种软件管理方式对比与选型
一、Linux 应用程序基础
1.1 Linux 命令与应用程序
| 对比 | Linux 命令 | Linux 应用程序 |
|---|---|---|
| 安装时机 | 系统默认安装,属于系统基础组件 | 后期安装的业务软件(Nginx、MySQL 等) |
| 运行界面 | 仅字符 CLI | 支持 CLI、GUI 图形界面 |
| 存储位置 | /bin、/sbin | /usr/bin、/usr/sbin、/usr/local/sbin |
| 调用格式 | 固定:命令字 + 选项 + 参数 | 开发者自定义,可脚本 / 图形启动 |
补充:部分程序提供命令式可执行文件,称为程序命令,属于二者交叉。安装软件包≈安装应用程序。
1.2 应用程序文件构成(遵循 FHS 标准)
| 文件类型 | 目录 | 说明 |
|---|---|---|
| 普通可执行程序 |
/usr/bin |
普通用户可执行,python3、tree |
| 管理 / 服务程序 |
/usr/sbin |
root 管理员执行,firewalld |
| 配置文件 |
/etc |
程序参数,修改后重启生效,可子目录存放 |
| 日志文件 |
/var/log |
排查故障,记录运行、错误、访问日志 |
| 参考文档 |
/usr/share/doc/ |
软件说明、更新日志 |
| man 帮助手册 |
/usr/share/man/ |
man 程序名查看帮助 |
实操查看软件包所有文件:rpm -ql 软件名
1.3 Linux 四大软件封装类型
分为二进制包(免编译)、源代码包(需要编译)
- RPM 包(*.rpm):RHEL、openEuler 使用;rpm/dnf 管理,预编译二进制
- DEB 包(*.deb):Ubuntu/Debian;apt 管理
- 源代码包(*.tar.gz/tar.bz2):原始源码,需要 gcc 编译,可以定制功能
- 自包含安装程序:自带全部依赖,跨发行版,小众软件使用
openEuler 重点学习 RPM 包、DNF、源码编译
二、RPM 软件包管理工具
添加光盘挂载点★(重启会使挂载失效,每次重启都需要重新挂载)
mkdir /media/cdrom
mount /dev/cdrom /media/cdrom/
2.1 RPM 概述
RPM(RPM Package Manager),openEuler 底层包管理,数据库:/var/lib/rpm/
- 优点:全生命周期管理、事务操作出错自动回滚、依赖提示、标准化命名
- 原生 rpm 命令不会自动解决依赖。报错依赖缺失要手动安装依赖
RPM 包命名规范
软件名-版本号-发布次数.操作系统版本.硬件架构.rpm
示例:lynx‑2.8.9‑20.oe2403.x86_64.rpm
- 软件名:lynx
- 版本号:2.8.9(主.次.修订)
- 发布次数:20,发行版打包次数
- 系统版本:oe2403 代表 openEuler24.03
- 硬件架构:x86_64;noarch代表跨架构,脚本类包
2.2 rpm 核心命令实操
格式:rpm [选项] 参数 注意:安装升级写完整 rpm 文件路径;查询、卸载写软件名
2.2.1 查询(最常用)
查询已经安装的包:rpm -q +子选项
| 命令 | 功能 |
|---|---|
|
rpm -q 软件名 |
查询软件是否安装 |
|
rpm -qa |
列出系统全部已安装包 |
|
rpm -qi 软件名 |
查看软件详细信息(版本、描述) |
|
rpm -ql 软件名 |
列出软件安装所有文件 |
|
rpm -qf 文件路径 |
反向查询该文件属于哪个 rpm 包 |
模糊搜索已安装包:rpm -qa | grep -i 关键词
查询未安装 rpm 文件:rpm -qp +子选项
参数是 rpm 完整文件路径
rpm -qpi xxx.rpm:查看未安装包详情rpm -qpl xxx.rpm:查看安装后释放哪些文件
2.2.2 安装、升级、卸载
| 选项 | 作用 |
|---|---|
|
‑ivh |
全新安装 rpm 包 |
|
‑Uvh |
升级,没安装就直接安装 |
|
‑Fvh |
仅升级已经安装过的包,未安装则放弃 |
|
‑e |
卸载软件,只写软件名 |
危险选项(生产环境禁止。仅测试) --nodeps忽略依赖;--force强制覆盖安装,会破坏系统稳定性
示例
安装本地rpm包
rpm -ivh /media/cdrom/Packages/w/wget-1.21.4-1.oe2403.x86_64.rpm
升级
rpm -Uvh xxx.rpm
卸载
rpm -e wget
rpm 缺点:遇到依赖缺失直接报错,需要手动逐个装依赖;推荐生产环境优先 DNF
三、DNF 软件包管理器(openEuler 默认,YUM 的下一代)
3.1 DNF 概述
DNF=Dandified YUM,兼容 yum 命令,底层仍然使用 RPM
核心优势:自动解决依赖、多仓库、智能镜像源、模块化版本管理、支持 aarch64 鲲鹏架构
3.1.1 DNF 工作机制
- 软件仓库 repo:软件来源;配置文件目录:/etc/yum.repos.d/*.repo
- 元数据 metadata:仓库软件包、版本、依赖信息,本地缓存/var/cache/dnf/,到期自动更新
repo 核心配置字段:
[仓库名]仓库标识- name 仓库描述
- mirrorlist 镜像列表
- baseurl 仓库地址
- gpgcheck=1 开启包签名校验
- enabled=1 启用仓库,0 禁用
- gpgkey 校验公钥
内置变量:$releasever系统版本,$basearch硬件架构
3.2 dnf 常用命令
-y 参数自动确认交互,脚本批量操作常用。
| 命令 | 功能 |
|---|---|
dnf list 软件名 |
查看软件安装 / 可安装状态 |
dnf info 软件名 |
查看软件详细信息 |
dnf search 关键词 |
按关键词搜索仓库软件 |
dnf install -y 软件名 |
安装软件,自动下载依赖 |
dnf update 软件名 |
升级指定软件;不带软件名升级全部系统包 |
dnf remove -y 软件名 |
卸载软件,检查依赖防止误删系统包 |
示例
dnf install -y tree 安装
dnf remove -y tree 卸载
dnf update -y NetworkManager 更新
注意:dnf 默认需要网络;离线场景可以配置本地光盘 repo。
四、源代码编译安装(定制化部署)
4.1 使用场景
- 需要软件的最新版本:开源软件通常先发布源代码包,二进制包(RPM/DEB)会滞后数周/数月,编译安装可快速获取最新功能和安全补丁
- 需要定制软件功能:二进制包仅包含软件的基础功能,编译安装时可通过配置选项开启/关闭特定功能(如Nginx开启SSL、HTTP/2模块),满足企业个性化需求
- 需要适配特殊系统环境:openEuler 24.03广泛应用于鲲鹏服务器、云原生环境等特殊场景,部分二进制包无法适配,编译安装可根据硬件架构优化编译参数,提升程序性能
- 需要修改软件源代码:企业可根据自身需求修改开源软件的源代码,添加自定义功能,修改后需重新编译安装才能生效
- 适配openEuler专属架构:针对openEuler 24.03支持的鲲鹏(aarch64)等架构,部分软件无官方二进制包,编译安装是最优选择
编译安装的前提:安装开发环境
dnf install -y gcc make
dnf install -y pcre-devel zlib-devel openssl-devel #通用开发库
dnf install -y gcc-aarch64-linux-gnu make-aarch64-linux-gnu #鲲鹏架构(aarch64)额外安装架构适配工具
4.2 源码编译安装的标准流程(四步核心,通用所有开源软件)
源码包一般*.tar.gz,四步:解包 → ./configure 配置 → make 编译 → make install 安装
步骤 1:下载并解包源码(Tar 解包)
优先从软件官网下载源码包,保证包的完整性 ,Nginx官方下载地址: http://nginx.org/download/
[root@localhost ~]# wget http://nginx.org/download/nginx‑1.26.2.tar.gz #下载Nginx 1.26.2源码包
[root@localhost ~]# tar -zxvf nginx‑1.26.2.tar.gz #解包源码包
步骤 2:配置编译参数(./configure【核心定制步骤】) 生成 Makefile 编译脚本,指定安装目录、开启模块。 --prefix=指定安装目录(非常重要,方便后期卸载)bash
[root@localhost ~]# cd nginx‑1.26.2 #进入源码目录
[root@localhost nginx-1.26.2]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module #执行./configure 配置,指定核心参数
参数解析:
--prefix=/usr/local/nginx:指定 Nginx的安装目录为/usr/local/nginx,所有文件都会安装到该目录,便于管理和卸载,符合openEuler的文件目录规范
--with-http_ssl_module:启用 SSL 模块,支持HTTPS 协议,需提前安装 openssl-devel,openEuler 24.03的openssl-devel为3.0版本,完美兼容Nginx
--with-http_v2_module:启用HTTP/2模块,提升Web 服务的传输速度,需提前安装pcre-devel和 zlib-devel
报错
xxx not found:代表缺少 devel 开发库,dnf 安装缺失库,重新 configure。
步骤 3:make 编译,调用 gcc 把源码转为二进制
[root@localhost nginx-1.26.2]# make #单线程编译
[root@localhost nginx-1.26.2]# make -j 4 #多核并行编译,加速
步骤 4:make install 安装
[root@localhost nginx-1.26.2]# make install
步骤 5:验证安装并启动服务
安装完成后,所有Nginx的文件都在/usr/local/nginx目录中,核心目录遵循 openEuler 的文件规范:
sbin/:可执行文件目录,nginx为核心启动程序
conf/:配置文件目录,nginx.conf为核心配置文件
logs/:日志文件目录,error.log和access.log为核心日志
#进入 Nginx的sbin目录,执行nginx启动程序
[root@localhost nginx-1.26.2]# cd /usr/local/nginx/sbin #进入sbin目录
[root@localhost sbin]# ./nginx #启动nginx,无输出表示启动成功
#验证Nginx是否启动
使用ps -ef | grep nginx 查看Nginx进程,若存在master process(主进程)和worker process(工作进程),表示启动成功
[root@localhost sbin]# ps -ef | grep nginx #显示进程架构信息
4.3 源码软件卸载
4.3.1 核心优势
- 定制化:可根据需求开启/关闭功能模块,优化软件性能,适配openEuler 24.03的系统特性
- 最新版本:快速获取软件的最新功能和安全补丁,弥补openEuler官方仓库包版本滞后的问题
- 独立目录:所有文件都在指定的安装目录,便于管理和迁移,符合openEuler的文件管理规范
- 跨架构兼容:可在openEuler 24.03的x86_64、aarch64等架构上编译,适配不同硬件环境
- 深度优化:可针对openEuler的系统内核和硬件架构做编译优化,提升程序运行效率
4.3.2 卸载方法
源码编译没有卸载命令。直接删除 prefix 指定的安装目录卸载
[root@localhost ~]# rm -rf /usr/local/nginx
优点:高度定制;缺点:不自动升级,系统包管理器无法识别这套软件。
五、三种软件管理方式对比与选型
| 方式 | 依赖处理 | 定制能力 | 适用场景 |
|---|---|---|---|
| rpm 命令 | 不会自动解决依赖 | 低,只能使用打包内置功能 | 离线少量包,无网络环境,本地 rpm 文件 |
| dnf | 自动解析下载依赖 | 低,仓库内置版本 | 日常运维,标准化生产环境(优先) |
| 源码编译 | 需要手动提前安装开发库 | 高,可以开关模块、优化架构 | 定制功能、要最新版本、适配鲲鹏特殊硬件 |
选型原则
- 日常标准化部署:优先dnf(openEuler 默认)
- 离线隔离无外网服务器:rpm 本地安装(准备全部依赖 rpm)
- 需要自定义模块、最新版本、鲲鹏深度适配:源代码编译安装
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)