ansible批量配置本地yum源的核心是“一台搭源、多台同步”,即先在192.168.10.10部署http服务并挂载/同步仓库(含baseos/appstream或os/updates),再用yum_repository模块统一写入配置、禁用默认源、清理缓存(yum clean all && makecache)、验证repodata可访问且指向本地url。

用 Ansible 批量配置本地 Yum 源,核心是“一台搭源、多台同步”,避免每台机器都走公网下载,既提速又省带宽。关键不在逐台改 repo 文件,而在于统一管理源地址 + 自动分发 + 验证生效。
搭建局域网本地 Yum 源服务器
先选一台主机(如 192.168.10.10)作为源服务器,挂载镜像或同步仓库:
- 挂载光盘镜像:
mount /dev/sr0 /mnt,再复制到 Web 可访问路径,例如cp -r /mnt/* /var/www/html/yum/ - 或用
reposync同步阿里云等远程源(需提前装yum-utils),目录结构要保留BaseOS和AppStream(RHEL/CentOS 8+)或os、updates(CentOS 7) - 启动并放行 HTTP:
systemctl enable --now httpd,firewall-cmd --add-service=http --permanent && firewall-cmd --reload - 浏览器访问
http://192.168.10.10/yum/BaseOS/repodata/,能打开即说明服务就绪
用 yum_repository 模块批量写入源配置
推荐使用 Ansible 原生模块 yum_repository,比拷贝文件更可控、幂等性好、支持动态参数:
- 为 CentOS 7 写 playbook 示例:
- name: 配置本地 Base 源
yum_repository:
name: local-base
description: Local CentOS 7 Base
baseurl: http://192.168.10.10/yum/os/$basearch/
enabled: true
gpgcheck: false
file: local-repo
- name: 配置本地 Updates 源 yum_repository: name: local-updates description: Local CentOS 7 Updates baseurl: https://www.php.cn/link/973e0a48e49acde21a9e0a3463589860 enabled: true gpgcheck: false file: local-repo
-
file: local-repo表示两个源都写入同一文件/etc/yum.repos.d/local-repo.repo,整洁不冲突 - 对 RHEL 8/9,
baseurl改为http://192.168.10.10/yum/BaseOS/和http://192.168.10.10/yum/AppStream/ - 若需禁用默认源,加任务:
shell: sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/*.repo
批量清理缓存并验证可用性
配置完不清理缓存,旧元数据仍会干扰,必须强制刷新:
- 执行
yum clean all清空所有缓存 - 运行
yum makecache或yum makecache fast下载新 repodata - 最后用
yum repolist确认显示的是本地 URL,且状态为 enabled - 可加断言任务确保成功:
command: yum repolist | grep -q "192.168.10.10"
补充:适配不同系统版本的技巧
实际环境中常混用 CentOS 7/8、Rocky 9 等,可用变量提升复用性:
- 在 inventory 中按主机组定义变量,如:
[centos7] server1 ansible_host=192.168.10.11,并在 group_vars/centos7.yml 中设yum_baseurl: "http://192.168.10.10/yum/os/\$basearch/" - playbook 中引用:
baseurl: "{{ yum_baseurl }}",自动适配 - 对需要 GPG 校验的环境,把内网源的 GPG key 放到 HTTP 路径下(如
http://192.168.10.10/RPM-GPG-KEY-CentOS-7),再在模块中指定gpgkey和gpgcheck: true











