基于Centos7.9的一键部署本地/远端/局域网Yum源脚本解析:原理、实战与避坑指南

一、原理

1.1 Yum源工作原理

Yum(Yellowdog Updater Modified)是RPM包管理器的高级封装工具,通过解析软件包的元数据依赖关系,自动解决软件安装时的依赖问题。其核心要素包括:

  • 仓库元数据:包含软件包列表、依赖关系、版本信息

  • 仓库路径:支持file://(本地)、http://(网络)、ftp://等多种协议

  • 缓存机制:通过makecache生成元数据缓存加速查询

1.2 三种部署模式对比

类型适用场景核心原理优势
本地Yum源无外网环境/快速安装挂载系统镜像ISO文件无需网络,速度快
远端Yum源常规服务器环境使用云镜像站仓库地址版本新,包全
局域网Yum源多节点内网环境HTTP服务共享仓库目录统一管理,节省带宽

二、背景

2.1 背景需求

  • 离线环境部署:物理隔离环境需安装基础软件

  • 加速软件安装:解决官方源访问慢的问题

  • 统一内网管理:批量设备使用相同软件版本

2.2 脚本设计目标

  • 自动化完成三种Yum源部署

  • 降低人工配置出错概率

  • 支持主流通用镜像源切换

三、部署步骤详解

3.1 本地Yum源部署流程

# 脚本执行逻辑:
1. 创建挂载点:/mnt/cdrom
2. 挂载ISO镜像:mount /dev/cdrom
3. 备份原repo配置
4. 创建local.repo配置文件
5. 重建Yum缓存

3.2 远端镜像源切换

# 支持的镜像站: 
- 阿里云:https://mirrors.aliyun.com
- 腾讯云:http://mirrors.cloud.tencent.com
- 清华源:https://mirrors.tuna.tsinghua.edu.cn
# 关键命令: wget -O /etc/yum.repos.d/CentOS-Base.repo [镜像URL]

3.3 局域网Yum源搭建

# 实现步骤:
1. 安装配置Apache:yum install httpd -y
2. 共享仓库目录:/var/www/html/yum-local/
3. 生成客户端配置文件
4. 全网段开放防火墙:
   firewall-cmd --permanent --add-service=http
   firewall-cmd --reload

四、常见问题与解决方案

4.1 挂载光盘失败

# 现象:
mount: /dev/sr0 is write-protected, mounting read-only
mount: no medium found on /dev/sr0

# 解决方案:
1. 确认虚拟机已连接ISO镜像文件
2. 检查设备路径:lsblk查看光盘设备
3. 重载设备:echo " - - -" > /sys/class/scsi_host/host0/scan

4.2 镜像源下载失败

# 错误提示:
Could not resolve host: mirrors.cloud.tencent.com

# 处理步骤:
1. 检查DNS配置:cat /etc/resolv.conf
2. 测试网络连通性:ping -c 4 114.114.114.114
3. 更换下载工具:curl -O 替代wget

4.3 局域网客户端无法访问

# 排障流程:
1. 服务端检测:systemctl status httpd
2. 端口检测:netstat -tunlp | grep :80
3. 客户端测试:curl http://server-ip/yum-local/
4. 关闭SELinux(临时):
   setenforce 0

五、总结与心得

5.1 实践收获

  • 灵活应对多场景:通过脚本实现三种部署模式的快速切换

  • 配置文件优先级:理解/etc/yum.repos.d/目录下.repo文件的读取顺序

  • 自动化运维思维:减少重复劳动,提升部署效率

5.2 优化建议

  • 增加镜像完整性校验(如sha256检查)

  • 实现局域网源自动同步功能

  • 添加HTTPS支持增强安全性

5.3 使用注意事项

  1. 部署前务必进行配置备份

  2. 局域网部署需统一所有客户端的时间

  3. 定期执行yum clean all清理旧缓存

>> 脚本获取 

#!/bin/bash
# 一键部署本地/远端/局域网Yum源脚本
# 最后更新:2024.12.22

# 颜色定义
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
RESET='\033[0m'

