news 2026/9/20 15:24:27

银河麒麟离线安装软件实战:deb包、依赖与源码编译全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
银河麒麟离线安装软件实战:deb包、依赖与源码编译全攻略

银河麒麟装软件这事儿,我第一次接手时真被折磨得不轻。单位内网机器没有外网权限,系统自带的软件源没法访问,连 gcc 编译器都是缺的,想装个 Nginx 做测试页面都花了两天排查依赖。后来把门道摸清楚了,发现核心就是三件事:包、源、依赖。只要把这三件事理顺,银河麒麟离线装软件真的可以做到“原来这么简单”。这篇文章是我维护几十台银河麒麟v10机器攒下来的实战经验,从最基本的 deb 包安装,到源码编译,再到驱动和虚拟化工具,最后附上问题排查速查表,一篇聊透。

如果你的工作也离不开信创电脑维护,或者你只是想把手上这台麒麟系统用得顺手一点,可以直接按章节当手册翻。

1. 动手前先摸底盘:系统版本与CPU架构决定能装什么

1.1 银河麒麟的包管理机制和Debian同根,但别把包盲目拿来硬装

银河麒麟v10桌面版和服务器版,底层基于 Debian 生态,继承了 dpkg 和 apt 这套包管理机制。这对使用者来说是个好消息:你在 Debian、Ubuntu 上练过的那些包管理命令,在麒麟系统上基本都能直接迁移。常见的安装格式就是 deb 包,命令无非是 dpkg -i 或者 apt-get install。很多网上搜来的“Ubuntu如何安装某软件”的教程,在麒麟系统上大概率有参考价值,前提是版本和架构得对得上。

但这里要泼一盆冷水:麒麟v10的内核版本和用户空间的库版本,不一定跟当前最新的 Ubuntu 一致。你从 Ubuntu 24.04 仓库里拉的最新编译包,拿到麒麟v10 上装,很可能因为 libssl 版本不匹配直接跑不起来。所以离线安装的第一步永远不是到处找安装包,而是先确认目标机器的“身份信息”。

1.2 三条命令摸清系统底细

拿到机器后,我建议先执行下面三组命令,把系统信息记录到记事本里:

cat /etc/os-release uname -a dpkg --print-architecture

第一行命令看系统版本代号,比如 Kylin V10 SP1、V10 SP3;第二行看内核版本和机器架构,常见输出是 x86_64 或 aarch64;第三行输出 Debian 兼容架构,一般是 amd64 或 arm64。这三样信息基本决定了后续找包的方向。

离线安装里九成以上的“装不上”问题,最后都能回溯到版本不匹配或架构不匹配。ARM架构的机器(比如采用飞腾、鲲鹏处理器的整机)和 x86 机器用的 deb 包不能混装。aarch64 的包放到 x86 机器上报 “wrong architecture”,反过来也一样。下载安装包之前花五秒钟核对这些信息,能让你少走一大截弯路。

提示:如果是老设备或者特殊型号,建议再看一眼 /proc/cpuinfo,确认具体处理器型号。有些软件特别底层,比如虚拟化、深度学习计算库,除了架构之外还认 CPU 指令集(例如是否支持 avx2),提前确认能避免装完后性能拉胯。

1.3 离线装软件的五种格式怎么选

在离线环境下,我用得最多的安装包格式有五类,按优先级排一个表:

安装包格式适用场景优点缺点
deb 软件包有现成打包文件安装快、文件归属清晰、卸载干净依赖处理要额外考虑
tar.gz 源码包官方没有 deb,或需要定制编译参数可自定义安装路径和功能模块需要 gcc、make 和一堆依赖库
二进制 tar 包软件官方提供了编译好的可执行程序解压即用,不污染系统目录不一定适配目标架构
AppImage桌面小工具拷过去就能跑,不需要 root部分系统需要 fuse 支持
容器镜像(如 docker)复杂服务应用隔离性强、依赖完整离线导入镜像前需要搭好容器环境

选哪种格式,完全看场景。比如装 Nginx,只是想快速跑起来,直接在麒麟源里找一个编译好的 deb 包,或者在联网机器上把依赖拉取好拷过来,几分钟搞定。但如果要定制编译参数,添加第三方模块,那就得走源码编译路线。

2. deb 包离线安装:一条命令装完,重点在补齐依赖

2.1 单包安装是起步动作,依赖报错才是真正的坎

对大多数已经打成 deb 的软件来说,离线安装的入口命令其实特别简单:

