尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

银河麒麟V10换源全攻略:apt、pip、npm、conda与离线方案

银河麒麟V10换源全攻略:apt、pip、npm、conda与离线方案 单位新装了几台银河麒麟 V10 的工作站系统装完后的第一件事就是把软件源全部换成国内镜像。这个动作在麒麟系统上太常见了因为默认源虽然能用但在很多网络环境下动不动就超时、404你敢直接把apt install丢给用户他五分钟之内就会回来找你“系统坏了”。其实系统没坏是源没配好。这篇不绕弯子就讲银河麒麟系统怎么换源并把 apt、pip、npm、conda 这些常用包管理器的换源方法一次性讲透外加离线环境下的“源替代”思路和换源后的排坑记录。适合刚接触麒麟系统、或者在单位机房里负责维护麒麟机器的朋友无论你是用 x86 还是 ARM 架构思路基本通用。1. 动手之前先把系统版本和源结构看清1.1 银河麒麟的源设计思路银河麒麟 V10 是 Debian 系的系统包管理工具是 apt安装软件最常用的命令就是apt install xxx。它不像 CentOS/RHEL 那样用 yum/dnf所以网上那些 CentOS 换源的教程在这里基本不适用。银河麒麟默认的软件源指向官方仓库这个仓库的特点是“全但网络环境不稳定”内网机器更是完全访问不到。换源本质上就是把apt从默认源指向的服务器地址改成离你近、速度快、同步完整的镜像地址。这个过程不改变系统的包管理逻辑只是换了一个“取货仓库”。理解这一点很重要因为很多人误以为换源要重装系统、改配环境变量实际上你只需要动一个文本文件就够了。另外要提醒一句银河麒麟的源里不只是单纯的应用程序还有麒麟桌面环境的组件、系统底层库、驱动包等。所以源的选择直接关系到系统稳定性和安全性不能拿网上随手抄的一段 Ubuntu 源就直接贴进去。1.2 一条命令确认版本和架构换源之前最重要的一件事是确认你的系统是 V10 的哪个小版本、CPU 是 x86_64 还是 aarch64。虽然 apt 源配置大体相似但 V10 的 SP1、SP2、SP3 路径有差异ARM 和 x86 源很多时候也不通用。别小看这一步很多人换完源 update 报 404八成就是版本写错了。可以用这几个命令来确认nkvers这是麒麟系统的专属命令执行后直接显示当前内核版本和麒麟发行版名称。我看到很多教程里没有提这个命令但它在排障时特别有用。cat /etc/kylin-release cat /etc/os-release uname -mcat /etc/os-release会显示比较详细的系统名称和版本号uname -m则用来判断架构输出x86_64说明是 Intel/AMD 平台输出aarch64说明是飞腾、鲲鹏、麒麟芯片这类 ARM 平台。以我手头这台机器为例nkvers输出里能看到 Kylin V10 的标识和内核版本号uname -m显示x86_64。那我在配置源的时候就可以按 V10 x86_64 的通用格式来处理遇到 SP 版本差异时再回去翻源文件确认这样心里有底。1.3 源文件在哪备份怎么做Debian 系软件的源文件默认是/etc/apt/sources.list银河麒麟还可能有/etc/apt/sources.list.d/目录里面放着一些第三方软件的独立源文件。换源之前建议都备份一遍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)备份不是形式主义。真把源改坏了或者系统更新后出现依赖问题你随时可以一条命令换回原来的状态。改源这事本身没有太大风险风险全在你手里的初始配置是不是不可恢复。我见过有人改了源之后 apt 报错又忘了原来的源长什么样最后只能网上找别人的配置来猜折腾一整天。所以备份这步真的别跳。做完备份再用cat /etc/apt/sources.list看一眼默认源文件内容。有些版本的系统默认源文件可能被拆分到sources.list.d里如果sources.list是空的或者只有注释重点去sources.list.d目录里找。这一步能帮你判断到底改哪个文件。2. apt 换源实操照着做就能跑通的步骤2.1 看懂源文件的基本结构先看一段典型的银河麒麟 V10 官方源配置注意这是参考格式不是所有版本都一样以你本机原来的文件为准deb http://archive.kylinos.cn/kylin/KYLIN-V10 SP1 main restricted universe multiverse deb http://archive.kylinos.cn/kylin/KYLIN-V10 SP1-updates main restricted universe multiverse deb http://archive.kylinos.cn/kylin/KYLIN-V10 SP1-security main restricted universe multiverse拆开来看就很好理解了archive.kylinos.cn是官方源服务器地址/kylin/KYLIN-V10是仓库路径不是 Ubuntu 的ubuntu/路径SP1是发行版代号如果你的系统是 SP2/SP3就要对应修改main restricted universe multiverse是仓库组件分类分别代表官方支持、受限软件、社区维护、非自由软件。把这三行结构看懂后面换源的核心思路就清晰了保住结构替换地址。不要整段重写只需要把服务器地址替换成镜像站地址。2.2 换成国内镜像源的具体操作国内几个主流镜像站都同步了麒麟源我个人用得最多的是清华 TUNA 镜像。操作思路其实很简单把源文件里的http://archive.kylinos.cn/kylin整体换成镜像站对应路径就行了。用 sed 一条命令就能完成替换sudo sed -i s|http://archive.kylinos.cn/kylin|http://mirrors.tuna.tsinghua.edu.cn/kylin|g /etc/apt/sources.list执行完以后用cat /etc/apt/sources.list | head -n 10看一下结果确认地址替换对了。如果源文件里写的是https://开头把 sed 里的http换成https再执行一次即可。如果你更习惯手动编辑直接sudo vim /etc/apt/sources.list把开头的地址改掉保存退出效果一样。借这个机会泼一盆冷水网上很多教程让你直接把 Ubuntu 18.04/20.04 的源整段贴进麒麟系统这种操作非常危险。银河麒麟虽然基于 Ubuntu 的包管理框架但对不少包做过版本调整和补丁直接把 Ubuntu 源搬过来最轻的是软件版本“莫名其妙不兼容”最重的是 apt 依赖关系直接崩掉装什么软件都会报依赖错误。我一直的原则是麒麟机器优先用麒麟官方源或镜像站同步的麒麟源不要跟 Ubuntu 源混着用。2.3 换源后必做的三步验证源改完之后一定要跑一遍下面的流程别改完就以为万事大吉。第一步刷新软件列表sudo apt update这一步如果报错下面第 5 章有详细的排查表先对应看一下。正常情况下应该能看到各个仓库的索引文件被正常拉取最后的输出统计是N packages can be updated之类的结果。第二步先别急着升级看看到底有哪些包要动sudo apt upgrade --dry-run--dry-run参数只预览不执行。这一步的目的是让你心里有数避免在没看清单的情况下直接升级几十个包结果把桌面环境或者某个正在用的驱动搞坏了。特别是带kylin-前缀的系统组件要格外留意。第三步挑一个常用软件实测安装sudo apt install htop如果 htop 能正常装上说明换源后的整个链路是通的后面再用其他软件就不会有大问题了。2.4 应用商店和源之间的联动关系很多用户反馈“应用商店打不开”“软件一直下载中”然后把问题归咎于系统。这里要说明一下麒麟的应用商店有独立的更新通道但底层依然依赖 apt 源。如果你换了源之后应用商店还是一直转圈建议去/etc/apt/sources.list.d/看看有些版本的商店源是单独存放的同样需要一并进行替换或调整。另外应用商店里某些软件在命令行里也能装对应的包名可能和你预想的不一样。遇到商店里下载卡住的情况可以先在命令行里搜一下包名用 apt 装往往更快更稳定。3. 开发环境也跟着换pip、npm、conda系统源换完之后很多人容易忽略开发环境自身带的包管理器。它们默认指向的公共源在某些办公网络里又慢又容易断换源后的体验差异非常明显。3.1 pip 换源的正确姿势pip 换源我习惯直接写配置文件不依赖命令行参数临时指定。因为临时指定参数只对当前命令生效写进配置文件才是一劳永逸。配置文件的位置有讲究个人配置是~/.config/pip/pip.conf或~/.pip/pip.conf全局配置是/etc/pip.conf。不确定当前系统读的是哪个先跑下面这条命令看实际读取路径pip config debug用起来最顺手的配置写法是[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple trusted-host pypi.tuna.tsinghua.edu.cn disabled-pip-version-check true保存后执行pip config list确认生效。之后安装 Python 包的速度提升会非常明显之前动不动要等一分钟的pip install requests换完源基本几秒搞定。国内可用的 PyPI 镜像不止清华一家列个参考表镜像站地址清华 TUNAhttps://pypi.tuna.tsinghua.edu.cn/simple阿里云https://mirrors.aliyun.com/pypi/simple/腾讯云https://mirrors.cloud.tencent.com/pypi/simple/中科大 USTChttps://pypi.mirrors.ustc.edu.cn/simple/选哪个没有标准答案建议都试一次选你认为最稳的。如果是在内网环境还可以自己搭一个私有 PyPI 源团队共享效率最高这个属于进阶玩法后面单独讲。3.2 npm 源切换npm 换源比 pip 更简单只需要记住两条命令npm config set registry https://registry.npmmirror.com npm config get registry第一条设置全局 registry第二条验证是否生效。这里特别提醒一下npmmirror 是淘宝 npm 镜像的新域名老域名registry.npm.taobao.org已经停止同步网上很多旧教程还在用老域名容易踩坑。如果项目里有.npmrc文件项目级的 registry 配置会覆盖全局配置这一点在排查“为什么换了源还是慢”的时候要记住。同样的方法也适用于 yarn 和 pnpm它们各自有对应的 config 命令但核心改动都是指向同一个国内镜像地址。3.3 conda 换源和 channel 顺序conda 在数据分析场景里太常见了但它的源配置有点绕。核心思路是添加国内镜像 channels然后把defaults关掉或者移动到最末尾否则 conda 还是会先去访问默认源。推荐命令conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_urls yes conda config --remove channels defaults前两条把自己常用的 channel 加到最前面第三条让 conda 显示每个包来自哪个源方便排查第四条是去掉默认源。如果之后遇到环境解析很慢先检查~/.condarc文件确认 channel 顺序、有没有残留的defaults。conda 这种工具源配置出问题的表现通常不是直接报错而是“卡在 Solving environment”半天没动静这其实就是在反复尝试不可达的地址需要手动清理配置。4. 离线环境怎么用“源”离线安装 nginx 的思路换源这个话题往深处走必然会遇到一类特殊场景目标机器完全不能访问外网甚至内网也没有可用的软件源。最常见的任务就是离线安装 nginx、离线装 Python 包。这里以离线安装 nginx 为例把三种可行思路讲清楚。4.1 思路一把 deb 依赖包连带搬过去这是最简单直接的方法适合目标机器和源机器都是同版本银河麒麟的场景。在一台能联网的同版本麒麟机器上先更新源然后执行sudo apt update mkdir /tmp/nginx-pkgs sudo apt-get install --download-only nginx cp /var/cache/apt/archives/*.deb /tmp/nginx-pkgs/--download-only是核心参数它只下载不安装下载好的 deb 包会缓存在/var/cache/apt/archives/下。把这些 deb 文件打包传输到离线机器然后在目标机器上执行cd /tmp/nginx-pkgs sudo dpkg -i *.deb如果 dpkg 提示某些依赖缺失说明目标机器上缺的包不在下载列表里需要用apt-cache depends配合递归参数再补一轮依赖。更稳妥的做法是在目标机器上用sudo apt install ./*.deb让 apt 自己把依赖关系理清楚。这个方法的关键是两边系统版本要一致。跨版本移植 deb 包容易碰到动态库版本对不上的问题比如在 V10 SP1 上下载的包拿到 V10 SP3 上装可能就报libssl.so.1.1 not found之类的错误。4.2 思路二源码编译安装如果离线机器上连对应的 deb 包仓库都没有那就回到传统路线——源码编译。编译 nginx 需要准备三样东西nginx 源码、编译工具链gcc、make 等、依赖库的开发包pcre2、zlib、openssl 等。在离线环境里工具链本身就是一个难题所以这个方案适合机器上已经装了 gcc 的环境或者你提前把编译工具链都搬了过去。下载源码后在离线机器上执行tar -xzf nginx-1.26.0.tar.gz cd nginx-1.26.0 ./configure --prefix/usr/local/nginx --with-http_ssl_module make -j$(nproc) sudo make install编译安装很灵活可以按需裁剪模块但坑也不少。最常见的是./configure阶段提示缺少某个库此时只能去下载对应库的源码再编一遍。所以离线编译前一定要在联网机器上把依赖先列清楚能省很多来回。4.3 思路三Docker 镜像搬运与内网源如果离线机器上有 Docker 环境第三种思路更省心在联网机器上拉一个现成的 nginx 镜像打包带走docker pull nginx:stable docker save nginx:stable -o nginx.tar把nginx.tar复制到离线机器然后执行docker load -i nginx.tarDocker 镜像本质上就是一个把“所有运行依赖”都打包好的软件源它规避了系统源版本不匹配的问题在离线环境里特别实用。唯一的门槛是目标机器需要先有 Docker 环境否则这个方案也走不通。如果整个内网有成百上千台机器要装软件拷贝镜像的玩法就不够看了正规做法是在内网搭一个软件源镜像比如用 aptly 同步麒麟仓库或者用 devpi 同步 Python 包。所有内网机器把源地址指向内网服务器这在生产环境里是更可维护的方案也是“换源”思路的进阶形态。5. 换源后常见问题排查与避坑清单5.1 高频报错速查表换源后遇到的报错五花八门但大多数都能归到下面几类整理成表方便对照报错信息常见原因处理办法404 Not Found源路径或发行版代号与系统版本不匹配重新核对 V10 后面的 SP 版本检查镜像站目录NO_PUBKEY仓库公钥未导入用 apt-key/gpg 导入对应公钥Hash Sum mismatch镜像同步不完整或本地缓存损坏sudo apt clean后重新 update或换镜像站Could not get lock /var/lib/dpkg/lock-frontend有 apt/dpkg 进程正在运行找到并结束占用进程或重启后重试Package has no installation candidate软件源里没有该包或组件未开启检查是否启用了 universe/multiverse 组件Conflicting distributionssources.list 混合了不同版本去除多余的源只保留本版本对应的源EXPKEYSIG 或过期签名仓库公钥过期重新获取该仓库的最新公钥导入这些报错覆盖了换源后 90% 以上的异常照着处理基本能解决。5.2 几条踩过坑才懂的经验最后分享几条我自己在实际操作中积累的经验。第一换源之后千万别急着执行apt full-upgrade要先在apt upgrade前查看待升级的包列表。麒麟系统有些组件和桌面环境强绑定无脑升级可能把桌面搞崩。我遇到过一台机器换完源后跑了 full-upgrade重启后图形界面起不来最后只能恢复快照从那以后我再也不在麒麟系统上跑 full-upgrade 了。第二不要同时开几个镜像源反复横跳。不同镜像的同步进度不一样某些仓库文件可能一个镜像已经更新了、另一个还没同步这时候来回切源容易引发 Hash Sum mismatch。不如固定一个稳定的源测试没问题后就一直用下去。第三遇到依赖错误不要想着重装系统先执行下面的命令大多数问题都能自动修复sudo apt --fix-broken install我见过不少反馈“银河麒麟系统太烂了、软件装不上”的案例最后查来查去大部分就是源没配好导致的依赖问题。系统有它自己的问题但换源这个动作本身是可靠且必要的把源这一步做对了后续能省非常多力气。第四配置改完如果 apt update 一直慢可以用curl -I来测试源站连通性直接看响应时间是否正常。有时候慢的问题不在源而在本机 DNS 解析这时候改源不如改/etc/resolv.conf里的 DNS 服务器来得更直接。
返回列表