# 检查root权限
if [[ $EUID -ne 0 ]]; then
   echo -e "${RED}错误:此脚本必须以root身份运行${RESET}"
   exit 1
fi

# 错误处理函数
check_command() {
    if [ $? -ne 0 ]; then
        echo -e "${RED}错误:$1 执行失败${RESET}"
        exit 1
    fi
}

# 本地Yum源部署
function bendi(){
    echo -e "${YELLOW}[开始部署本地Yum源]${RESET}"
    
    # 创建挂载目录
    mkdir -p /mnt/cdrom 2>/dev/null
    check_command "创建挂载目录"
    
    # 挂载光盘
    echo -e "${YELLOW}正在挂载光盘...${RESET}"
    mount /dev/cdrom /mnt/cdrom || {
        echo -e "${RED}光盘挂载失败!请检查:"
        echo -e "1. 虚拟机是否已加载ISO镜像"
        echo -e "2. 物理机是否插入安装光盘${RESET}"
        exit 1
    }
    
    # 备份原配置
    mkdir -p /etc/yum.repos.d/backup
    mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2>/dev/null
    
    # 创建本地repo文件
    cat > /etc/yum.repos.d/local.repo << EOF
[local]
name=Local CD-ROM
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
EOF

    # 重建缓存
    echo -e "${YELLOW}正在重建Yum缓存...${RESET}"
    yum clean all >/dev/null
    yum makecache >/dev/null
    check_command "Yum缓存重建"
    
    echo -e "${GREEN}本地Yum源部署成功!${RESET}"
}

# 远端Yum源部署
function yuanduan(){
    # 阿里云源
    function aliyun(){
        echo -e "${YELLOW}正在配置阿里云源...${RESET}"
        wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
        check_command "下载阿里云Repo文件"
    }
    
    # 腾讯云源
    function tenxun(){
        echo -e "${YELLOW}正在配置腾讯云源...${RESET}"
        wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
        check_command "下载腾讯云Repo文件"
    }
    
    # 清华源
    function qinghua(){
        echo -e "${YELLOW}正在配置清华源...${RESET}"
        wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/repo/Centos-7.repo
        check_command "下载清华源Repo文件"
    }
    
    echo "请选择镜像源:"
    echo "1. 阿里云"
    echo "2. 腾讯云"
    echo "3. 清华大学"
    read -p "请输入选项(1-3): " choice
    
    case $choice in
        1) aliyun ;;
        2) tenxun ;;
        3) qinghua ;;
        *) 
            echo -e "${RED}无效选项,退出脚本${RESET}"
            exit 1
            ;;
    esac
    
    # 重建缓存
    yum clean all >/dev/null
    yum makecache >/dev/null
    check_command "Yum缓存重建"
    
    echo -e "${GREEN}远端Yum源配置成功!${RESET}"
}

# 局域网Yum源部署
function jyw(){
    echo -e "${YELLOW}[开始部署局域网Yum源]${RESET}"
    
    # 获取源目录
    read -p "请输入本地Yum源目录路径:" YUM_SOURCE_DIR
    [ ! -d "$YUM_SOURCE_DIR" ] && {
        echo -e "${RED}错误:目录不存在或不可访问${RESET}"
        exit 1
    }
    
    # 安装Apache
    echo -e "${YELLOW}正在安装Apache服务...${RESET}"
    yum install -y httpd
    check_command "Apache安装"
    
    # 配置防火墙
    echo -e "${YELLOW}配置防火墙规则...${RESET}"
    firewall-cmd --permanent --add-service=http
    firewall-cmd --reload
    
    # 启动服务
    systemctl start httpd
    systemctl enable httpd
    
    # 创建发布目录
    WEB_DIR="/var/www/html/yum-local"
    mkdir -p $WEB_DIR
    
    # 同步文件
    echo -e "${YELLOW}正在同步Yum仓库文件...${RESET}"
    rsync -av $YUM_SOURCE_DIR/ $WEB_DIR/
    check_command "文件同步"
    
    # 生成repo文件
    LOCAL_IP=$(hostname -I | awk '{print $1}')
    cat > /etc/yum.repos.d/local.repo << EOF
[local-lan]
name=Local LAN Repository
baseurl=http://$LOCAL_IP/yum-local
enabled=1
gpgcheck=0
EOF
    
    echo -e "${GREEN}局域网Yum源部署完成!客户端可使用以下地址访问:"
    echo -e "http://$LOCAL_IP/yum-local${RESET}"
}