sudo dpkg -i ./xxx.deb

如果这个包干干净净,没有依赖墙,这一步就直接成功了。可现实往往没这么理想。你想装的 WPS、Chrome、Zotero 这类软件,依赖 libgtk、libssl、libnss 一堆动态库。dpkg -i 装上去之后,立刻回报 “dependency is not satisfiable” 或者 “has unmet dependencies”,很多人就在这一步卡死了。

依赖报错的本质是:deb 包在制作时,把运行条件写进了元数据,dpkg 安装时会逐项检查这些条件满足了没有,没满足就拒绝安装,或者标记为半配置状态。这里要特别注意,dpkg 不像 apt 那样具备“自动下载依赖”的能力,它只是一个本地包安装工具。它不会上网,不会帮你拉库,只会告诉你缺了什么。所以解决依赖的办法有两个方向:要么手动把所有依赖的 deb 包都找齐,要么搭一个本地 apt 源让系统自己去解析,后一种适合批量部署,第5章我会展开说。

2.2 在联网机器上拉全依赖,离线机器上批量安装

依赖问题最经典的解法叫“前置准备法”:找一台同样架构、系统和目标机尽量一致的联网机器,先把目标软件以及它所有依赖下载下来,拷到 U 盘,再到离线机器上批量安装。

以 Nginx 为例,在联网机器上执行:

mkdir -p nginx-offline && cd nginx-offline apt-get download nginx $(apt-cache depends nginx | grep Depends | awk '{print $2}')

这条命令拆开看:

  • apt-cache depends nginx 列出 Nginx 的所有依赖关系;
  • grep Depends 过滤出强依赖行;
  • awk '{print $2}' 提取包名列表;
  • apt-get download 把主包和依赖包全部下载到当前目录,但只下载不安装。

下载完成后,目录里会出现一堆 deb 文件。我的习惯是把它们打成一个 tar.gz 压缩包,文件名带上日期和架构,比如 nginx-offline_2025-06-01_amd64.tar.gz。拷贝到离线机后解压,然后执行:

sudo dpkg -i *.deb

为什么批量安装成功率更高?因为 dpkg 会把所有包先过一遍,再统一报告缺失依赖。如果一次性把依赖包都丢进去,它就能识别到这些依赖已经被满足了。如果还有个别包缺失,回到联网机用 apt download 补拉一次,再执行 dpkg -i 就行。

心得:下载依赖时如果把 apt-cache depends 输出的所有行都拉上,包括 Recommends(推荐包)甚至 Suggests(建议包),虽然会多下载几个不必要的包,但能减少后续运行时的意外报错。业务系统稳定性优先,多占几十MB空间无所谓。

2.3 桌面软件的附加操作:装完不出图标怎么办

Chromium、WPS、Zotero、360压缩这类桌面软件,官网一般提供对应架构的 deb 包。在麒麟系统上,下载对应 amd64 或 arm64 版本后,dpkg -i 装完主程序一般没问题。真正的坑往往在装完之后的桌面集成。

如果开始菜单里没有图标,先检查 /usr/share/applications/ 目录下有没有对应的 .desktop 文件;没有的话,自己写一个。以 Chrome 为例,模板如下:

[Desktop Entry] Name=Google Chrome Exec=/opt/google/chrome/google-chrome %U Icon=/opt/google/chrome/product_logo_256.png Terminal=false Type=Application Categories=Network;WebBrowser;

保存为 /usr/share/applications/chrome.desktop,赋予可执行权限,然后执行:

sudo chmod +x /usr/share/applications/chrome.desktop sudo update-desktop-database /usr/share/applications/

菜单里就能看到图标了。这个思路对所有非应用商店安装的图形软件都通用。

3. 源码编译离线安装:没有deb包的软件就这么搞

3.1 什么时候必须编译,编译前要准备什么

有些软件官方没有提供麒麟版 deb 包,或者你需要的版本在软件源里找不到;也有些场景是你想定制特性,比如给 Nginx 加上 stream 模块做四层代理,给 OpenSSH 升级修复已知问题。这时候,源码编译是绕不开的路子。

编译安装的本质是:把源代码在目标机器上编译成可执行文件,然后放到指定目录。优点是不挑架构,只要能编过就能用;缺点是编译时间较长,而且对系统基础工具链有硬性要求。gcc、make、autoconf、libtool 这些都得存在。离线环境下,如果系统里没有编译器,光准备工具链就够喝一壶的。所以我的原则是:能用 deb 包尽量用 deb 包,真要编译就提前把所有依赖和工具链一次性带全,别指望到目标机器上临时找。

