公司有很多linux虚拟机,绝大部分都是centos7。但是不能连接外网,所以无法直接用yum下载安装软件包。现在需要搭建一台yum服务器,使用rsync同步yum源到本地,修改客户机yum配置,使其通过yum服务器下载更新软件包,

    思路:

    1、yum服务器两块网卡,一块连接公网出口访问外网,一块与其他linux客户机通信    

    2、使用rsync从远程仓库镜像同步到本地yum服务器,拉取centos7、epel和zabbix远程镜像站点yum仓库到本地

    3、yum服务器使用apache配置web服务,服务目录为/opt/yum_data,为其他linux客户机提供仓库web访问     

    4、使用ansible+shell脚本批量更改linux客户yum配置文件,修改yum源地址为本地yum服务器


一、配置yum服务器基础

systemctl stop firewalld.service
systemctl disable firewalld.service
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
setenforce 0
iptables -F
iptables-save

mkdir /opt/yum_data/centos/7/{extras,os,updates}/x86_64 -p    #创建centos7源镜像文件存放目录 
mkdir /opt/yum_data/epel/7/x86_64/ -p                         #创建epel源镜像文件存放目录
mkdir /opt/yum_data/zabbix/ -p                                #创建zabbix源镜像文件存放目录
cd /opt/yum_data/
tree

完成后的目录结构如下图所示


二、配置web服务

yum install httpd
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak    #备份配置文件
vim /etc/httpd/conf/httpd.conf           #编辑配置文件 
DocumentRoot "/opt/yum_data/"  #用搜索 /DocumentRoot 的方法,修改服务器文档根目录为/opt/yum_data
     #修改路径

chown -R apache.apache /opt/yum_data/ #修改目录归属
cd /etc/httpd/conf.d/   
mv conf.d/welcome.conf /tmp     #删除默认主页
systemctl start httpd
systemctl enable httpd #启动apache

使用浏览访问,出现如下表示web服务器配置成功

三、rsync同步yum源

yum install rsync

确认rsync使用的yum源,由于国内好多yum镜像站点如阿里云不支持rsync方式,本次使用中科大的镜像源,一定注意url

CentOS7源:
//mirrors.ustc.edu.cn/centos/7/os/x86_64/
//rsync.mirrors.ustc.edu.cn/centos/7/extras/x86_64/
//rsync.mirrors.ustc.edu.cn/centos/7/updates/x86_64/
EPEL7源:
rsync://mirrors.ustc.edu.cn/epel/7/x86_64/
Zabbix源:
rsync://mirror.tuna.tsinghua.edu.cn/zabbix/

使用rsync同步yum源,注意放在后台运行

rsync -avz --progress --no-motd rsync://mirrors.ustc.edu.cn/centos/7/os/x86_64/ /opt/yum_data/centos/7/os/x86_64/ 
rsync -avz --progress --no-motd rsync://rsync.mirrors.ustc.edu.cn/centos/7/extras/x86_64/ /opt/yum_data/centos/7/extras/x86_64/ 
rsync -avz --progress --no-motd rsync://rsync.mirrors.ustc.edu.cn/centos/7/updates/x86_64/ /opt/yum_data/updates/7/os/x86_64/ 
rsync -avz --progress --exclude=debug --no-motd rsync://mirrors.ustc.edu.cn/epel/7/x86_64/ /opt/yum_data/epel/7/x86_64/ 
rsync -avz --progress --exclude=rhel/7/SRPMS --no-motd rsync://mirror.tuna.tsinghua.edu.cn/zabbix/ /opt/yum_data/zabbix/

可以使用screen命令,为每个rsync创建一个窗口,保证可以长时间后台运行

等待漫长的更新时间


四、安装createrepo

createrepo主要进行此程序主要用于生成创建yum仓库,创建索引信息。

yum install createrepo -y

createrepo /opt/yum_data/centos/7/os/x86_64/
createrepo /opt/yum_data/centos/7/extras/x86_64/
createrepo /opt/yum_data/centos/7/updates/x86_64/
createrepo /opt/yum_data/epel/7/x86_64/
createrepo /opt/yum_data/zabbix/


五、客户机配置修改仓库配置文件和测试

客户机上修改yum配置文件/etc/yum.repos.d/CentOS-Base.repo,为主要的配置文件,其余配置文件中的仓库默认均未启用

cd /etc/yum.repos.d/
cp CentOS-Base.repo CentOS-Base.repo.bak
vim CentOS-Base.repo
===================以下为修改的后配置文件=================
# CentOS-Base.repo
[base]
name=CentOS-$releasever - Base - 172.31.101.100
failovermethod=priority
baseurl=http://172.31.101.100/centos/7/os/x86_64/
gpgcheck=0                            #代表不进行软件包的GPG签名

#released updates
[updates]
name=CentOS-$releasever - Updates - 172.31.101.100
failovermethod=priority
baseurl=http://172.31.101.100/centos/7/updates/x86_64/
gpgcheck=0

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - 172.31.101.100
failovermethod=priority
baseurl=http://172.31.101.100/centos/7/extras/x86_64/
gpgcheck=0

#additional packages that extend functionality of existing packages
[epel]
name=CentOS-$releasever - epel - 172.31.101.100
failovermethod=priority
baseurl=http://172.31.101.100/epel/7/x86_64/
gpgcheck=0


[zabbix]
name=CentOS-$releasever - zabbix - 172.31.101.100
failovermethod=priority
baseurl=http://172.31.101.100/zabbix/
gpgcheck=0


然后客户机更新yum源

yum clean all
yum makecache

证明可以利用仓库文件连接到yum服务器

使用yum下载zabbix



六、编写yum源更新脚本

编写yum_repo.sh脚本,自动更新yum源为yum服务器。

#!/bin/bash
#change yum source
#name=yum_repo.sh

echo "========start============="
cd /etc/yum.repos.d/

echo "====backup repo==========="
mv CentOS-Base.repo CentOS-Base.repo.bak

echo "=create CentOS-Base.repo=="

touch CentOS-Base.repo
cat > CentOS-Base.repo << EOF
# CentOS-Base.repo
[base]
name=CentOS-$releasever - Base - 172.31.101.100
failovermethod=priority
baseurl=http://172.31.101.100/centos/7/os/x86_64/
gpgcheck=0

#released updates
[updates]
name=CentOS-$releasever - Updates - 172.31.101.100
failovermethod=priority
baseurl=http://172.31.101.100/centos/7/updates/x86_64/
gpgcheck=0

#released updates
[updates]
name=CentOS-$releasever - Updates - 172.31.101.100
failovermethod=priority
baseurl=http://172.31.101.100/centos/7/updates/x86_64/
gpgcheck=0

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - 172.31.101.100
failovermethod=priority
baseurl=http://172.31.101.100/centos/7/extras/x86_64/
gpgcheck=0

#additional packages that extend functionality of existing packages
[epel]
name=CentOS-$releasever - epel - 172.31.101.100
failovermethod=priority
baseurl=http://172.31.101.100/epel/7/x86_64/
gpgcheck=0

[zabbix]

name=CentOS-$releasever - zabbix - 172.31.101.100

failovermethod=priority

baseurl=http://172.31.101.100/zabbix/

gpgcheck=0


EOF


echo "====upgrade yum============"

yum clean all

yum makecache

yum update -y


echo "====dowload tools========="

yum install -y net-tools vim wget


cd ~


echo "=========finish============"


然后使用ansible将脚本分发到各个客户端,使用ansible远程执行shell命令运行脚本,批量更新yum源