Hey good people. Today in this short tutorial I’ll share with you tips on how to create local CentOS 6 and CentOS 7 mirrors. This is beneficial when you have a good number of systems and you want to save on bandwidth, fasten package installations, network installations and systems updates.

This guide will use rsync to sync the mirrors from upstream. Path used to save sync contents is /var/mirrors/. Make sure you adjust the path to a filesystem that has enough space, or mount a new disk/partition.

Bash Scripts to sync CentOS 6 and 7 mirrors:

Below script will sync both CentOS 6 and CentOS 7 mirrors. substitute directory variables with your desired. Save script to a file, make

#!/bin/bash

if [ -f /var/lock/subsys/rsync_updates ]; then
    echo "Updates via rsync already running."
    exit 0
fi

base_dir="/var/mirrors/centos/"
centos_7_mirror_dir="/var/mirrors/centos/7/"
centos_6_mirror_dir="/var/mirrors/centos/6/"

touch /var/lock/subsys/rsync_updates

if [[ -d "$centos_7_mirror_dir"  && -d "$centos_6_mirror_dir" ]] ; then
    rsync  -avSHP --delete rsync://mirror.liquidtelecom.com/centos/7/  "$centos_7_mirror_dir" && \
    rsync  -avSHP --delete rsync://mirror.liquidtelecom.com/centos/6/  "$centos_6_mirror_dir" && \
    # sync keys
    rsync  -avSHP --delete rsync://mirror.liquidtelecom.com/centos/RPM-GPG-KEY-CentOS-7  "$base_dir" && \
    rsync  -avSHP --delete rsync://mirror.liquidtelecom.com/centos/RPM-GPG-KEY-CentOS-6  "$base_dir" && \
    rm -rf /var/lock/subsys/rsync_updates

else
	echo "Directories doesn't exist"

fi

Bash Script to sync Epel mirrors:

#!/bin/bash

if [ -f /var/lock/subsys/rsync_updates ]; then
    echo "Updates via rsync already running."
    exit 0
fi

epel6_mirror_dir="/var/mirrors/epel/6/x86_64"
epel7_mirror_dir="/var/mirrors/epel/7/x86_64"
base_dir="/var/mirrors/epel/"

touch /var/lock/subsys/rsync_updates

if [[ -d "$epel6_mirror_dir"  && -d "$epel7_mirror_dir" ]] ; then
    rsync  -avSHP --delete rsync://mirror.wbs.co.za/fedora-epel/6/x86_64/ "$epel6_mirror_dir" && \
    rsync  -avSHP --delete rsync://mirror.wbs.co.za/fedora-epel/7/x86_64/ "$epel7_mirror_dir" && \
    rsync  -avSHP --delete rsync://mirror.wbs.co.za/fedora-epel/RPM-GPG-KEY-EPEL-7 "$base_dir" && \
    rsync  -avSHP --delete rsync://mirror.wbs.co.za/fedora-epel/RPM-GPG-KEY-EPEL-6 "$base_dir" && \
    rm -rf /var/lock/subsys/rsync_updates

else
	echo "Directories doesn't exist"

fi

if [[ $? -eq '0' ]]; then
    echo ""
    echo "Sync successful.."
else
    echo " Syncing failed"
    exit 1
fi

These scipts can be run in cron to keep the mirrors current.

Serve the mirrors with Nginx

After the sync is complete, you can begin using them by serving with nginx,

Install nginx:

yum -y install epel-release
yum -y install nginx

Then add configuration files:

cat /etc/nginx/conf.d/centos.conf
server {
	listen 80;
	server_name centos.mirrors.domain.com;
        root /var/mirrors/centos/;

       location / {
                autoindex on;
        }
}

For epel:

cat /etc/nginx/conf.d/epel.conf
server {
	listen 80;
	server_name epel.mirrors.domain.com;
        root /var/mirrors/epel;

       location / {
                autoindex on;
        }
}

Start and enable nginx:

systemctl start nginx
systemctl enable nginx

Configuring CentOS Server to use the mirrors

CentOS Base mirrors:

cd /etc/yum.repos.d/
mkdir old
mv CentOS* old
vim centos.repo

Add content below.


[base]
name=CentOS-$releasever - Base
baseurl=http://centos.mirrors.domain.com/$releasever/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://centos.mirrors.domain.com/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-7


[updates]
name=CentOS-$releasever - Updates
baseurl=http://centos.mirrors.domain.com/$releasever/updates/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://centos.mirrors.domain.com/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras
baseurl=http://centos.mirrors.domain.com/$releasever/extras/$basearch/
enabled=0
gpgcheck=1
gpgkey=http://centos.mirrors.domain.com/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-7

[centosplus]
name= CentOS-$releasever - Plus
baseurl=http://centos.mirrors.domain.com/$releasever/centosplus/$basearch/
enabled=0
gpgcheck=1
gpgkey=http://centos.mirrors.domain.com/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-7

Test that the repos work just fine by updating repo cache.

yum clean all
yum makecache fast
yum -v repolist

Epel Mirrors:

# cat /etc/yum.repos.d/epel.repo

[epel]                                    
name=Extra Packages for Enterprise Linux 7 - $basearch                               
baseurl=http://epel.mirrors.domain.com/$releasever/$basearch/                         
enabled=1                                 
gpgcheck=1                                
gpgkey=http://epel.mirrors.domain.com/RPM-GPG-KEY-EPEL-$releasever