3.2 离线编译 Nginx:从 configure 到 systemd 服务完整流程

Nginx 是源码编译的典型代表。我在内网服务器上装 Nginx 时,流程基本是固定的。

第一步,下载源码并校验完整性。在联网机器上从官网下载 nginx-1.24.0.tar.gz 和对应的校验文件,拷到目标机器后执行:

md5sum -c nginx-1.24.0.tar.gz.md5 tar -xzf nginx-1.24.0.tar.gz cd nginx-1.24.0

离线环境下如果源码包传输途中坏了,后面所有编译步骤都会产生诡异报错。花几秒校验,是省钱。

第二步,执行 configure 配置编译参数:

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream

configure 会检查系统里有没有编译器、有没有 openssl、pcre、zlib 等开发库。常见的报错场景有这么几类:

  • 报 no acceptable C compiler:系统没装 gcc。需要提前把 gcc、g++、make 及相关依赖用 apt download 拉下来装上。
  • 报 PCRE library not found:缺少 PCRE 或 PCRE2 开发包。可以装 libpcre3-dev,也可以在 configure 参数里加 --without-http_rewrite_module 临时绕开,但我不推荐去掉 rewrite 模块,会导致正则路由失效。
  • 报 OpenSSL library not found:缺失 SSL 开发库,需要装 libssl-dev。

第三步,编译安装:

make -j4 sudo make install

-j4 表示4个并行任务,如果机器核数少就写 -j2。make 报错时要看第一行错误信息,别盯着刷屏的最后一行,真正的根因往往埋在输出顶部。

第四步,把 Nginx 注册成 systemd 服务。编译安装的软件默认没有服务入口,重启不会自启。我通常会写一个服务文件 /etc/systemd/system/nginx.service:

[Unit] Description=nginx web server After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop [Install] WantedBy=multi-user.target

然后执行:

sudo systemctl daemon-reload sudo systemctl enable nginx sudo systemctl start nginx sudo systemctl status nginx

这套模板不限于 Nginx,编译安装的 MySQL、Redis、GlusterFS 都可以参照,只要把路径和启动参数替换掉就行。

心得:编译 Nginx 时,我习惯把 configure 命令完整抄到源码目录下的 BUILD-NOTES.md 文件里。升级版本时对着旧参数重新 configure,能保证模块一致,避免数据迁移或配置兼容出意外。

3.3 另一个高危高频场景:离线升级 OpenSSH

单位安全合规要求升级 OpenSSH 是很常见的需求,但这是所有源码编译里风险最高的操作之一。离线环境里升级 OpenSSH 最怕两件事:一是构建依赖没带全,编译到一半报错;二是升级过程中 sshd 服务停了,但新版本没编好,远程连接直接断开。

实操上我建议按以下顺序操作:

  1. 先把 zlib-devel、openssl-devel 和编译器准备齐全,最好带上 libcrypto 兼容库;
  2. 下载新版 OpenSSH 源码,用 --prefix 参数安装到独立目录,不要覆盖系统原生的 ssh 客户端文件;
  3. 编译完成后,先在独立目录启动一个新 sshd 实例测试端口(比如 2222),确认能登录后再切换系统服务;
  4. 切换时保留旧配置备份,避免丢失授权配置。

警告:OpenSSH 升级是高风险操作,内网机器擅自重启 sshd 可能导致失联。如果机器是远程管理的,强烈建议先准备带外管理通道,或者确保有人能去机房物理操作,再执行升级。

4. 驱动与虚拟化工具离线安装:容易被忽略的硬骨头

4.1 AX211/AX210 无线网卡离线为什么装不上

搜索“银河麒麟v10 安装ax211 wifi”的人不少。这类 Intel Wi-Fi 网卡离线安装确实容易让人一头雾水。核心原因在于:网卡驱动由两部分组成,一个是内核模块(.ko 文件),另一个是固件文件(.ucode 文件,放在 /lib/firmware/ 下)。内核模块负责让系统识别这张网卡,固件负责网卡内部逻辑,二者缺一不可。

离线环境下,如果系统认不出网卡,先别急着去下载驱动。按下面的命令逐项排查:

uname -r lspci | grep -i network ls /lib/firmware/ | grep iwlwifi

