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-utilsDanach 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/centosUm 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/PackagesMit 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
doneJetzt 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.