搭建本地yum/apt源实现离线软件安装
当服务器处于内网环境无法访问公网时,通过搭建本地yum或apt源,让局域网内其他机器能像有网一样安装更新包。
本文以CentOS 7(yum)和Ubuntu 20.04(apt)为例,手把手带你在离线环境下完成源搭建与使用。
准备工作:你需要什么?
你需要一台能上网的机器(用于下载仓库包),以及一台离线目标机器(或整个内网机器)。
- 用于下载的机器建议有足够磁盘空间(至少10GB用于常用仓库)。
- 离线机器需能通过局域网访问下载机上的共享目录(如NFS、HTTP或直接挂载ISO)。
- 如果使用云服务器做下载机,例如泽御云(zeyuyun.com) 提供的云服务器,其带宽稳定,适合快速同步仓库。
搭建本地yum源(适用于CentOS/RHEL 7/8)
1. 同步官方仓库到下载机
# 创建仓库目录
mkdir -p /var/repo/centos/7/os/x86_64
# 使用reposync同步base源(只同步必要的包)
yum install -y yum-utils createrepo
reposync -r base -p /var/repo/centos/7/os/x86_64
createrepo /var/repo/centos/7/os/x86_64
如果只需要关键软件包,可以只同步base源,其他源如extras、updates按需添加。
2. 通过HTTP暴露仓库
安装nginx或httpd,配置站点根目录为/var/repo,然后启动服务。
yum install -y nginx
systemctl start nginx
# 确保防火墙放行80端口
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
3. 在离线客户端配置yum源
编辑/etc/yum.repos.d/local.repo:
[local-base]
name=Local CentOS Base
baseurl=http://<下载机IP>/centos/7/os/x86_64
gpgcheck=0
enabled=1
然后执行yum clean all && yum makecache验证。
搭建本地apt源(适用于Ubuntu/Debian)
1. 同步官方仓库
# 安装依赖
apt install -y apt-mirror apache2
# 配置镜像下载内容
# 编辑 /etc/apt/mirror.list
############# 配置参考 #############
# set base_path /var/spool/apt-mirror
# set nthreads 20
# set _tilde 0
# deb http://archive.ubuntu.com/ubuntu focal main restricted universe multiverse
# deb-src http://archive.ubuntu.com/ubuntu focal main restricted universe multiverse
# 清理命令
#############
# 执行同步(耗时较长)
apt-mirror
同步完成后,包会存放在/var/spool/apt-mirror/mirror/archive.ubuntu.com/ubuntu/。
2. 配置Web访问
将Apache根目录指向该路径:
ln -s /var/spool/apt-mirror/mirror/archive.ubuntu.com /var/www/html/ubuntu
systemctl restart apache2
3. 离线客户端配置apt源
编辑/etc/apt/sources.list,注释掉所有行,添加:
deb http://<下载机IP>/ubuntu focal main restricted universe multiverse
然后apt update测试。
踩坑记录:依赖缺失与路径陷阱
- 依赖包不全:同步时只同步了base源,但某些软件依赖来自updates或security源。建议在mirror.list中加入
deb http://archive.ubuntu.com/ubuntu focal-updates main restricted等行。 - GPG签名问题:设置
gpgcheck=0(yum)或[trusted=yes](apt)可临时绕过,生产环境建议保留签名并导入公钥。 - 磁盘空间不足:同步前用
df -h检查空间,否则中途失败。 - 权限错误:确保Apache对仓库目录有读取权限(
chmod -R 755 /var/repo)。
效果验证与常见问题
验证方法:在客户端执行yum install -y httpd或apt install -y nginx,观察是否从本地源下载。
FAQ
- 问:一台下载机可以同时供yum和apt使用吗?
答:可以,分别在不同子目录存放rpm和deb包,通过不同URL路径区分即可。
- 问:仓库同步过程中断怎么办?
答:重新执行reposync或apt-mirror,会自动续传未完成的文件。
- 问:客户端配置后提示404错误?
答:检查baseurl路径是否指向了正确的子目录。
yum源需包含repodata目录,apt源需包含dists和pool目录。
- 问:能否只同步特定软件包?
答:可以。
yum用reposync -r base -p /path --download-metadata加上--downloadcomps参数;
apt用apt-get download <包名>或apt-rdepends手动收集依赖,但较复杂。
按上述步骤操作,即使在内网环境也能像有网一样轻松安装软件。
遇到报错优先检查网络连通性、目录权限和路径配置,多试几次就能搞定。