如果 lspci 能看到硬件信息,但系统里没有对应的 iwlwifi 模块,或者有模块却报固件加载失败,那就是缺固件。此时需要带着内核版本,去内核源码或者驱动包仓库找到对应的 iwlwifi 模块和配套固件,一起拷贝过来。模块放入 /lib/modules/$(uname -r)/kernel/drivers/net/wireless/intel/iwlwifi/,执行 depmod -a 后再 modprobe iwlwifi,固件则放入 /lib/firmware/ 下。

提醒:不同网卡芯片需要的固件文件名不同。AX210 需要 iwlwifi-ty-a0-gf-a0-.ucode,AX211 需要 iwlwifi-so-a0-gf-a0-.ucode,文件名必须精确匹配。下载时优先去 Intel 官方 Linux 驱动仓库,别去第三方驱动站。

4.2 内网运维常用的 Samba、VNC、telnet 离线安装思路

离线环境下,运维经常要搭建内网数据传输和远程管理通道,Samba、VNC、telnet 这几样出现的频率很高。它们的安装本身不复杂,要么按 deb 方式处理,要么编译。但我特别想提醒一个点:这类工具有时候安装成功了,却没达到预期效果,因为服务配置没跟上。

比如 Samba,离线装的时候依赖 libwbclient、libtalloc、libtdb 等一堆库,直接把 samba.deb 拿来 dpkg -i 大概率报缺依赖。用第2章的依赖批量下载法把 samba 相关的 samba-common、smbclient、libwbclient0 等一次性拉下来,装好之后还要在 /etc/samba/smb.conf 里把共享目录配置写清楚,然后启动 smbd 和 nmbd 服务,客户端才能访问。

再说 telnet。很多人搜“银河麒麟桌面操作系统安装 telnet 命令”,其实它就是一个客户端软件包,包名就是 telnet,装完就能 telnet 访问远程端口。但如果要在内网开启 telnet 服务端做远程调试,我得劝一句:telnet 协议是明文传输,账号密码直接暴露在网络上,生产环境能不用就不用,尽量用 SSH 替代。

4.3 国产CPU平台上的虚拟化:KVM 与 VMware Tools

我在国产 CPU 平台上部署虚拟机的频率不低。KVM 是 Linux 内核自带的虚拟化方案,离线安装主要分两步:先确认 CPU 支持虚拟化(x86 平台看 /proc/cpuinfo 里有没有 vmx 或 svm 标志,ARM 平台一般是内置虚拟化扩展),然后安装 qemu-kvm、libvirt 相关软件包。

安装完成后,配置虚拟网络和存储池是常见难点。我常用的快速验证命令:

sudo systemctl start libvirtd sudo virsh net-list --all

如果 libvirtd 起不来,多数是依赖或者权限问题,看日志优先用 journalctl -xe。至于 VMware Tools,在麒麟系统里的虚拟机也一样能装,下载对应架构的 tar.gz 包,解压后执行 vmware-install.pl,一路回车或按提示填 yes 即可。装完重启虚拟机,鼠标切换和显示分辨率会正常很多。

5. 官方资源与内网软件源:批量部署一次到位

5.1 靠谱的软件包都从哪里来

离线安装最怕找错来源。我的优先级排序是:

  1. 银河麒麟官网和麒麟软件开发者中心:系统补丁、内核、驱动、基础工具的首选;
  2. 软件厂商官方站点:WPS、360压缩、Chrome、Zotero 等,在各自官网的 Linux 下载页找适配版本;
  3. 与系统底层兼容的开源镜像站:如果单位内网有能访问的 Debian/Ubuntu 镜像源,可以沉淀为一个本地离线源;
  4. 同事或社区已验证的包:只作兜底,来源不明的包尽量避开。

一个小技巧:官网下载页如果同时提供 rpm 和 deb,麒麟v10 选 deb;如果同时提供源码包和二进制包,优先选二进制包,能省下大量编译时间。

5.2 搭建离线 apt 源,10台以上机器批量装不费劲

给一台机器装软件,U盘拷贝 deb 包就够了。但一个办公室有20台机器要装同一批软件,拿着U盘跑一圈效率太低。这时候搭一个本地 apt 源才是正解。

操作步骤:

  1. 在一台联网的同架构机器上,创建目录 /srv/kylin-debs,把所有需要的 deb 包放进去;
  2. 安装 dpkg-dev 工具;
  3. 在 deb 包目录下生成索引:
cd /srv/kylin-debs dpkg-scanpackages . /dev/null | gzip > Packages.gz
  1. 用 Nginx 或 Apache 把该目录共享出去,Nginx 配置示例:
