Wer mich kennt, weiß dass ich gerne zu großen umfangreichen Lösungen neige. Daher ist meine bevorzugte Lösung für einen lokalen Mirror Katello, aber es gibt auch Situationen in denen man nur eine Version ohne Staging braucht. Beispiel aus dieser Woche ein „Icinga 2“-Satellite in China, der einfach nicht die Pakete von packages.icinga.com beziehen möchte. Auf seinem übergeordneten Satelliten in Singapur hat noch alles gut funktioniert und auch die Kommunikation zwischen beiden funktioniert auch gut. Also ist nach kurzer Überlegung der Plan gefasst, es soll ein lokaler Mirror her von dem in China installiert werden soll.
Um den Mirror aufzusetzen, setze ich auf die Kommandos reposync
und createrepo
, welche recht schnell installiert sind und keine Konfiguration benötigen.
yum install -y yum-utils createrepo
Mit reposync
kann nur ein bereits konfiguriertes Repository gespiegelt werden. Da in diesem Fall auf beiden Systemen die gleiche Betriebssystemversion installiert ist, für mich kein Problem und es kann gleich weitergehen. Auch ist auf dem Satelliten bereits ein Webserver installiert um Icinga Web 2 als separates Webinterface für die asiatischen Kollegen anzubieten, also auch hier kein Handlungsbedarf. Der Mirror ist also schnell aufgesetzt.
mkdir -p /var/www/html/repo reposync -r icinga-stable-release -p /var/www/html/repo/ -n createrepo /var/www/html/repo/icinga-stable-release
Die Optionen bei reposync
sind mit -r
die Repository-ID aus der Yum-Konfiguration, -p
das Zielverzeichnis und -n
um nur die jeweils neuste Version herunterzuladen. reposync
lädt allerdings nur die Pakete herunter und legt sie in der entsprechenden Struktur ab ohne die benötigten Metadaten. Diese werden dann mit createrepo
erzeugt und schon kann mit der neu zur Verfügung gestellten URL das Repository eingebunden werden.
In vielen Fällen ist dies ausreichend, aber hier noch ein paar Tipps wenn es dann doch etwas mehr sein darf.
- Zum regelmäßigen Updaten einfach die beiden Kommandos
reposync
undcreaterepo
in einem Cronjob hinterlegen. - Ein Repository kann noch weitere Metadaten enthalten, beispielsweise die
comps.xml
mit Gruppeninformationen. Diese wird durch der Option--downloadcomps
vonreposync
mit heruntergeladen und im aktuellen Arbeitsverzeichnis abgelegt. Beicreaterepo
wird diese wiederum mit-g comps.xml
eingebunden. - Die Errata-Informationen können nicht mit
reposync
heruntergeladen werden, aber beispielsweiseyum list-sec
lädt diese lokal in den Cache. Kopiert man dieupdateinfo.xml
dann aus dem Repository-Cache in/var/cache/yum/
in das synchronisierte Repository und führtmodifyrepo /var/www/html/repo-id/repodata/updateinfo.xml /var/www/html/repo-id/repodata
aus, wird diese Teil der Metadaten. - Sollen Repositories für ein anderes Betriebssystem zur Verfügung gestellt werden, kann eine Konfiguration erstellt werden, die aber nicht aktiv ist, also
enabled=0
enthält. Beireposync
kann dann mit--enablerepo repo-id
das Repository nur für die Synchronisation aktiviert werden.
Ich hoffe dieser kleine Artikel hilft dem ein oder anderen. Wem das schnelle einfache Repository nicht genug ist, der kann auch versuchen mit rsync
einen vollständigen Mirror aufzusetzen oder mit Katello sogar ein Staging einbauen, damit Updates erst in Entwicklung und Test laden bevor sie in Produktion vielleicht Probleme verursachen. Bei letzterem unterstützen gerne ich oder ein Kollege im Rahmen eines Foreman-Consultings.