从零开始:麒麟系统包管理与编译安装完全指南
本文详细介绍了麒麟操作系统(KylinOS)下的软件安装方法,涵盖apt、yum/dnf、rpm/dpkg等包管理工具及源码编译安装。针对麒麟桌面版(基于Ubuntu/Debian)推荐使用apt,服务器版(基于CentOS/RHEL)推荐使用dnf/yum,并给出了各工具的核心参数和典型场景。文章还深入解析了底层工具rpm/dpkg的使用技巧,以及源码编译安装的三步流程(configure-ma
一篇博客带你搞懂
apt、yum、dnf、rpm以及源码编译,从此软件安装不求人。
前言
作为国产操作系统的代表,麒麟软件(KylinOS)已经广泛应用于政企、金融、教育等领域。它分为桌面版(基于 Ubuntu/Debian)和服务器版(基于 CentOS/RHEL),因此包管理工具有两套体系。很多新手在安装软件时经常混淆 apt 和 yum,遇到编译安装更是满头问号。
本文将从 零基础 出发,用 大量实际例子 帮你理清:
-
麒麟系统下到底该用
apt还是yum/dnf -
每个包管理工具的核心参数及典型使用场景
-
rpm底层命令的妙用 -
源码编译安装的完整流程
-
如何让其他服务(比如 Ansible)使用编译安装的 Python
读完本文,你将能自信地处理麒麟系统上 90% 的软件安装问题。
一、麒麟系统的包管理体系:先看分支
麒麟系统有两大家族:
| 系统分支 | 基于 | 包格式 | 高级包管理器 | 底层包管理器 |
|---|---|---|---|---|
| 银河麒麟桌面版 | Ubuntu/Debian | .deb |
apt |
dpkg |
| 银河麒麟服务器版 (V10 SP0及更早) | CentOS 7 | .rpm |
yum |
rpm |
| 银河麒麟服务器版 (V10 SP1+) | RHEL 8+ | .rpm |
dnf (兼容 yum 命令) |
rpm |
一句话原则:
-
桌面版 → 用
apt -
服务器版 → 用
dnf(或yum) -
无论哪个版本,
rpm和dpkg是底层,不自动解决依赖,建议优先用高级工具。
二、高级包管理器:apt vs yum/dnf
2.1 apt 命令详解(适用于麒麟桌面版)
apt 是 Debian 系的前端工具,语法简洁,带颜色输出和进度条。
常用命令及实际例子
| 操作 | 命令 | 说明 |
|---|---|---|
| 更新软件源列表 | sudo apt update |
必须先执行,否则不知道有新软件 |
| 安装软件 | sudo apt install nginx |
自动解决依赖 |
| 安装时自动确认 | sudo apt install -y nginx |
跳过 [Y/n] 提示 |
| 卸载(保留配置) | sudo apt remove nginx |
配置文件还在 |
| 彻底卸载(删配置) | sudo apt purge nginx |
配置文件也删除 |
| 搜索软件包 | apt search nginx |
按名称和描述搜索 |
| 查看包详细信息 | apt show nginx |
版本、依赖、大小、描述 |
| 列出已安装包 | apt list --installed |
可配合 grep 筛选 |
| 升级所有包 | sudo apt upgrade |
基于已更新的源列表 |
| 删除无用的依赖 | sudo apt autoremove |
清理孤儿包 |
| 仅下载不安装 | apt download nginx |
下载 .deb 到当前目录 |
| 修复破损依赖 | sudo apt --fix-broken install |
安装中断时常用 |
实战场景1:安装 Python 3 并确保 pip 可用
sudo apt update
sudo apt install python3 python3-pip -y
实战场景2:彻底卸载 Apache 并清理残留
sudo apt purge apache2
sudo apt autoremove
实战场景3:查看 nginx 有哪些文件会被安装(不实际安装)
apt download nginx
dpkg --contents nginx*.deb # 稍后会讲 dpkg
2.2 yum / dnf 命令详解(适用于麒麟服务器版)
yum 和 dnf 参数高度相似。下面以 dnf 为例(yum 同样适用)。
常用命令及实际例子
| 操作 | 命令 | 说明 |
|---|---|---|
| 更新源缓存 | sudo dnf makecache |
类似 apt update |
| 安装软件 | sudo dnf install nginx |
自动解决依赖 |
| 安装时自动确认 | sudo dnf install -y nginx |
跳过交互 |
| 卸载软件 | sudo dnf remove nginx |
删除软件及依赖 |
| 搜索软件 | dnf search nginx |
搜索名称和摘要 |
| 查看包信息 | dnf info nginx |
版本、仓库、大小 |
| 列出已安装包 | dnf list installed |
配合 grep 过滤 |
| 升级所有包 | sudo dnf update |
升级系统全部软件 |
| 仅下载不安装 | dnf download nginx |
需要先安装 dnf-plugins-core |
| 查找哪个包提供某个文件 | dnf provides /usr/sbin/nginx |
解决“命令找不到” |
| 查看事务历史 | dnf history |
可回滚 |
| 清理缓存 | sudo dnf clean all |
释放磁盘空间 |
实战场景1:安装开发工具组
sudo dnf groupinstall "Development Tools" -y
实战场景2:查找 htpasswd 命令属于哪个包
dnf provides /usr/bin/htpasswd
# 输出:httpd-tools-2.4.6-... 说明需要安装 httpd-tools
实战场景3:回滚最近一次安装(假设历史 ID 为 12)
sudo dnf history undo 12
2.3 yum 与 dnf 的区别
-
性能:
dnf依赖解析更快,内存占用更低。 -
代码:
yum是 Python 2,dnf是 Python 3 + C 库。 -
行为:
dnf默认不保护正在运行的内核,升级内核后建议立即重启。 -
兼容:在 CentOS/RHEL 8+ 上,
yum命令只是dnf的别名。
一句话:新系统用 dnf,旧系统用 yum,命令基本通用。
三、底层工具:rpm 和 dpkg
高级工具(apt/dnf)负责解决依赖,底层工具负责直接操作单个包文件。当你只有 .rpm 或 .deb 文件,或者需要查询、验证、提取文件时,底层工具就派上用场了。
3.1 rpm 命令详解(服务器版)
安装、升级、卸载
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 安装 | rpm -ivh package.rpm |
-i 安装,-v 显示详情,-h 进度条 |
| 升级 | rpm -Uvh package.rpm |
如果未安装则安装,已安装则升级 |
| 卸载 | rpm -e nginx |
需要精确的包名(不带版本号) |
| 忽略依赖强制安装 | rpm -ivh --nodeps package.rpm |
危险,可能导致软件不可用 |
查询操作(最常用)
| 操作 | 命令 | 说明 |
|---|---|---|
| 查询已安装包信息 | rpm -qi nginx |
版本、架构、安装日期 |
| 列出包安装的文件 | rpm -ql nginx |
查看软件到底装了哪些文件 |
| 查询文件属于哪个包 | rpm -qf /etc/nginx/nginx.conf |
反向查找 |
| 列出所有已安装包 | rpm -qa |
常配合 grep |
| 查看未安装包的信息 | rpm -qip package.rpm |
-p 表示 package file |
| 查看未安装包会释放哪些文件 | rpm -qlp package.rpm |
安装前预览 |
验证与校验
| 操作 | 命令 | 说明 |
|---|---|---|
| 验证包完整性 | rpm -V nginx |
比较文件 MD5、权限等是否被改 |
| 验证所有包 | rpm -Va |
找出被篡改的文件 |
| 检查包的 GPG 签名 | rpm -K package.rpm |
验证来源合法性 |
实战场景1:从网上下载并安装一个本地 .rpm 包
wget https://example.com/nginx.rpm
rpm -ivh nginx.rpm
# 如果报依赖缺失,需要用 yum localinstall 代替
实战场景2:找出哪个包提供了 /usr/bin/python3
rpm -qf /usr/bin/python3
实战场景3:验证所有包,找出 MD5 校验失败的文件(可能被篡改)
rpm -Va | grep '^..5'
实战场景4:重建损坏的 rpm 数据库
sudo rm -f /var/lib/rpm/__db.*
sudo rpm --rebuilddb
3.2 dpkg 命令(桌面版,简要)
与 rpm 对应,常用命令:
| 操作 | 命令 |
|---|---|
安装本地 .deb |
sudo dpkg -i package.deb |
| 卸载 | sudo dpkg -r package |
| 列出已安装包 | dpkg -l |
| 查询包安装的文件 | dpkg -L nginx |
| 查询文件属于哪个包 | dpkg -S /etc/nginx/nginx.conf |
注意:dpkg 同样不处理依赖,安装时若提示缺依赖,请执行 sudo apt --fix-broken install。
四、源码编译安装:彻底掌握软件定制
当官方仓库版本过旧,或者你需要开启某个特殊编译选项时,源码编译是终极方案。
4.1 编译安装的三步曲
./configure # 检测环境,生成 Makefile
make # 编译(根据 Makefile 生成二进制)
make install # 安装到指定目录
每一步都可能带有参数,下面详细拆解。
第一步:./configure 常用参数
| 参数 | 作用 | 例子 |
|---|---|---|
--prefix=PATH |
指定安装根目录 | --prefix=/opt/python311 |
--exec-prefix=PATH |
指定可执行文件目录 | 一般不用单独设 |
--enable-FEATURE |
启用某个功能 | --enable-optimizations(Python) |
--disable-FEATURE |
禁用某个功能 | --disable-ipv6 |
--with-PACKAGE |
包含某个外部库的支持 | --with-ssl(Nginx) |
--without-PACKAGE |
不包含某个库 | --without-http_gzip_module |
CFLAGS="-O2" |
传递给 C 编译器的优化标志 | 提升性能 |
LDFLAGS="-L/path" |
链接器搜索库的路径 | 指定非标准位置的库 |
第二步:make 常用选项
-
make -j N:并行编译,N为核心数(如make -j 4) -
make clean:清理编译中间文件 -
make distclean:彻底清理,包括 Makefile
第三步:make install
通常需要 sudo,因为默认安装到 /usr/local。
4.2 实战:编译安装 Python 3.11 到 /opt/python311
需求:
-
自定义路径
-
启用性能优化
-
生成共享库(方便其他程序调用)
-
自带 pip
-
不使用 tkinter
步骤:
# 1. 安装编译依赖(麒麟服务器版)
sudo dnf groupinstall "Development Tools" -y
sudo dnf install openssl-devel bzip2-devel libffi-devel readline-devel sqlite-devel -y
# 2. 下载源码
wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tar.xz
tar -xf Python-3.11.9.tar.xz
cd Python-3.11.9
# 3. 配置(核心参数)
./configure --prefix=/opt/python311 \
--enable-optimizations \
--enable-shared \
--with-ensurepip=install \
--without-tk
# 4. 编译(使用全部 CPU 核心)
make -j $(nproc)
# 5. 安装
sudo make install
安装后,Python 在 /opt/python311/bin/python3.11,pip 也在同目录。
4.3 如何让命令行默认使用编译安装的 Python?
方法一:修改 PATH 环境变量(推荐)
echo 'export PATH=/opt/python311/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
python3 --version # 应显示 3.11.9
方法二:创建软链接
sudo ln -s /opt/python311/bin/python3.11 /usr/local/bin/python3
# 注意:/usr/local/bin 优先级高于 /usr/bin
方法三:使用 update-alternatives(Debian/桌面版)
sudo update-alternatives --install /usr/bin/python3 python3 /opt/python311/bin/python3.11 1
sudo update-alternatives --config python3
4.4 如何让其他服务(如 Ansible)使用编译安装的 Python?
Ansible 控制节点需要 Python 解释器。默认它会找 PATH 中的第一个 python3。我们可以强制指定:
方式1:命令行参数
ansible-playbook playbook.yml --python /opt/python311/bin/python3
方式2:环境变量
export ANSIBLE_PYTHON_INTERPRETER=/opt/python311/bin/python3
ansible-playbook playbook.yml
方式3:写入 ansible.cfg
[defaults]
interpreter_python = /opt/python311/bin/python3
方式4:在 inventory 中针对主机指定
web1 ansible_python_interpreter=/opt/python311/bin/python3
小技巧:如果你已经把 /opt/python311/bin 添加到了 PATH 的前面,那么 Ansible 会自动使用它,无需额外配置。
五、如何确定编译时需要哪些参数?(关键)
很多新手卡在这一步:我怎么知道这个软件需要哪些 --with-xxx 或 --enable-xxx?
答案很简单:需求驱动 + 看帮助 + 试错。
5.1 三步法确定参数
第一步:明确你的需求
问自己几个问题:
-
我要把软件装在哪里?(决定
--prefix) -
我需要什么特殊功能?例如 HTTPS →
--with-ssl,性能优化 →--enable-optimizations -
我不需要什么功能?例如不需要 GUI →
--without-gui
第二步:查看官方文档和 ./configure --help
./configure --help | less
输出会列出所有可用参数,并附简短说明。例如 Nginx 的 help 中会有:
--with-http_ssl_module enable ngx_http_ssl_module
--without-http_gzip_module disable ngx_http_gzip_module
第三步:试错迭代
运行 ./configure,如果报错缺少依赖,根据提示安装对应的 -devel 包或添加 --with-xxx 参数。
实战示例:编译 Nginx 时报错
./configure: error: SSL modules require the OpenSSL library.
解决办法:
-
安装
openssl-devel:sudo dnf install openssl-devel -
或指定自定义 OpenSSL 路径:
--with-openssl=/opt/openssl
5.2 常见软件的典型参数(可作模板)
| 软件 | 典型配置参数 |
|---|---|
| Python | --prefix=/opt/python3 --enable-shared --enable-optimizations --with-ensurepip=install |
| Nginx | --prefix=/etc/nginx --with-http_ssl_module --with-http_v2_module |
| Redis | --prefix=/opt/redis(Redis 使用 make PREFIX=/opt/redis install) |
| MySQL | -DCMAKE_INSTALL_PREFIX=/opt/mysql -DWITH_SSL=system(MySQL 用 CMake) |
5.3 如果完全没有思路,就只指定 --prefix
很多软件只需指定安装路径就能编译成功。例如:
./configure --prefix=/opt/myapp
make && make install
运行时如果缺少功能,再回头添加参数重新编译。不要追求一步到位,迭代是正常流程。
六、总结与最佳实践
-
首选高级包管理器
-
桌面版:
apt -
服务器版:
dnf(或yum) -
除非需要特定版本或特殊编译选项,否则不要轻易编译安装。
-
-
底层工具用于查询和急救
-
rpm -qf/dpkg -S:查文件来源 -
rpm -V:验证文件完整性 -
rpm --rebuilddb:修复数据库
-
-
编译安装四部曲
./configure --prefix=/your/path [其他参数] make -j$(nproc) sudo make install # 最后记得把 bin 目录加入 PATH -
让其他服务使用自编译软件
-
优先修改
PATH环境变量 -
或在服务配置中指定绝对路径(如 Ansible 的
interpreter_python)
-
-
不要怕试错
编译报错是常态,根据错误信息搜索或安装依赖,总能解决。
麒麟系统融合了 Debian 和 Red Hat 两大流派,初看容易混淆,但只要记住 “桌面用 apt,服务器用 dnf” 这个口诀,再配合本文给出的实际命令例子,你就能轻松应对日常软件管理任务。
编译安装虽然比包管理复杂,但它给了你最大的自由度。当你需要为生产环境定制高性能软件时,本文的编译流程和参数决策方法将成为你的利器。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)