news 2026/5/20 23:56:51

麒麟系统离线安装PostgreSQL?手把手教你用dnf和repotrack搞定所有依赖包

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
麒麟系统离线安装PostgreSQL?手把手教你用dnf和repotrack搞定所有依赖包

麒麟系统离线部署PostgreSQL全攻略:从依赖包下载到本地仓库构建

在政企级IT基础设施中,麒麟操作系统因其安全可控的特性成为关键业务系统的首选平台。当这些系统运行在物理隔离的内网环境时,如何解决软件依赖的"最后一公里"问题,成为每位运维工程师必须掌握的生存技能。本文将以PostgreSQL数据库部署为案例,深度解析两种主流离线依赖解决方案的技术细节与实战技巧。

1. 离线环境准备与依赖分析

麒麟系统的安全加固机制在提供防护的同时,也带来了软件管理的特殊挑战。Kylin-Server-V10-SP3版本默认搭载的DNF包管理器虽然兼容YUM仓库格式,但在离线场景下需要特别注意基础环境的一致性。

通过rpm -qa | grep postgresql检查系统预装组件时,可能会发现某些基础依赖如readline、zlib等已存在,但开发包往往缺失。这正是离线环境最典型的依赖陷阱——看似相同的包名可能缺少-devel后缀的开发文件,导致后续编译失败。

建议在联网环境提前生成完整依赖树:

dnf repoquery --requires --resolve postgresql-server | sort -u

对于ARM64架构的麒麟系统,还需特别注意:

  • 第三方仓库的架构标识(aarch64/arm64)
  • OpenSSL等基础库的版本兼容性
  • 系统默认Python版本与psycopg2适配问题

2. 依赖包获取的双刃剑:DNF与repotrack对比

2.1 精准下载模式(dnf --downloadonly)

适用于已知部分依赖缺失的场景,典型操作流程:

mkdir -p /opt/pg_deps/partial dnf install --downloadonly --destdir=/opt/pg_deps/partial \ postgresql-server \ postgresql-contrib \ postgresql-devel

优势

  • 只下载指定包及其直接依赖
  • 节省存储空间(较repotrack减少40%-60%)
  • 适合小规模增量部署

缺陷

  • 可能遗漏间接依赖
  • 需要人工确认基础环境已有组件

2.2 全量下载模式(repotrack)

麒麟系统内置的repotrack工具能递归获取所有关联包,确保依赖完整性:

repotrack -a aarch64 -p /opt/pg_deps/full \ postgresql-server \ libicu \ libxslt

关键参数说明:

  • -a指定架构(x86_64/aarch64)
  • -p设置下载目录
  • 可追加--disableexcludes忽略特殊排除规则

典型问题解决方案: 当遇到"Error: No matching packages"时:

  1. 确认仓库配置:dnf repolist all
  2. 检查包名拼写:dnf search all <keyword>
  3. 尝试添加EPEL等额外仓库

3. 构建高可用本地仓库

获得RPM包后,需要将其转化为可被DNF识别的仓库格式。以下是经过生产验证的最佳实践:

3.1 仓库目录结构标准化

/opt/local_repo/ ├── postgresql/ │ ├── aarch64/ │ │ ├── packages/ │ │ └── repodata/ │ └── noarch/ └── common_deps/ └── aarch64/

3.2 使用createrepo_c增强兼容性

相比老旧的createrepo,createrepo_c提供更快的元数据生成:

dnf install createrepo_c cd /opt/pg_deps/full createrepo_c --database --workers=4 .

高级技巧

  • --update增量更新时使用
  • --recycle-pkglist重用现有文件列表
  • --xz采用更高压缩比

3.3 多仓库优先级配置

/etc/yum.repos.d/local.repo示例:

[local-postgres] name=PostgreSQL Local Repo baseurl=file:///opt/local_repo/postgresql/aarch64 enabled=1 gpgcheck=0 priority=1 [local-base] name=Base Dependencies baseurl=file:///opt/local_repo/common_deps/aarch64 enabled=1 priority=5

优先级数值越小优先级越高,可有效解决依赖冲突。

4. 安装验证与故障排除

完成仓库配置后,通过dnf --enablerepo=local-postgres install postgresql-server进行安装。建议分阶段验证:

安装阶段检查

  • 使用-v参数显示详细安装过程
  • 观察是否有"Downloading"字样出现(表明仍在尝试联网)
  • 检查/var/log/dnf.log中的错误信息

运行时验证

sudo -u postgres psql -c "SELECT version()" sudo systemctl start postgresql journalctl -xe --unit postgresql

常见故障处理

故障现象可能原因解决方案
缺少libicu未下载语言包追加libicu到repotrack列表
服务启动失败SELinux限制执行restorecon -Rv /var/lib/pgsql
连接被拒绝未初始化运行postgresql-setup --initdb

对于需要编译扩展的场景,建议预先下载这些开发工具:

repotrack -a aarch64 -p /opt/build_deps \ gcc \ make \ cmake \ postgresql-devel

5. 进阶:离线环境下的版本升级

离线环境的版本迭代需要特别谨慎。推荐采用以下流程:

  1. 在新环境中测试仓库迁移
  2. 使用dnf history list查看当前事务
  3. 通过dnf downgrade回滚问题更新
  4. 保留旧版本仓库作为应急回退

创建版本快照的实用命令:

rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" | sort > pg_packages.list

在实际的政务云项目中,我们曾通过这种离线部署方案,在完全隔离的环境中成功部署了PostgreSQL 14集群,并实现了跨安全域的同步更新。关键点在于建立完善的依赖包审核流程和版本控制机制。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 23:56:25

GraphRAG vs 传统RAG:知识图谱增强检索的工程实践

RAG已经是标配了&#xff0c;但如果你的知识库中有大量相互关联的概念、实体和关系&#xff0c;传统的向量检索可能正在悄悄地丢掉很多重要信息。GraphRAG&#xff0c;或者更准确地说&#xff0c;基于知识图谱的检索增强&#xff0c;正在成为下一个值得认真对待的技术方向。 本…

作者头像 李华
网站建设 2026/5/20 23:54:54

VR消防安全体验屋|沉浸式科技助力消防安全科普

随着城市化进程不断加快&#xff0c;公共安全问题日益受到社会各界的关注。其中&#xff0c;消防安全作为关系到生命与财产安全的重要领域&#xff0c;一直是安全教育中的重点内容。然而&#xff0c;传统的消防安全宣传大多停留在文字讲解、宣传展板或简单演示层面&#xff0c;…

作者头像 李华
网站建设 2026/5/20 23:50:40

实测鹅来面AI:拯救简历自我介绍“流水账”,让HR30秒记住你

一份简历的成败&#xff0c;往往从自我介绍开始。作为简历的“门面”&#xff0c;自我介绍是HR第一眼看到的内容&#xff0c;也是决定你能否通过初筛的关键——据职场招聘数据显示&#xff0c;HR查看一份简历的平均时间仅30秒&#xff0c;其中自我介绍占比近40%&#xff0c;若表…

作者头像 李华
网站建设 2026/5/20 23:50:21

Kubernetes 1.28.2 离线集群搭建 + SpringBoot 项目部署实战教程

文档简介 本文基于 CentOS7 纯离线无外网环境&#xff0c;完整讲解 Kubernetes v1.28.2 集群从零搭建流程&#xff0c;采用 containerd 作为容器运行时、Flannel 作为网络插件&#xff0c;最后完成 JDK8 版本 SpringBoot 后端项目离线部署&#xff0c;解决离线环境镜像拉取、外…

作者头像 李华