Gentoo: Portage auf Git umstellen

Standardmäßig verwendet Gentoo zur Verteilung des Portage-Tree das rsync-Protokoll. Für die Übertragung bzw. Synchronisation vieler kleiner Dateien ist das Protokoll auch gut geeignet und funktioniert stabil.

Diese Methode hat jedoch einen Nachteil. Um die Integrität der heruntergeladenen Dateien zu überprüfen, sind diese via OpenGPG signiert. Der eigentliche Download erfolgt zunächst in ein „Quarantäneverzeichnis“, dann erfolgt eine Signaturprüfung. Erst, wenn die Signaturen validiert wurden, wird der lokale Portage Tree entsprechend aktualisiert. Der Nachteil hierbei ist, dass die Signaturprüfung (gerade auf weniger performanten Systemen) verhältnismäßig langsam ist – ich habe hier schon Update-Zeiten von mehreren Minuten gesehen.

Glücklicherweise kann man portage anweisen, für die Aktualisierung des Portage Tree statt rsync auch git zu verwenden.

Da die Gentoo-Entwickler ausschließlich signierte git-Commits akzeptieren, kann hier eine zusätzliche Signaturprüfung entfallen, da die Commits selbst bereits als valide betrachtet werden können. Da ein emerge --sync einem simplen git pull entspricht, geht die Synchronisation innerhalb weniger Sekunden vonstatten.

Die Konfiguration erfolgt in der Datei /etc/portage/repos.conf/gentoo.conf, die dann folgendermaßen aussieht:

[DEFAULT]
main-repo = gentoo

[gentoo]
location = /usr/portage
sync-type = git
sync-uri = https://anongit.gentoo.org/git/repo/sync/gentoo.git
auto-sync = yes

Nach der Umstellung muss der lokale Portage Tree (standardmäßig gespeichert unter /var/db/repos/gentoo) einmal gelöscht werden, da ansonsten das initiale git clone fehlschlägt.

Wie man sieht, ist die Konfiguration auch deutlich schlanker geworden, die mit sync- beginnenden Anweisungen sind nicht mehr nötig und können auskommentiert werden.

Noch ein Hinweis zur sync-uri: Neben den von Gentoo selbst gehosteten Servern kann auch der unter https://github.com/gentoo/gentoo bereitgestellte GitHub-Mirror genutzt werden.

Sofern Ihr eigene Repositories pflegt, die noch zusätzlich eingebunden werden, können diese im Übrigen auch weiterhin über rsync abgerufen werden, da die Synchronisations-Optionen jeweils pro Repository festgelegt werden.

Kommentare

  1. Hätte mich über ein „time emerge –sync“ mit einem vordefinierten Stand von Portage gefreut, bei welchem die beiden Verfahren noch einmal gegeneinander gebenchmarkt werden.

    Auf der gleichen Kiste mit gleichen Bedingungen (deshalb der „gesicherte alte Stand“).

    1. Okay, der Benchmark ging nur etwas „quick and dirty“, da bei der Umstellung auf git grundsätzlich von einem leeren Portage Tree ausgegangen werden muss, ansonsten funktioniert das „initial“ git clone nicht mehr – also nachdem man die Konfiguration angepasst hat, muss /var/db/repos/gentoo erstmal weg.

      Bzgl. des inkrementellen rsyncs bin ich von einem gestern erstellten Snapshot – gezogen via emerge-webrsync – ausgegangen. Server war dabei jeweils turnstone.gentoo.org, Ziel-Rechner ausgestattet mit einem Intel Core i5-7200U und SSD.

      rsync „über“ den snapshot: 33 Sekunden
      rsync in einen leeren Tree: 57 Sekunden

      git, inkrementell: < 10 Sekunden git in einen leeren Tree: 39 Sekunden Bei Systemen mit HDDs wirkt sich der Unterschied wesentlich extremer aus. Auch, wenn ich hierfür mangels Test-Systemen keine belastbaren Zahlen habe, war git hier um bis zu Faktor 10(!) schneller.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.