location /debs { alias /srv/kylin-debs; autoindex on; }
  1. 在各目标机器上修改 /etc/apt/sources.list,注释默认源,添加一行:
deb [trusted=yes] http://内网服务器IP/debs /
  1. 执行 apt update,之后所有机器都能直接 apt install 了。

搭好这个源以后,后续有新软件包需求,只需要在联网机下载同步到内网服务器,重新生成 Packages.gz,所有机器更新源即完成部署。这个方法对“批量交付同一套环境”特别管用,我维护的多台同架构麒麟机器如今全部走这个方式统一更新。

6. 离线安装报错排查速查表:现场问题拿来即用

最后把这几年来处理离线安装问题时最常踩的坑整理成一张速查表,现场排查时方便对照:

报错或现象可能原因解决思路
wrong architecture安装包架构与系统不符dpkg --print-architecture 确认后重下
dependency is not satisfiable依赖缺失或版本不匹配用 apt-cache depends 拉全依赖批量装
no acceptable C compiler缺 gcc 编译工具链提前把 gcc/g++/make 带过去装上
make: command not found缺 make 工具安装 make,或改用二进制包
error while loading shared libraries动态库版本不对或缺失用 ldd 命令定位,装对应版本库
软件源 404 或 not foundsources.list 配置错误检查源地址,换成可用内网源
Wi-Fi 网卡没有 wlan0 接口内核模块或固件缺失检查 iwlwifi 模块和 /lib/firmware 固件
安装后桌面无图标缺 .desktop 文件手动补文件到 /usr/share/applications/
截图失败或黑屏图形库或显示服务异常重装图形相关依赖,检查桌面组件
磁盘突然显示空白分区未挂载或 UUID 变了df -h、lsblk -f 查看,检查并修复 /etc/fstab

再提一个有点反直觉的经典问题:权限处理。很多新手喜欢一条 chmod 777 走天下,结果软件装上去了,系统反而出现诡异问题——某个服务启动失败,提示权限配置不安全。在 Linux 里,权限不只是“能读能写”,还涉及 suid/sgid 位。我的建议是:需要开放目录权限时,用 chmod 750 配合用户组管理,或者为属主设置 u+rwx,别一把梭 777。这个细节在离线部署多用户服务时会特别明显。

遇到“磁盘突然空白了”这种问题,八成不是文件没了,而是分区挂载异常。先执行 df -h 和 lsblk -f 看看有没有未挂载的分区,然后检查 /etc/fstab 里的 UUID 是否与当前分区一致。新增硬盘或者系统异常重启后,UUID 偶尔会变化,导致开机没自动挂载。修正再挂载就可以,千万不要急着格式化。

最后分享一个我坚持了挺久的习惯:每次处理完一台离线机器,我会把用到的所有 deb 包、配置文件和关键命令记录到一个 markdown 文件里,和软件包备份一起归档。三个月后同事来问“上次那个离线装 Nginx 怎么弄”,直接把文档发过去,五分钟解决问题。如果你也在维护一批内网机器,建议从今天开始给每台机器建一份“软件包档案”,把这些重复性工作变成流程,就不至于每次都从头踩坑。

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

30 分钟跑通 OpenCore EFI:OpCore-Simplify 的自动化配置路径

30 分钟跑通 OpenCore EFI:OpCore-Simplify 的自动化配置路径 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 手动写 config.plist 的 ACP…

作者头像 李华
网站建设 2026/9/20 15:22:55

AI副业工具选型实战:从对话、绘图到视频的工作流搭建指南

从“先买课再买工具”这句话说开去,这些年我见过太多人把AI副业做成了“工具收藏家”:电脑里装了几十个AI软件,会员充了一堆,最后连一个完整的活儿都没交付过。我自己也走过这段弯路,刚接触AI工具那会儿,看…

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

ahflt.sys报错修复指南:EAC内核驱动兼容性问题深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 15:21:04

无人机航拍小目标检测数据集构建与YOLO11训练实践

简介:针对无人机航拍小目标检测任务中目标占比小、背景复杂等痛点,这套资源整理出1000张真实航拍场景图像,覆盖机场飞机、港口船舶、城市车辆、工业储罐、风电场风车、居民区泳池等多样化场景,并划分airplane、helicopter、small-…

作者头像 李华
网站建设 2026/9/20 15:20:26

BrewUI:Homebrew图形化客户端,让macOS包管理更直观

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 15:18:45

Isaac Sim入门:机器人物理仿真核心概念与界面操作逻辑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华