脚本自动部署本地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

相关推荐
哈哈~haha13 小时前
Step 12: Shell Control as Container && Step 13:Margins and Paddings 使用CSS类对页面美化
shell·margin·ui5·paddings
小兔薯了14 小时前
3.Shell 变量基础知识
shell
pingzhuyan16 小时前
linux常规(shell脚本)-启动java程序-实现快捷git拉取,maven打包,nohup发布(无dockerfile版)
java·linux·git·maven·shell
小兔薯了1 天前
3. sed 使用手册
shell
ChrylZzz2 天前
bash和zsh
bash·shell·zsh
gis分享者2 天前
如何在 Shell 脚本中实现字符串的截取和拼接?(容易)
面试·字符串·shell·拼接·截取
零日失眠者2 天前
【文件管理系列】001:文件批量重命名工具
后端·shell
moringlightyn2 天前
进程控制(程序替换+自定义Shell)
linux·服务器·c++·笔记·c·shell·进程
我在人间贩卖青春3 天前
shell及基本命令
shell