分享一个部署本地YUM源的脚本:
#!/bin/bash
==============================================================
一键配置本地 YUM 源 Web 服务(CentOS 7)
功能:强制删除旧 repodata 并重新生成 + 配置 Apache
路径:/opt/centos_7/{base,epel,updates,k8s,...}
IP:192.168.10.99
==============================================================
#REPO_ROOT="/opt/centos_7"
#SERVER_IP="192.168.10.99"
#CONF_FILE="/etc/httpd/conf.d/local-repo.conf"
#HTTPD_LOG="/var/log/httpd/error_log"
set -e # 遇错退出
read -ep "请输入YUM源仓库路径,如/opt/centos/7.9/base/Packages,那请输入/opt/centos/7.9" REPO_ROOT
read -ep "请输入你的YUM源服务器IP地址:" SERVER_IP
CONF_FILE="/etc/httpd/conf.d/local-repo.conf"
HTTPD_LOG="/var/log/httpd/error_log"
echo "🚀 开始配置本地 YUM 源(强制重建 repodata)..."
1. 安装依赖
yum install -y httpd createrepo
#2.关闭防火墙、关闭强制访问控制、修改当前时区
systemctl disable firewalld --now &>/dev/null && echo "防火墙已关闭"
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config &>/dev/null && echo "访问控制已经关闭"
#修改当前时间
timedatectl set-timezone Asia/Shanghai && echo "时区已经修改为:Asia/Shanghai"
3. 强制重建每个仓库的 repodata
echo "🔄 强制重建所有仓库的 repodata..."
for dir in "$REPO_ROOT"/*; do
if [ -d "$dir" ]; then
repo_name=(basename "dir")
跳过 .repo 文件(如 tommypeng.repo)
if [[ "$repo_name" == *.repo ]]; then
echo " ⚠️ 跳过非目录: $repo_name"
continue
fi
echo " ➤ 处理仓库: $repo_name"
cd "$dir"
删除旧 repodata(如果存在)
if [ -d "repodata" ]; then
echo " 🗑️ 删除旧 repodata/"
rm -rf repodata
fi
重新生成
echo " 🔨 重新生成 repodata..."
createrepo .
echo " ✅ 完成: $repo_name"
fi
done
3. 创建 Apache 配置
cat > "$CONF_FILE" <<EOF
Alias /centos_7 $REPO_ROOT
<Directory "$REPO_ROOT">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
EOF
6. 重载 Apache
systemctl reload httpd
7. 本地验证
echo "🔍 验证本地访问..."
if curl -sf http://localhost/centos_7/base/repodata/repomd.xml >/dev/null; then
echo "✅ 仓库 Web 服务已就绪!"
else
echo "❌ 访问失败,请检查 /var/log/httpd/error_log"
exit 1
fi
echo "----------------------------------------"
echo "🌐 仓库地址: http://$SERVER_IP/centos_7/"
local_yum(){
echo "生成本地repo文件至/etc/yum.repos.d/路径下"
echo "----------------------------------------"
echo ""
echo "📋 客户端 repo 配置示例(保存为 /etc/yum.repos.d/my_local.repo):"
cat >/etc/yum.repos.d/my_local.repo <<EOF
local-base
name=Local CentOS Base
baseurl=http://$SERVER_IP/centos_7/base/
enabled=1
gpgcheck=0
local-epel
name=Local EPEL
baseurl=http://$SERVER_IP/centos_7/epel/
enabled=1
gpgcheck=0
local-updates
name=Local Updates
baseurl=http://$SERVER_IP/centos_7/updates/
enabled=1
gpgcheck=0
local-k8s
name=Local Kubernetes
baseurl=http://$SERVER_IP/centos_7/k8s/
enabled=1
gpgcheck=0
EOF
}
while true;do
echo "是否要我帮你生成你其他服务器的源仓库配置文件?1:需要 2.退出"
read -ep "请选择:" choice
case $choice in
local_yum
if [ -f /etc/yum.repos.d/my_local.repo ];then
echo "已经生成,复制到需要使用的机器/etc/yum.repos.d/路径并在备份后删除其他的.repo文件"
else
echo "未生成成功"
exit 1
fi
;;
exit 0
;;
*)
echo "选择有误,请选择有效选项(1 or 2)"
;;
esac
done