Centos Repository Mirror erstellen

Einige Firmen verbieten die direkte Internet Verbindung für interne Server. Diese Tatsache erschwert die regelmässigen Updates.

Dieses Problem kann mit einem lokalen Centos Repository umgangen werden. Der lokale Repository Mirror darf die Updates regelmässig holen, die internen Systeme holen die Updates beim Mirror.

Gleichzeitig kann auf dem Mirror ein Repository für Installationspakete erstellt werden, die von den internen Systemen benötigt werden.

Um den Centos 7.6 Mirror zu bauen, starten wir mit der Installation von createrepo

yum install createrepo yum-utils

Danach erstellen wir eine Partition für die Images and fügen sie /etc/fstab hinzu

parted -s /dev/sdb unit mib mkpart primary 1 100%
pvcreate /dev/sdb1
vgcreate vg00 /dev/sdb1
lvcreate -L 100G -n centos vg00
mkfs.ext4 /dev/vg00/centos
echo `blkid /dev/vg00/centos | awk '{ print $2 }' | tr -d \"` /usr/share/nginx/html/centos ext4 defaults 0 0 >> /etc/fstab
mount /usr/share/nginx/html/centos

Um die Repositories zu kopieren benötigen wir ein Script:

DIR=/usr/share/nginx/html/centos
mkdir -p ${DIR}/{base,centosplus,extras,updates,epel,mypackages}
mkdir -p ${DIR}/mypackages/Packages

Mit dem Editor Ihrer Wahl erstellen Sie das File /etc/cron.daily/update-centos-repo

#!/bin/bash
DIR=/usr/share/nginx/html/centos/
for REPO in base centosplus extras updates epel mypackages
do
     if [ $REPO != 'mypackages' ]
     then
          reposync -g -l -d -m --repoid=$REPO --newest-only --download-metadata --download_path=${DIR}
     fi
     if [ $REPO = 'base' ]
     then
          createrepo -g comps.xml ${DIR}${REPO}/
     else
          createrepo ${DIR}${REPO}/
     fi
done

Jetzt machen wir das Script ausführbar.

chmod 755 /etc/cron.daily/update-centos-repos

Via Cron holt die Maschine jetzt einmal pro Tag die Veränderungen im Repository. Das erste Mal holen wir den Inhalt manuell:

/etc/cron.daily/update-centos-repos

Um das Repository den internen Servern zugänglich zu machen, benötigen wir einen Webserver. Dazu nehmen wir nginx

yum install epel-release
yum install nginx
systemctl start nginx
systemctl enable nginx

Dass nginx funktioniert, benötigen wir lokale Firewall Regeln.

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

Ebenso benötigt nginx ein Konfigurationsfile mit einem virtuellen Host für dieses Repository. Erstellen Sie ein File mit dem Namen centos-mirror in /etc/nginx/conf.d

server {
     listen      80;
     server_name mirror.my.domain;
     root        /usr/share/ngingx/html/centos/;
     location / {
          index     index.php index.html index.htm;
          autoindex on;
     }
}

SElinux muss noch überzeugt werden, dass nginx auf das Repository zugreifen darf:

chcon -Rt httpd_sys_content_t /usr/share/nginx/html/centos/

Nachdem Sie alle diese Schritte ausgeführt haben, muss das lokale Repository auf den internen Maschinen hinzugefügt werden.

Löschen Sie alle bestehenden Repositories in /etc/yum.repos.d/

Erstellen Sie ein File mit dem Name local-centos-mirror.repo im Directory /etc/yum.repos.d/

[local-base]
name=CentOS Base
baseurl=http://mirror.my.domain/centos/base/
gpgcheck=0
enabled=1

[local-centosplus]
name=CentOS CentOSPlus
baseurl=http://mirror.my.domain/centos/centosplus/
gpgcheck=0
enabled=1

[local-extras]
name=CentOS Extras
baseurl=http://mirror.my.domain/centos/extras/
gpgcheck=0
enabled=1

[local-updates]
name=CentOS Updates
baseurl=http://mirror.my.domain/centos/updates/
gpgcheck=0
enabled=1

[local-epel] 
name=My Packages 
baseurl=http://mirror.my.domain/centos/epel/ 
gpgcheck=0 
enabled=1

[mypackages]
name=My Packages
baseurl=http://mirror.my.domain/centos/mypackages/
gpgcheck=0
enabled=1

Haben Sie RPM Files, welche nicht Bestandteil von Centos sind und die sie intern verwenden wollen, kopieren Sie diese in das “mypackages” Repository.

cp xy.rpm /usr/share/nginx/html/centos/mypackages/Packages/

Führen die das update Script aus. Danach stehen die RPMs den internen Maschinen zur Verfügung.