脚本自动部署本地YUM源+Apache配置

分享一个部署本地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

相关推荐
pluvium274 小时前
记对 xonsh shell 的使用, 脚本编写, 迁移及调优
linux·python·shell·xonsh
ShineWinsu2 天前
对于Linux:文件操作以及文件IO的解析
linux·c++·面试·笔试·io·shell·文件操作
Cyber4K4 天前
【Shell专项】循环及交互的使用
linux·shell
vangie12 天前
你还在手敲长命令?这个 Shell 插件帮你自动提醒别名和现代替代工具
shell·命令行
哈里谢顿15 天前
服务器操作卡顿问题解决
shell
狂龙骄子19 天前
CentOS查看压缩包文件列表
shell·rar·7-zip·cygwin·7z·压缩包文件列表·查看压缩包
波特率1152001 个月前
bash命令进阶学习(Shell 元字符)
linux·bash·shell
阿常呓语1 个月前
Linux命令 jq详解
linux·运维·shell·jq
buhuimaren_1 个月前
Shell循环语句
shell
IMPYLH1 个月前
Bash 的 basenc 命令
linux·运维·服务器·bash·shell