前言

在 openEuler 系统中,软件包的安装、升级与卸载是日常运维的基础操作。本文围绕 RPM、DNF 与源码编译三种主流软件管理方式展开,系统讲解各自的原理、常用命令与适用场景,帮助读者根据实际环境选择最合适的部署方案。

目录

  1. Linux 应用程序基础
  2. RPM 软件包管理工具
  3. DNF 软件包管理器(openEuler 默认,YUM 的下一代)
  4. 源代码编译安装(定制化部署)
  5. 三种软件管理方式对比与选型

一、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 四大软件封装类型

分为二进制包(免编译)、源代码包(需要编译)

  1. RPM 包(*.rpm):RHEL、openEuler 使用;rpm/dnf 管理,预编译二进制
  2. DEB 包(*.deb):Ubuntu/Debian;apt 管理
  3. 源代码包(*.tar.gz/tar.bz2):原始源码,需要 gcc 编译,可以定制功能
  4. 自包含安装程序:自带全部依赖,跨发行版,小众软件使用

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

  1. 软件名:lynx
  2. 版本号:2.8.9(主.次.修订)
  3. 发布次数:20,发行版打包次数
  4. 系统版本:oe2403 代表 openEuler24.03
  5. 硬件架构: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 工作机制
  1. 软件仓库 repo:软件来源;配置文件目录:/etc/yum.repos.d/*.repo
  2. 元数据 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 使用场景

  1. 需要软件的最新版本:开源软件通常先发布源代码包,二进制包(RPM/DEB)会滞后数周/数月,编译安装可快速获取最新功能和安全补丁
  2. 需要定制软件功能:二进制包仅包含软件的基础功能,编译安装时可通过配置选项开启/关闭特定功能(如Nginx开启SSL、HTTP/2模块),满足企业个性化需求
  3. 需要适配特殊系统环境:openEuler 24.03广泛应用于鲲鹏服务器、云原生环境等特殊场景,部分二进制包无法适配,编译安装可根据硬件架构优化编译参数,提升程序性能
  4. 需要修改软件源代码:企业可根据自身需求修改开源软件的源代码,添加自定义功能,修改后需重新编译安装才能生效
  5. 适配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 自动解析下载依赖 低,仓库内置版本 日常运维,标准化生产环境(优先)
源码编译 需要手动提前安装开发库 高,可以开关模块、优化架构 定制功能、要最新版本、适配鲲鹏特殊硬件

选型原则

  1. 日常标准化部署:优先dnf(openEuler 默认)
  2. 离线隔离无外网服务器:rpm 本地安装(准备全部依赖 rpm)
  3. 需要自定义模块、最新版本、鲲鹏深度适配:源代码编译安装
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