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.