Centos7 搭建自己的私有yum镜像源

准备环境 
服务器:Centos7.9 
IP地址:192.168.21.92

一、配置自身镜像源并安装工具

# 下载阿里镜像源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 下载阿里epel源
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 删除缓存、更新缓存
yum clean all && yum makecache
# 查看镜像源列表
yum repolist
# 安装同步工具、repo制作工具
yum install -y yum-utils createrepo wget

二、通过reposync制作镜像仓库

分别制作base仓库、extras仓库、updates仓库、epel仓库
创建目录
mkdir -p /data/repos_local/centos/7
1、制作base仓库,约占空间9.0G:
reposync -r base -p /data/repos_local/centos/7
2、制作extras仓库,约占空间979M:
reposync -r extras -p /data/repos_local/centos/7
3、制作updates仓库,约占空间26G:
reposync -r updates -p /data/repos_local/centos/7
4、制作epel仓库,约占空间17G:
reposync -r epel -p /data/repos_local/centos/7
5、制作dockerCe仓库,约占空间4.6G:
reposync -r dockerCe -p /data/repos_local/centos/7

三、接着创建repo元数据

createrepo /data/repos_local/centos/7/base
createrepo /data/repos_local/centos/7/extras
createrepo /data/repos_local/centos/7/updates
createrepo /data/repos_local/centos/7/epel
createrepo /data/repos_local/centos/7/dockerCe

四、搭建web服务

1、安装nginx
yum install nginx
2、修改配置文件,修改web目录以及添加允许目录浏览

vi /etc/nginx/nginx.conf

root /data/repos_local; 
autoindex on;

五、制作repo文件

创建repo文件

vim /data/repos_local/local.repo

local.repo内容:
# 不需要的仓库可以注释掉
# 内网仓库全部关闭gpgcheck校验
# base仓库
[base]
name=Local CentOS-7 Base
baseurl=http://192.168.21.92/centos/7/base
enabled=1
gpgcheck=0

# extras仓库
[extras]
name=Local CentOS-7 Extras
baseurl=http://192.168.21.92/centos/7/extras
enabled=1
gpgcheck=0

# updates仓库
[updates]
name=Local CentOS-7 Updates
baseurl=http://192.168.21.92/centos/7/updates
enabled=1
gpgcheck=0

# epel仓库
[epel]
name=Local Extra Packages for Enterprise Linux 7
baseurl=http://192.168.21.92/centos/7/epel
enabled=1
gpgcheck=0

# dockerCe仓库
[epel]
name=Local Extra Packages for Enterprise Linux 7
baseurl=http://192.168.21.92/centos/7/dockerCe
enabled=1
gpgcheck=0

六、测试私有镜像源

# 创建备份目录

mkdir -p /etc/yum.repos.d/bak

# 备份现有repo源

mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/

# 下载私有镜像源repo文件

curl -o /etc/yum.repos.d/local.repo http://192.168.21.92/local.repo

# 删除缓存 更新缓存

yum clean all && yum makecache

# 查看镜像源列表

yum repolist

七、创建计划任务 并定时更新

创建脚本文件

vi /data/repos_local/yum_update.sh

脚本内容:
#!/bin/bash
echo "更新软件包"
DATETIME=`date +%F_%T`
exec > /var/log/yum-repo_$DATETIME.log
yum update -y
echo "开始同步centos7的yum源"
reposync -n --repoid=extras --repoid=updates --repoid=base --repoid=epel --repoid=dockerCe -p /data/repos_local/centos/7
echo "同步centos7和epel、base、extras、updates、dockerCe的yum源完成!!!"

#更新元数据
createrepo --update /data/repos_local/centos/7/base/
createrepo --update /data/repos_local/centos/7/extras/
createrepo --update /data/repos_local/centos/7/updates/
createrepo --update /data/repos_local/centos/7/epel/
createrepo --update /data/repos_local/centos/7/dockerCe/
使用crontab创建计划任务,每周同步一次。
0 1 * * 1 /usr/sbin/ntpdate ntp.aliyun.com
0 1 * * 1 /bin/bash /data/repos_local/yum_update.sh
赋予可执行权限:
chmod +x /etc/rc.d/rc.local
/data/repos_local/yum_update.sh
查看日志,说明更新成功。

八、创建一个 index.html 首页文件

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CentOS 7 内网镜像</title>

<script>document.createElement("myHero")</script>
<style>
myHero {
        display: block;
        background-color: #ddd;
        padding: 10px;
        font-size: 20px;
} 
</style> 

</head>
<body>
    <h1>简介</h1>
    <hr>
    <p>CentOS,是基于 Red Hat Linux 提供的可自由使用源代码的企业级 Linux 发行版本,是一个稳定,可预测,可管理和可复制的免费企业级计算平台。</p>
    <p>内网YUM源提供CentOS 7的base、extras、updates、epel、dockerCe仓库镜像,每周定时和华为云YUM源镜像站进行同步更新。</p>
    <hr>
    <br>

        <h1>CentOS 7 配置内网YUM源</h1>
    <br>
        <h2>1、备份</h2>
        <myHero>mkdir -p /etc/yum.repos.d/bak &amp;&amp; mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/</myHero>
    <br>
        <h2>2、下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/ </h2>
        <myHero>curl -o /etc/yum.repos.d/local.repo http://192.168.21.92/local.repo</myHero>
    <br>
	 <h2>3、下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/ </h2>
        <myHero>yum clean all && yum makecache</myHero>
    <br>
  
        <h2>4、运行 yum repolist   查看已经生成缓存</h2>
        <br>
    <br>

</body>
</html>