# 主菜单
while true; do
    clear
    echo -e "${YELLOW}=== Yum源部署工具 ===${RESET}"
    echo "1. 部署本地Yum源"
    echo "2. 切换远端镜像源"
    echo "3. 搭建局域网Yum源"
    echo "4. 退出"
    read -p "请输入选项(1-4): " main_choice
    
    case $main_choice in
        1) bendi ;;
        2) yuanduan ;;
        3) jyw ;;
        4) 
            echo -e "${GREEN}已退出脚本${RESET}"
            exit 0
            ;;
        *) 
            echo -e "${RED}无效选项,请重新输入${RESET}"
            sleep 1
            ;;
    esac
    
    read -n1 -p "按任意键继续..."
done

### 安装和配置OpenStack于单台计算机 #### 准备工作 为了在单一机器上成功部署OpenStack,需先准备操作系统环境。推荐使用CentOS作为基础操作系统[^3]。 ```bash # 下载并安装CentOS 7.9 ISO文件到目标计算机 wget https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso ``` 完成系统安装后,应调整主机名以便识别各个服务角色。对于仅有的这台设备而言,可命名为`all-in-one.tedu.cn`来表示这是一个集成所有功能的角色[^1]: ```bash echo all-in-one.tedu.cn > /etc/hostname hostname all-in-one.tedu.cn ``` 网络接口也需要相应修改以适应新命名方案,并确保静态IP地址已正确分配给该机器用于后续通信需求: ```bash vim /etc/sysconfig/network-scripts/ifcfg-eth0 ``` 更新后的网络脚本应当包含如下字段(假设使用的网卡名称为`eth0`): ```plaintext DEVICE="eth0" ONBOOT="yes" IPV6INIT="no" IPV4_FAILURE_FATAL="no" NM_CONTROLLED="no" TYPE="Ethernet" BOOTPROTO="static" IPADDR="192.168.1.10" # 这里填写实际可用的内部局域网IPv4地址 PREFIX=24 # 子网掩码长度 GATEWAY=192.168.1.254 # 默认网关地址 DNS1=8.8.8.8 # 可选:指定首选DNS服务器 ``` 重启网络服务使更改生效: ```bash systemctl restart network ``` #### 时间同步设置 由于OpenStack依赖精确的时间戳来进行分布式计算资协调,因此必须保证整个集群内各节点间时间的一致性。通过安装NTP客户端实现这一点,在此之前确认已经启用了EPEL仓库[^2]: ```bash yum install epel-release -y yum install ntp -y systemctl enable ntpd.service systemctl start ntpd.service ``` #### 部署OpenStack平台 针对个人学习目的或小型测试场景下的快速入门体验,官方提供了多种简易化工具集帮助简化复杂度较高的生产级部署流程。其中DevStack是最受欢迎的选择之一因为它能够自动化大部分必要的配置过程并且支持丰富的自定义选项满足特定实验要求。 首先克隆最新的代码库至本地路径下: ```bash git clone https://opendev.org/openstack/devstack.git ~/devstack cd ~/devstack ``` 接着编辑样例配置文档(stackrc),依据实际情况定制参数比如数据库密码、RabbitMQ消息队列认证信息等细节部分;特别需要注意的是要开启多租户模式以及允许浮动IP范围内的外部访问权限[^4]。 最后执行栈构建命令启动全部核心组件和服务进程: ```bash ./stack.sh ``` 当看到提示符返回即意味着基本框架搭建完毕,此时可以通过浏览器打开Horizon仪表板界面进一步探索更多高级特性和管理功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东窗西篱梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值