三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

国产操作系统离线安装deb包实战指南

国产操作系统离线安装deb包实战指南

1. 国产操作系统离线安装现状解析

国产操作系统如银河麒麟和统信UOS在企业级应用中越来越普及,但很多用户在离线环境下安装deb软件包时经常遇到依赖缺失、签名验证失败等问题。不同于Ubuntu等主流发行版,这些国产系统在软件源管理和包依赖处理上有其特殊性。

我最近在给某金融机构部署银河麒麟V10时,就遇到了一个典型场景:内网服务器需要部署20多个定制deb包,但系统提示缺少libssl1.1等基础依赖。通过搭建本地离线源并重构依赖关系,最终实现了全自动化部署。下面就把这套经过实战验证的方法完整分享出来。

2. 离线安装前的关键准备工作

2.1 环境检测与工具准备

首先通过lsb_release -a确认系统版本,银河麒麟和统信UOS的不同版本对deb包的兼容性差异很大。必备工具包括:

  • dpkg-dev:用于构建本地仓库
  • gpg:签名验证工具
  • apt-utils:高级包管理工具
# 检查系统版本 cat /etc/os-release # 安装基础工具(需联网环境提前准备) sudo apt install dpkg-dev gpg apt-utils -y

2.2 软件包完整性验证

从非官方渠道获取的deb包可能存在损坏风险。使用以下命令验证:

# 检查deb包结构 ar t package.deb # 正常应输出:debian-binary control.tar.gz data.tar.xz # 验证MD5 md5sum package.deb

重要提示:银河麒麟系统对deb包的control文件中Maintainer字段有特殊校验,建议先用dpkg -f package.deb检查元数据

3. 本地离线源搭建全流程

3.1 创建仓库目录结构

mkdir -p /opt/local-repo/conf cd /opt/local-repo touch conf/distributions

distributions文件内容示例(银河麒麟V10 SP1):

Origin: Local-Repo Label: Local-Repo Codename: kylin Architectures: amd64 arm64 Components: main Description: Local repository for Kylin V10 SignWith: yes

3.2 导入GPG密钥

gpg --gen-key # 生成新密钥 gpg --output kylin-repo.gpg --armor --export <key-id>

将生成的kylin-repo.gpg复制到所有客户端的/usr/share/keyrings/

3.3 构建仓库索引

# 将deb包放入pool/main目录 mkdir -p pool/main cp *.deb pool/main/ # 生成Packages.gz dpkg-scanpackages --multiversion pool/ > Packages gzip -k -f Packages # 生成Release文件 apt-ftparchive release . > Release gpg --clearsign -o InRelease Release gpg -abs -o Release.gpg Release

4. 客户端配置与安装

4.1 源配置文件

/etc/apt/sources.list.d/local.list添加:

deb [signed-by=/usr/share/keyrings/kylin-repo.gpg] file:/opt/local-repo/ kylin main

更新缓存:

sudo apt update

4.2 离线安装技巧

使用--allow-downgrades解决版本冲突:

sudo apt install package-name --allow-downgrades -o Dir::Etc::SourceList=/etc/apt/sources.list.d/local.list

强制忽略依赖检查(慎用):

sudo dpkg -i --force-depends package.deb

5. 常见问题解决方案

5.1 依赖缺失处理

使用apt-cache depends分析依赖树:

apt-cache depends -i package-name

手动下载依赖包后,用dpkg-scanpackages生成新的索引

5.2 签名验证失败

错误示例:

NO_PUBKEY 6A8B62C43C96B0B2

解决方法:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6A8B62C43C96B0B2

5.3 系统架构不匹配

银河麒麟常见架构包括:

  • amd64(x86_64)
  • arm64(aarch64)
  • mips64el

dpkg --print-architecture查看当前架构,用--force-architecture跨架构安装

6. 高级技巧与优化方案

6.1 批量安装脚本

#!/bin/bash REPO_DIR="/opt/local-repo" for deb in $(ls $REPO_DIR/pool/main/*.deb); do sudo dpkg -i $deb || sudo apt install -f -y done

6.2 依赖自动下载方案

在联网环境使用:

apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances package-name | grep "^\w" | sort -u)

6.3 空间优化技巧

使用hardlink节省空间:

cp -rl /media/cdrom/pool /opt/local-repo/

7. 实战经验分享

在最近一次银行系统迁移中,我们遇到统信UOS V20无法识别高版本libc6的问题。解决方法是通过equivs创建虚拟包:

equivs-control fake-libc6 # 编辑control文件设置Provides: libc6 equivs-build fake-libc6

另一个典型案例是银河麒麟V10的桌面环境会阻止非认证软件安装。需要先执行:

sudo kylin-software-center --disable

对于需要特定内核模块的驱动,建议先用uname -r确认内核版本,再使用dkms框架编译安装

← 返回列表