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

相关推荐
纵有疾風起2 天前
【Linux 系统开发】基础开发工具详解:软件包管理器、编辑器。编译器开发实战
linux·服务器·开发语言·经验分享·bash·shell
gis分享者4 天前
Shell 脚本中如何使用 here document 实现多行文本输入? (中等)
shell·脚本·document·多行·文本输入·here
柏木乃一4 天前
基础IO(上)
linux·服务器·c语言·c++·shell
angushine4 天前
CPU脚本并远程部署
shell
赵民勇9 天前
Linux/Unix中install命令全面用法解析
linux·shell
gis分享者10 天前
Shell 脚本中如何使用 trap 命令捕捉和处理信号(中等)
shell·脚本·信号·处理·trap·捕捉
IT 乔峰10 天前
脚本部署MHA集群
linux·shell
牛奶咖啡1313 天前
shell脚本编程(一)
linux·shell·shell脚本·shell脚本解析·grep命令语法·grep选项详解·正则表达式解析
gis分享者15 天前
请解释 Shell 脚本中的重定向(redirection)操作及其用途(中等)
shell·脚本·重定向·操作·用途·redirection
我是koten15 天前
K8s启动pod失败,日志报非法的Jar包排查思路(Invalid or corrupt jarfile /app/xxxx,jar)
java·docker·容器·kubernetes·bash·jar·shell