
最近几年的时间,国产操作系统的话题是真的热。信创采购规模不断攀升、银河麒麟V11带着全新磐石架构重磅发布,越来越多企业和政务单位把银河麒麟作为主力操作系统,内网安全管控也越来越严格。随之而来的一个很现实的问题很多业务服务器压根不能连外网。 在这种环境下,软件包的安装和更新怎么办?今天,咱们就来聊聊怎么用 apt-mirror 这个神器,在内网搭建一个属于自己的软件源。
为什么需要内网软件源?
在没有内网源的情况下,离线安装软件主要有三种“野路子”:
手动下载 deb 包:dpkg -i 安装,然后被层层依赖折磨到崩溃 挂载系统 ISO:只能装镜像里自带的那几个包,覆盖面极其有限 编译安装:耗时极长,而且要先装编译工具链——这本身又是一个鸡生蛋的问题
而一旦有了内网软件源,所有设备统一指向内网服务器,apt update && apt install 一条龙,依赖自动解析,版本统一可控。
apt-mirror是什么宝贝?
一句话:它是一个轻量高效的工具,能把远程APT仓库整个“搬”到你本地。基于Perl脚本实现,支持多线程下载、多架构同步,而且永远不会产生不一致的镜像。
通俗理解——它就像迅雷,但只下载软件包,而且一旦下完,你局域网里所有人都能用局域网速度装软件,飞一般的感觉。
实操:三步搭好内网源
环境准备
一台能联网的银河麒麟服务器(V10 SP1/SP2均可) 大容量硬盘(建议200G+,麒麟源挺大的) 内网其他机器能和该服务器互通
第 0 步:搞清楚你的系统版本
在开始之前,一定先把系统版本和架构搞清楚。在终端执行:
cat /etc/.kyinfo # 查看版本号,比如 V10 SP1 2503dpkg --print-architecture
这步非常关键——不同版本号对应的源地址不一样,配错了后面全是白忙活。
第 1 步:在有网机器上安装和配置 apt-mirror
找一台能上外网的主机,安装 apt-mirror:
sudo apt updatesudo apt install apt-mirror -y
就这么简单。装完你会感叹:工具虽小,能解千愁。核心配置在/etc/apt/mirror.list文件。这个文件的格式和sources.list几乎一模一样,你把要同步的源地址写进去就行,我示例的只是基础软件源,如果需要更新等的软件源,添加一并同步就行。比如银河麒麟 V10 SP1 2503 版本:
########## 路径 ##########set base_path /data/apt-mirrorset mirror_path $base_path/mirrorset skel_path $base_path/skelset var_path $base_path/varset cleanscript $var_path/clean.sh########## x86 ##########set nthreads 4set _tilde 0set limit_rate 30mset defaultarch amd64########## 软件源地址 ##########deb-amd64 http://archive.kylinos.cn/kylin/KYLIN-ALL 10.1-kylin main restricted universe multiverse########## 清理 ##########clean http://archive.kylinos.cn/kylin/KYLIN-ALL
几点说明:
set base_path: 指定同步文件的存放目录,确保磁盘空间充足 set nthreads 20 : 设置 20 个并发下载线程,速度更快但别设太高以免被限流 clean: 加在源地址后面可以自动清理远程已删除的旧包
配置完成后,一行命令开始同步:
sudo apt-mirror
然后——然后可以去喝喝咖啡。根据网络带宽和仓库大小,这个过程可能要跑几个小时甚至更久。
第 2 步:搭建 HTTP 服务,把本地目录变成内网源
同步完成后,/data/apt_mirror 下已经有了完整的仓库结构。接下来用 Apache 或 Nginx 把它发布出去。
以 Nginx 为例,在配置文件中加一个 location:
server { listen 80; server_name 192.168.88.96; # 换成你的内网 IP location / { root /data/apt_mirror/mirror; autoindex on; }}
重启 Nginx 后,浏览器访问 http://192.168.88.96 能看到目录列表,就说明服务跑起来了。
第 3 步:客户端配置,指向内网源
在内网的每台麒麟设备上,备份并修改 /etc/apt/source.list:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.baksudo vim /etc/apt/sources.list
把内容替换成:
deb[trusted=yes] http://192.168.88.96/archive.kylinos.cn/kylin/KYLIN-ALL 10.1 main restricted universe multiverse
然后更新索引:
sudo apt update
出现“软件包列表已更新”的提示,就大功告成了。试着装个软件:
sudo apt install nginx -y
全自动下载安装,依赖一条龙解决——这就是内网源带来的丝滑体验。
那些年我踩过的坑(必看)
搭源的过程看似简单,但实际中总有各种小惊喜。下面是我踩过的坑,分享出来帮你省几根头发。
架构不匹配:跨架构同步等于折磨自己,务必在目标架构机器上操作,直接写 arm64 或 amd64 路径。 磁盘内存空间告急:建议至少预留500GB,特别是多版本同步时。目录指定到数据盘,别把系统盘撑爆了。还要时刻关注内存,如果磁盘和内存爆了,主机容易死机!!! 同步中断:网络波动可能导致中断,重新执行 apt-mirror 即可,工具支持断点续传。 同步后内网机器用不了:一般是sources.list里版本号配错了。用apt-cache policy 包名 验证一下源是否真正可用。
尾声
其实写完这篇文章,我自己的感受是:搭建内网软件源这件事,看起来是解决“怎么装软件”的问题,本质上是在解决“怎么让一群机器高效协同工作”的问题。一台服务器同步一次,剩下的机器全部就近获取——这不就是最朴素版的“内容分发网络”(CDN)吗?而且,一旦你有了自己的私有源,还能把内部开发的deb包扔进去统一管理,所有机器的版本基线保持一致。好了,今天的分享就到这里。如果你觉得这篇文章对你有帮助,欢迎点赞、在看、转发,点个关注不迷路,持续为你分享IT技术和信创国产化路上的种种妙招。下期我将分享同步内网软件源其他几种方法!
夜雨聆风