Linux搭建本地yum/apt源住宅主机
为什么要在住宅主机上搭建本地软件源
如果你家里有多台 Linux 设备(比如树莓派、旧笔记本当服务器、虚拟机),每次装软件都要从外网下载,不仅慢还浪费带宽。
更麻烦的是,内网环境没有互联网时,连 apt update 都跑不了。
把一台住宅主机变成本地 yum/apt 源,就能让同局域网内的所有机器共享安装包,速度翻倍,而且断网也能正常维护。
准备工作:一台能联网的 Linux 主机
你只需要一台能正常联网的 Linux 主机(Debian/Ubuntu 或 CentOS/RHEL 都行),硬盘剩余空间建议 40GB 以上(如果只同步常用软件包,20GB 也够)。
此外,确保这台主机与客户端在同一个局域网内,并且已开启 SSH 方便操作。
搭建本地 apt 源(面向 Debian/Ubuntu 系列)
第一步:安装同步工具
sudo apt update
sudo apt install apt-mirror nginx -y
apt-mirror 负责从官方源下载软件包,nginx 用来提供 HTTP 访问。
第二步:配置源列表
编辑 /etc/apt/mirror.list,修改以下内容(以 Ubuntu 22.04 为例):
set base_path /var/www/html/ubuntu-mirror
set nthreads 20
set _tilde 0
# 这里填写你需要的发行版和组件
deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
clean http://archive.ubuntu.com/ubuntu
如果你只需基础软件包,保留 main 和 universe 即可。base_path 是存储目录,后续 nginx 直接指向这里。
第三步:执行同步
sudo apt-mirror
首次同步时间较长(根据网速和包数量,可能需要几小时)。
建议放在夜间或空闲时段运行。
第四步:配置 Nginx
将 nginx 的站点根目录指向同步目录:
sudo ln -s /var/www/html/ubuntu-mirror/mirror/archive.ubuntu.com/ubuntu /var/www/html/ubuntu
sudo systemctl restart nginx
现在在本机用 curl http://localhost/ubuntu 应该能看到目录列表。
第五步:配置客户端
在需要装软件的客户端(其他 Linux 机器)上,修改 /etc/apt/sources.list,替换为本地源地址:
deb http://你的服务器IP/ubuntu jammy main restricted universe multiverse
然后执行 sudo apt update,如果成功,说明本地 apt 源搭建完成。
搭建本地 yum 源(面向 CentOS/RHEL 系列)
第一步:安装必要工具
sudo yum install createrepo yum-utils nginx -y
createrepo 用于生成仓库元数据,reposync 用来同步远程仓库。
第二步:同步 CentOS 7 基础源
以 CentOS 7 为例,先建一个目录并同步:
sudo mkdir -p /var/www/html/centos/7
dnf reposync --repoid=base --download-path=/var/www/html/centos/7 --download-metadata
注意:如果你用 CentOS 7,默认包管理器是 yum,但reposync在yum-utils中,命令本身不变。
第三步:生成元数据
sudo createrepo /var/www/html/centos/7
这一步会创建 repodata 目录,yum 客户端必须依赖它才能识别仓库。
第四步:启动 Nginx 并配置仓库暴露
修改 nginx 配置文件,添加一个 location 指向仓库目录:
server {
listen 80;
server_name _;
root /var/www/html;
autoindex on;
}
重启 nginx: sudo systemctl restart nginx
第五步:客户端配置
在客户端新建文件 /etc/yum.repos.d/local.repo,内容如下:
[local]
name=Local CentOS 7 Base
baseurl=http://你的服务器IP/centos/7
enabled=1
gpgcheck=0
运行 sudo yum clean all && sudo yum repolist,如果能列出仓库且数量正确,则本地 yum 源生效。
高频问题与避坑指南
1. 同步期间磁盘空间不足
同步前用 df -h 检查分区剩余空间。
如果不确定,可以只同步 main 或 base 仓库,不要全量同步。
2. 客户端访问失败
- 检查防火墙:确保服务器防火墙放行 80 端口(
sudo ufw allow 80或firewall-cmd --add-service=http)。 - 在客户端用
curl http://服务器IP/ubuntu测试连通性。
3. 同步中断或报错
apt-mirror 支持断点续传,再次执行会继续。
如果网络不稳定,可以降低 nthreads 线程数。
4. GPG 签名问题
在配置本地 yum 源时,gpgcheck=0 跳过签名验证(内网安全可接受)。
如需要签名,需额外导入官方 GPG 密钥。
如何确认源已生效
- 服务端:执行
curl http://localhost/ubuntu或curl http://localhost/centos/7,应返回目录列表。 - 客户端:执行
sudo apt update(apt源)或sudo yum repolist(yum源),能看到新添加的本地仓库。
完成以上步骤后,你的住宅主机就变成了一台内网软件分发中心。
以后所有 Linux 机器安装软件,只需要从这台主机拉取,速度跑满局域网带宽,而且再也不用担心外网挂了。