======Install Update Mirror======
This page shows how to set up a CentOS 6 x86_64 mirror.
=====Prerequisites=====
You must have a CentOS 6 server available with over 50GB of space available. When a new 6.* is released, there is very little data in the folder. However, as time goes by, more and more updates increase the size of the directory.
=====Configure Data Disk=====
It is strongly recommended that you set up a dedicated partition for the mirror files that is at least 50Gb in size. There are various ways of achieving this that are documented in other pages such as [[Linux Disk Administration]].
This guide assumes you will be creating data files in /data/mirror/centos. Create the needed subdirectories. At the time of writing, CentOS 6.4 was out of support, CentOS 6.6 was the latest edition and 6.5 was still supported. To this end, we create two directories.
mkdir -p /data/mirror/centos/6.5
mkdir -p /data/mirror/centos/6.6
=Download Updates=
Run the following to do the initial download of the updates while ignoring several folders we don't need (like the CentOS ISO files). Notice that we are using warwick.ac.uk. Run 'yum update' and pay attention to where it tries to download from. If it tries to download from somewhere else, consider using that domain instead of warwick as you may find it is faster.
Please remember that the first download may take many hours.
rsync --progress -av --delete --delete-excluded --exclude "local" --exclude "xen4" --exclude "isos" --exclude "i386" rsync://anorien.csc.warwick.ac.uk/CentOS/6.5/ /data/mirror/centos/6.5
rsync --progress -av --delete --delete-excluded --exclude "local" --exclude "xen4" --exclude "isos" --exclude "i386" rsync://anorien.csc.warwick.ac.uk/CentOS/6.6/ /data/mirror/centos/6.6
=====Clean Up=====
Most CentOS servers are set to look at '6' and then '6' (on the server) is set to point to the latest 6.*.
cd /data/mirror/centos
ln -s 6.6. 6
Fix SELinux permissions so that we can share this data via http
semanage fcontext -a -t httpd_sys_content_t "/data/mirror(/.*)?"
restorecon -R -v /data/mirror
=====Install Apache=====
Install Apache
yum install httpd
This is a bug fix for Firefox CSS rendering
echo 'AddType text/css .css' >> /etc/httpd/conf/httpd.conf
Change the default root directory of Apache
sed -i "s/var\/www\/html/data\/mirror/g" /etc/httpd/conf/httpd.conf
rm -f /etc/httpd/conf.d/welcome.conf
cat > /etc/httpd/conf.d/repo.conf <<'END_OF_TEXT'
Alias /repo/ /data/mirror/
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
END_OF_TEXT
Ensure that httpd (Apache) is started and starts automatically on boot
service httpd restart
chkconfig httpd on
=====Open the Firewall=====
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
service iptables save
service iptables restart
=====Set Crontab=====
Obviously, for the above to work you will have to create the scripts sync6.6.sh and sync6.5.sh.
cat << EOF > /root/sync6.5.sh
#/bin/bash
rsync --progress -av --delete --delete-excluded --exclude "local" --exclude "xen4" --exclude "isos" --exclude "i386" rsync://anorien.csc.warwick.ac.uk/CentOS/6.5/ /data/mirror/centos/6.5
EOF
cat << EOF > /root/sync6.6.sh
#/bin/bash
rsync --progress -av --delete --delete-excluded --exclude "local" --exclude "xen4" --exclude "isos" --exclude "i386" rsync://anorien.csc.warwick.ac.uk/CentOS/6.6/ /data/mirror/centos/6.6
EOF
chmod u+x /root/sync6.*.sh
Add the following to crontab (with the 'crontab -e' command) to update at 2am each morning
0 2 * * * /root/sync6.5.sh;
0 2 * * * /root/sync6.6.sh;
=====Configure Client to Use Mirror=====
If centosupdate.example.com exists and is a functioning repository for CentOS, you can replace the contents of /etc/yum.repos.d/CentOS-Base.repo with the following
cat > /etc/yum.repos.d/CentOS-Base.repo << EOF
[base]
name=CentOS-6.5 - Base
baseurl=http://centosupdate.example.com/centos/6/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[updates]
name=CentOS-6.5 - Updates
baseurl=http://centosupdate.example.com/centos/6/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[extras]
name=CentOS-6.5 - Extras
baseurl=http://centosupdate.example.com/centos/6/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[centosplus]
name=CentOS-6.5 - Plus
baseurl=http://centosupdate.example.com/centos/6/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[contrib]
name=CentOS-6.5 - Contrib
baseurl=http://centosupdate.example.com/repo/centos/6/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
EOF