十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

银河麒麟离线安装软件实战: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] NameGoogle Chrome Exec/opt/google/chrome/google-chrome %U Icon/opt/google/chrome/product_logo_256.png Terminalfalse TypeApplication CategoriesNetwork;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-streamconfigure 会检查系统里有没有编译器、有没有 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] Descriptionnginx web server Afternetwork.target [Service] Typeforking 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] WantedBymulti-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 服务停了但新版本没编好远程连接直接断开。实操上我建议按以下顺序操作先把 zlib-devel、openssl-devel 和编译器准备齐全最好带上 libcrypto 兼容库下载新版 OpenSSH 源码用 --prefix 参数安装到独立目录不要覆盖系统原生的 ssh 客户端文件编译完成后先在独立目录启动一个新 sshd 实例测试端口比如 2222确认能登录后再切换系统服务切换时保留旧配置备份避免丢失授权配置。警告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-.ucodeAX211 需要 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 靠谱的软件包都从哪里来离线安装最怕找错来源。我的优先级排序是银河麒麟官网和麒麟软件开发者中心系统补丁、内核、驱动、基础工具的首选软件厂商官方站点WPS、360压缩、Chrome、Zotero 等在各自官网的 Linux 下载页找适配版本与系统底层兼容的开源镜像站如果单位内网有能访问的 Debian/Ubuntu 镜像源可以沉淀为一个本地离线源同事或社区已验证的包只作兜底来源不明的包尽量避开。一个小技巧官网下载页如果同时提供 rpm 和 deb麒麟v10 选 deb如果同时提供源码包和二进制包优先选二进制包能省下大量编译时间。5.2 搭建离线 apt 源10台以上机器批量装不费劲给一台机器装软件U盘拷贝 deb 包就够了。但一个办公室有20台机器要装同一批软件拿着U盘跑一圈效率太低。这时候搭一个本地 apt 源才是正解。操作步骤在一台联网的同架构机器上创建目录 /srv/kylin-debs把所有需要的 deb 包放进去安装 dpkg-dev 工具在 deb 包目录下生成索引cd /srv/kylin-debs dpkg-scanpackages . /dev/null | gzip Packages.gz用 Nginx 或 Apache 把该目录共享出去Nginx 配置示例location /debs { alias /srv/kylin-debs; autoindex on; }在各目标机器上修改 /etc/apt/sources.list注释默认源添加一行deb [trustedyes] http://内网服务器IP/debs /执行 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 配合用户组管理或者为属主设置 urwx别一把梭 777。这个细节在离线部署多用户服务时会特别明显。遇到“磁盘突然空白了”这种问题八成不是文件没了而是分区挂载异常。先执行 df -h 和 lsblk -f 看看有没有未挂载的分区然后检查 /etc/fstab 里的 UUID 是否与当前分区一致。新增硬盘或者系统异常重启后UUID 偶尔会变化导致开机没自动挂载。修正再挂载就可以千万不要急着格式化。最后分享一个我坚持了挺久的习惯每次处理完一台离线机器我会把用到的所有 deb 包、配置文件和关键命令记录到一个 markdown 文件里和软件包备份一起归档。三个月后同事来问“上次那个离线装 Nginx 怎么弄”直接把文档发过去五分钟解决问题。如果你也在维护一批内网机器建议从今天开始给每台机器建一份“软件包档案”把这些重复性工作变成流程就不至于每次都从头踩坑。
返回列表