ARTICLE DETAIL

资讯详情

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

银河麒麟V10换源全攻略:apt源配置避坑指南

银河麒麟V10换源全攻略:apt源配置避坑指南 银河麒麟系统用久了基本都会撞上一个问题官方软件源要么速度拉胯要么干脆连不上。尤其是刚装完系统那阵子想跑一个apt update都要等半天最后还给你来一排超时报错这时候“换源”就成了绕不开的第一课。我最早接触银河麒麟 V10 的时候也被折磨过折腾几次之后发现换源这件事本身并不复杂真正的坑往往藏在版本识别、源选择和密钥配置这些细节里。这篇就完整聊聊银河麒麟换源这件事从原理到实操再到踩坑一次性讲透。1. 换源之前先搞懂银河麒麟的软件源机制1.1 apt 软件源是怎么工作的银河麒麟桌面版和服务器版的软件包管理走的都是 Linux 社区非常成熟的 apt 体系。系统里有个核心配置目录/etc/apt/里面的sources.list文件以及sources.list.d/目录下的所有.list文件共同决定了“软件从哪里下载”。当你执行apt update时系统会逐个读取这些源地址拉取每个源对应的 Packages 索引文件。这个索引不是软件包本身而是一份“菜单”记录了有哪些软件、什么版本、依赖关系、下载地址在哪里。后面你执行apt install nginx本质就是先查这份菜单找到匹配项再根据菜单里的地址去下载.deb安装包最后交给dpkg做依赖处理和安装。换源的逻辑就很简单了把系统默认指向的源地址换成网络连通性好、速度快的国内镜像源地址。源没换之前很多用户感受到的“卡”不一定是系统卡而是软件源服务器响应慢导致更新流程整体被拖住。1.2 银河麒麟的源和 Ubuntu 源到底是什么关系银河麒麟 V10 的桌面版底层基于 Ubuntu 的软件包体系和内核框架做了定制服务器版则根据版本分支不同有的走 Debian 体系有的走 RPM 体系。这就导致一个很常见的困惑不少人上网搜“麒麟换源”结果搜出来一堆 Ubuntu 的教程照着改完发现要么不识别要么报密钥错误。我的建议是换源前先把发行版身份确认清楚。查看/etc/os-release文件是最直接的办法这个文件会明确告诉你系统名、版本号和对应的版本代号。比如桌面版的版本代号通常是 bionic 或 focal 这样的 Ubuntu 代号服务器版则可能显示 Kylin V10 自己的代号。只有确认了这个代号你才能去镜像站找到匹配的目录否则就是瞎配。1.3 不换源会遇到哪些典型问题最直观的就是apt update全程超时或者偶尔能通但速度只有几十 KB。再有就是安装某些基础软件时提示“Unable to locate package”其实不是软件不存在而是源索引根本没有更新成功。还有一些企业内网环境官方源域名被防火墙策略挡了这时候换源甚至不是“提速”而是“救命”。把这些搞清楚之后再去动手换源思路会清晰很多。别一上来就复制网上的代码版本不对照后面全是坑。2. 动手换源前必须完成的准备工作2.1 确认系统版本和 CPU 架构换源是件精细活第一步是看清“自己是谁”。打开终端依次执行下面的命令cat /etc/os-release uname -m cat /etc/apt/sources.list第一行查看系统发行版信息第二行查看 CPU 架构第三行查看当前的源配置原文。这里我特别强调一下架构问题银河麒麟 V10 既有 x86_64 版本也有基于鲲鹏、飞腾等处理器的 ARM64 版本。很多镜像站的源目录是区分架构的你如果拿 x86 的源配置硬塞给 ARM 机器下载时大概率会遇到 404 或文件不匹配。顺便多说一句cat /etc/apt/sources.list时如果提示文件不存在或者内容为空也别慌现在很多系统默认把源配置拆散放进了/etc/apt/sources.list.d/目录你可以用ls -l /etc/apt/sources.list.d/看一下重点看里面有哪些文件。2.2 备份原始源文件给自己留后路改系统配置文件前先备份这是 Linux 运维的铁律换源这件事上也同样适用。改错源文件、源地址拼错一个斜杠都可能导致apt完全不可用而备份就是后悔药。执行下面的命令把原始配置打包存起来sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak.$(date %Y%m%d) sudo cp -r /etc/apt/sources.list.d /etc/apt/sources.list.d.bak.$(date %Y%m%d)备份文件带上了日期好处是一眼就知道哪天做的备份后续系统出问题想还原也方便。如果你修改了/etc/apt/sources.list.d/里的自定义源文件务必也一并备份别只盯着主文件。2.3 检查网络连通性和 DNS 解析换源之后发现还是连不上许多人第一反应是源地址写错了但很多时候其实是网络层的问题。在改源之前可以先测一下到镜像站的连通性比如ping -c 4 mirrors.aliyun.com如果 ping 不通再试试ping -c 4 223.5.5.5能通但域名解析不了说明是 DNS 问题如果 IP 也 ping 不通基本就是网络策略限制或者根本没有外网连通性。这一步排查做好了可以帮你避免把源来回换好几遍的无效劳动。3. 手工换源实操sources.list 的修改方法与示例3.1 银河麒麟 V10 桌面版换源示例桌面版通常走 apt 体系我这里以兼容 Ubuntu focal 分支的银河麒麟 V10 桌面版为例。修改前先编辑源文件sudo nano /etc/apt/sources.list将文件内容替换为下面的镜像源配置这里以阿里云镜像为例你可以根据自己的网络环境选择清华、中科大等镜像站deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse注意这里的focal是 Ubuntu 20.04 的代号如果前面通过/etc/os-release查到的系统代号和它不一致一定要替换成实际代号。例如有些麒麟版本是基于 bionicUbuntu 18.04的就该写成bionic。3.2 银河麒麟 V10 服务器版换源示例服务器版的源配置要看具体分支。如果你拿到的服务器版是 apt 体系配置方式和桌面版基本一致只需要按版本代号替换即可。如果是 RPM 体系的分支那处理思路就完全不同了得走 yum/dnf 的 repo 文件配置。判断方法很简单看系统里有没有/etc/yum.repos.d/目录有的话说明是 RPM 体系。RPM 体系的换源通常是修改/etc/yum.repos.d/下以.repo结尾的文件。你需要把里面baseurl指向的官方地址换成镜像站对应的麒麟目录。比如阿里云镜像站上就提供了 kylin 相关的 repo 目录网上也能找到对应的.repo模板文件。把原始.repo文件备份后用新内容替换然后执行sudo yum clean all sudo yum makecacheRPM 体系的源配置比 apt 体系更容易踩坑尤其是$releasever这类变量能不能被正确解析取决于你写的路径格式是否正确。我的建议是尽量找和你系统版本完全匹配的现成配置不要自己去猜路径。3.3 ARM 架构和 x86 架构的源差异前面提到过架构不一致会导致下载失败。这里给你一个具体的判断方法执行uname -m后x86_64 对应 amd64 架构aarch64 则对应 arm64 架构。镜像站的 apt 源目录下通常会区分amd64和arm64的 Packages 索引但你在sources.list里通常不需要手动写架构apt 会自动根据系统架构去匹配。不过个别镜像站为了节省空间可能只同步了部分架构的软件包。这时候你配置的源里如果软件包索引下载成功但安装时 404就要怀疑是不是镜像站缺少对应架构的包。多准备一个备用镜像源是个好习惯一个源缺包马上切另一个。3.4 配置公钥和源优先级避免证书报错换了第三方镜像源之后如果系统提示The following signatures couldnt be verified because the public key is not available说明镜像站对仓库做了签名但你的系统里没有对应的公钥。解决方法是手动导入公钥例如sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 密钥ID不过apt-key在较新版本中已经标记为废弃推荐做法是直接把公钥文件放到/etc/apt/trusted.gpg.d/目录下。具体怎么操作关键看源配置用的是官方签名还是镜像站签名碰到了再处理也来得及。另外如果你在/etc/apt/sources.list里同时配置了多个可能包含同名软件包的源建议了解一下 apt 的优先级机制。通过调整/etc/apt/preferences.d/下的配置可以指定某个源的软件包优先级更高避免多个源“打架”。这个技巧在日常使用中不一定用得上但遇到诡异版本问题时往往能救你一次。3.5 换源后立即执行的两条命令改完源文件接下来是固定流程sudo apt update sudo apt upgradeapt update的作用是拉取新源的索引apt upgrade则是根据索引更新系统内可升级的软件包。第一次执行apt update时如果看到输出里有大量Get相关的行说明源配置生效了如果只有零星的Hit且速度快也是正常的。执行结束后留意有没有W:开头的警告有的话按提示逐个解决。4. 借助辅助工具和生态换源效率翻倍4.1 用图形化源管理工具减少手改错误银河麒麟桌面版自带的应用商店或软件更新设置里部分版本提供了软件源管理入口可以在图形界面里选择源。这种方式适合不想碰命令行的朋友本质上做的事和手工改sources.list是一样的。但注意图形化的源管理工具通常只提供固定的几个官方源选项不一定有国内镜像站。如果你的需求就是“切到国内镜像”命令行手工改仍然是更直接、更可控的办法。我个人的习惯是第一次初始化系统时用手工方式配置源并把配置文件备份好之后重装系统时直接跑脚本效率最高。4.2 Python、npm 等生态的“换源”思路银河麒麟 V10 上做开发的朋友经常会在 pip、conda、npm 里也遇到下载慢的问题。这些工具虽然和 apt 不是一回事但换源的思路是相通的把默认下载源指向国内镜像。比如 pip 临时使用清华源安装某个包pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simpleconda 则是通过修改~/.condarc文件来更换镜像通道npm 用npm config set registry指令指定镜像源。这些操作都不是银河麒麟特有的但和 apt 换源经常会一起出现因为大家的目标都一样让软件获取过程不再等待。热词里频频出现“conda换源”“pip换源”“npm换源”说明这是开发者在银河麒麟上非常普遍的后续需求。5. 换源后的常见报错与排查技巧5.1 更新时报错“缺少公钥”最典型的报错是W: GPG error: https://mirrors.xxx.com/ubuntu focal Release: The following signatures couldnt be verified because the public key is not available遇到这个问题先确认你换的源是不是官方签名仓库。如果只是镜像站同步了官方源、但未修改签名那你需要用官方源的公钥匙来验证。操作有两种低版本直接apt-key adv --recv-keys 缺失的KEY新版本则把公钥下载后放到/etc/apt/trusted.gpg.d/目录。这里有个细节不同 Ubuntu 版本用的签名密钥可能不同网上搜到的apt-key命令里的密钥 ID 不一定匹配最好从官方安全公告里查证。5.2 提示依赖关系损坏软件装不上换源后如果你把系统从旧源直接切到新源可能会出现索引版本和系统现有软件包版本不匹配的情况典型表现是安装软件时报依赖缺失或版本冲突。常规处理办法是sudo apt --fix-broken install sudo apt update --fix-missing sudo apt dist-upgrade--fix-broken会让系统尝试修复损坏的依赖关系--fix-missing则用来处理索引下载缺失的问题。如果这些命令执行完还是不行考虑是不是源里某个软件包版本比其他软件新太多导致系统依赖库跟不上。这时候我通常会检查一下/etc/apt/sources.list里是不是混用了不同版本的源组件保持所有组件版本代号一致很关键。5.3 连接超时或无法解析域名换源完成后apt update仍频繁超时不要急着怀疑源地址先做两层检查第一层ping镜像站域名确认网络能通第二层看sources.list里的地址是不是 http 或 https 写错了。如果公司内网有代理apt 默认不会走系统代理你需要在/etc/apt/apt.conf.d/下新建配置写入Acquire::http::Proxy http://代理地址:端口;。这是很多人在内网环境装软件遇到的隐藏坑网上很少有人提到。5.4 软件源锁定冲突如果你在/etc/apt/sources.list.d/里放了多个第三方源比如 docker 官方源、nginx 官方源这些源之间有时会互相影响出现The following packages have been kept back或软件版本被某个源锁定为旧版的问题。排查方法是逐个禁用sources.list.d下的文件apt update后再试安装就能定位到是哪个源在捣乱。顺带说一句第三方源里的软件包除非必要建议保持官方推荐版本别轻易给系统核心组件手动装非仓库版本否则后患无穷。为了让你排查起来更顺手我整理了一张速查表报错现象可能原因优先排查项GPG 公钥缺失镜像源签名未导入确认密钥 ID导入公钥404 Not Found源路径与系统版本不匹配对比版本代号和架构连接超时网络不通或镜像站不可用ping 域名换备用源依赖损坏源版本不一致执行 fix-broken 修复软件被 keep back多源优先级冲突检查 sources.list.d 配置6. 离线环境没有源可用怎么办另一个思路6.1 离线安装软件包的准备工作换源这件事前提是有网络。但银河麒麟最常见的落地场景偏偏是部署在政企内网、生产环境这类离线或半离线网络里的。碰到这类环境你没法在线拉包只能提前准备好离线安装包。最常用的办法是在一台能联网的同架构、同版本系统里把需要的.deb包下载好再拷贝到离线机器上安装。比如你要离线安装 nginx可以在联网机器上执行apt download nginx但 nginx 还有一堆依赖用apt download一个个手动下太痛苦。更好的做法是用apt-get download加参数或者用apt-rdepends列出依赖树利用--download-only选项配合apt-get一次性把所有依赖包下载到本地目录mkdir -p /tmp/nginx-debs cd /tmp/nginx-debs apt-get download $(apt-rdepends nginx | grep -v ^ )把/tmp/nginx-debs里的.deb文件全部复制到离线机器然后执行sudo dpkg -i *.deb6.2 用本地目录作为源离线也能 update如果你想在离线机器上实现“换源”的效果还有一个更进阶的做法把下载好的.deb包目录做成一个本地 apt 源。需要配合dpkg-scanpackages工具生成 Packages 索引再在/etc/apt/sources.list里指向deb file:///opt/myrepo/ ./。这样离线机器也能用apt install 包名安装指定目录里的软件包而且 apt 会自动处理依赖和索引。唯一要注意的是本地源里只有你已经收录的包缺失的依赖还得提前一并放进去。整个过程虽然比在线换源繁琐但一旦配置好了离线环境下体验会非常顺滑。这也是为什么我建议所有在银河麒麟上做部署的朋友都养成一个习惯把常用安装包收集成一个目录归档走哪带到哪。平时看着不起眼真到了断网排查、紧急上线的时候这个目录就是你最可靠的“源”。换源说到底是 Linux 包管理的基本功但基本功里全是细节。版本代号、CPU 架构、签名密钥、镜像路径哪一环没对上后面就是一连串连锁问题。回到标题说的“银河麒麟换源”我不建议你把这四个字当成一个简单命令而是把它当作一套流程先识别系统身份再选择合法镜像备份后修改更新后验证最后把常见报错的排查方法记在脑子里。这套流程跑顺了不管是桌面版还是服务器版不管是 x86 还是 ARM你都能应付。
返回列表