From Mageia wiki
Jump to: navigation, search


Drakconf multiflag.png
Andere Sprachen
Deutsch ; English ;
Diese Seite wurde im März 2019 von wiki.mageia.org/de/ übernommen und erweitert. Für die ursprüngliche/n Seite/Autoren siehe hier. Hierbei handelt es sich um eine Übersetzung aus dem englischen.


Zweck

urpmi-proxy ist ein HTTP Proxy für urpmi und erlaubt Clients diesen Proxy als einen lokalen Spiegelserver einzurichten. Er holt die Daten von einstellbaren Quellen und speichert diese in einem lokalen Zwischenspeicher, während der Anfrage. Du kannst ihn aber auch so einrichten, dass du ein zusätzliches Repository besitzt, damit du zusätzliche oder modifizierte Pakete zur Verfügung stellen kannst.

Autor: Maarten Vanraes
Lizenz: GPLv2+

Dies bedeutet, dies ist bevorzugterweise für:

  • Personen mit mehr als einer Mageia-Installation in einem lokalen Netzwerk (inklusive VMs, chroots, etc...)
  • Personen die einen lokalen Spiegelserver wünschen, aber sofort die neuen Dateien möchten, oder nur die Paketdateien speichern möchten die sie aktuell verwenden
  • Personen die lokal gebaute Pakete testen möchten um deren Integrität mit anderen Paketen zu sehen
  • Personen deren Gründen bisher nicht aufgelistet wurden :-)

Schnell & dreckig

Installiere urpmi-proxy auf deinem Server und dieser kann für deinen Client Computer wie ein Spiegelserver verwendet werden:

# urpmi urpmi-proxy

Da urpmi-proxy als eine Web-Anwendung (cgi-script) für Apache arbeitet, musst du dich vergewissern dass Apache auch läuft

# systemctl restart httpd.service

Vergewissere dich auch, dass auf dem Computer, auf dem urpmi-proxy läuft, der Port 80 in der Firewall offen ist. ("Webserver" in Mageia Kontrollzentrum > Sicherheit > Persönliche Firewall einrichten)

Bitte beachten!
Willst du mehr Geschwindigkeit, so musst du einige Einstellungen durchführen (siehe unten)

Den Client einrichten

Netzwerkinstallation durch verwende des Proxy

Beispiel unter Mageia 5, 64-Bit: z.B. als ein Netzwerk-Installationspfad: http://my-urpmi-proxy-server/mageia/distrib/5/x86_64 : oder ausführlicher: Starte den Computer mit der seperat heruntergeladenen boot.iso und wähle die Installation unter Verwendung von HTTP, manuelle Konfiguration, anschließend die IP Adresse deines urpmi-proxy Servers, und den Pfad /mageia/distrib/5/x86_64 .

Client zur Verwendung deines urpmi-proxy einrichten

Um alle bereits eingerichteten Medien bzw. Quellen zu entfernen und deine urpmi-proxy Quelle hinzuzufügen:

# urpmi.removemedia -a
# urpmi.addmedia --distrib http://my-urpmi-proxy-server/mageia/distrib/5/x86_64

Was wenn mein Server nicht Mageia verwendet

Kein Problem, nutze den Quell-Tarball und installiere diesen auf deinem Server. Dein Server wird urpmi-proxy vermutlich nicht direkt verwenden (kein rekursive Schleife), da bisher kein urpmi verwendet wurde und es aus diesem Grund eingerichtet werden muss.

  • Füge die Datei urpmi-proxy.conf in das Verzeichnis /etc ein
  • benenne die Datei apache.conf um und füge diese in das webapps.d Verzeichnis von Apache ein
  • füge die cgi Datei in den Position ein, der von der apache.conf angegeben wird

Das ist alles.

Clients? Was ist mit dem Server selbst?

Ok, wenn du willst, dass der Server selbst auch verwendet wird, (oder du nur einen Computer besitzt) muss einiges eingestellt werden. Als Vorgabe verwendet urpmi-proxy die Einstellungen von urpmi des Servers um zu sehen von wo die Dateien zu holen sind die zu verteilen sind.

Auf diese Weise, wenn dies auf einem Server verwendet werden würde, würde er in der Datei vom ... Server selbst holen? Würde er die Dateien vom ... Server selbst holen? AUTSCH, eine rekursive Schleife.

Wie können wir dies nun beheben? Ganz einfach: urpmi-proxy ganz einfach so konfigurieren dass diese Daten von wo anders geholt werden, anstatt wie in den urpmi Einstellungen des Servers angegeben.

Die Konfigurationsdatei ist {{file-de|/etc/urpmi-proxy.conf}, darin gibt es eine Variable namens $sources, wähle einen guten Spiegelserver und setze diesen anstelle des vorgegebenen urpmi ein, z.B.:

$sources = [ 'http://mageia.unige.ch/mirror' ];

Beachte das dahinterstehende ";" welches vorhanden sein muss. Wenn du auf der Liste in einem Browser schaust, so siehst du die Verzeichnisse iso und distrib. Ich empfehle HTTP-URLs, da diese den effizientesten Eindruck machen.

Nun verwendet urpmi-proxy diese konfigurierten Einstellungen, und so kann der Server (oder dein einziger Computer) gefahrlos diesen urpmi-proxy Link verwenden. (Alle Änderungen der Konfigurationsdatei sind unmittelbar verfügbar.)

In Ordnung, was ist mit der Konfigurationsdatei?

Nun, ich würde sagen, der Hauptpunkt in diesem Bereich sind sicherlich die Quellen:

  • urpmi
Dies ist die Vorgabe, anfänglich bildet es die Liste der Spiegelserver von://$MIRRORLIST ab.
  • mirrorlist
Dies sieht im Code der urpmi Liste der Spiegelserver nach um die zur Zeit für deinen Computer verwendeten Spiegelserver zu erfahren und verwendet diese als Spiegelserver.
  • http oder ftp
Dies ist was du für eine händische Konfiguration verwenden würdest, jede HTTP- oder FTP-URL funktioniert auch gut hier. Vergewissere dich, das diese nicht mit einem / endet, und dieser sollte die Verzeichnisse distrib und iso enthalten.
  • file
Dies ist der seltsamste, diese wird für zusätzliche Repositorys verwendet die mit denen von Mageia vermischt sind, so dass du effektiv ein überlappendes Repository besitzt. Mit anderen Worten: Pakete die du hier ablegst, können nahtlos in die Repositorys von Mageia hinzugefügt werden. Siehe weiter unten für weitere Informationen zu diesem Thema.

Es gibt auch eine Log-Datei die du ausgeben kannst (siehe unten für für Infos bezüglich dem logging-Formats):

$logfile = '/var/log/urpmi-proxy.log';

Es gibt auch eine Option zur Fehlersuche (Infos zur Fehlersuche findest du in den Apache logs, nicht in den obigen log-Files):

$debug = 0;

Dieser Pfad wird als Speicherbereich für den Proxy verwendet (die Datei- und Verzeichnisstruktur ist die gleiche wie auf den Spiegelservern, so dass du diese direkt als feste Grundlage für die Repositorys verwenden kannst, oder diese in bestimmten Intervallen sogar synchronisieren kannst:

$cache_path = '/var/cache/urpmi-proxy';

Definiere die temporäre Zwischenspeicherung die zum Herunterladen von Dateien verwendet wird im gleichen Dateisystem wie cache_path, damit die Hardlinks effizient funktionieren.

$cache_tmp_path = '/var/tmp/urpmi-proxy';
Dragon-head.png Hier sind Drachen!
Wenn Sie den Ort des Verzeichnisses ändern, sollten Sie dies für beide durchführen, im gleichen Dateiesystem und beachten Sie den Besitzer des Apache Benutzers apache:apache

Die nächsten Teile sind Parameter die du wirklich in Ruhe lassen solltest außer wenn du den Code gelesen hast. Aus diesem Grunde bemühe ich mich auch nicht, diese zu erklären; aber in Kürze: media.cfg Dateien werden immer zusammengefügt während MD5SUM Dateien immer immer bei Aktualisierungen überprüft werden.

$check_updates_only_files = 'MD5SUM';
$check_no_updates_files = undef;
$merge_files = 'media.cfg';

Letztendlich gibt es auch Optionen zur Beschleunigung:

$connect_timeout = 120;
$ftp_response_timeout = 30;
$max_stall_speed = 8192;
$max_stall_time = 60;

Was tut dies tatsächlich? Wie funktioniert dies tatsächlich?

Sehr einfach:

Es ist eine Apache Webapp, in dem Sinne dass, egal wie dein Apache konfiguriert ist, es wird immer '<wasimmer>/mageia/*' abgefangen und der Rest des Links an wird das Programm übergeben wird.

Es analysiert den Pfad den du eingegeben hast, sieht lokal in dem oben angegebenen Pfad nach ob dieser bereits vorhanden ist und wenn dem so ist, wird die Datei zurückgegeben.

Ist dem nicht so, wird nochmals mit den Quellen verglichen, in der Reihenfolge von oben nach unten und versucht die Datei abzurufen.

Die urpmi und Spiegelserverquellen werden durchsucht, um herauszufinden von wo die Dateien zu holen sind.

Wenn es die Datei holt, wird ein cleverer Trick angewendet um die Datei in der gleichen Zeit zu speichern, während sie heruntergeladen wird, jedoch wird im gleichen Zeitraum die heruntergeladenen Daten bereits zu dem Client gesendet, welcher die Datei angefordert hatte. Dies bedeutet es gibt keinen sichtbare Verzögerung, wenn Dateien heruntergeladen werden!

Es gibt in der log-Datei auch Aufzeichnungen was bei jeder Anforderung geschieht.

Welches Format besitzt diese log-Datei?

[DATE TIME] PATH - HTTP_RETURN_CODE - CACHE_CODE

Ich gebe hier ein Beispiel an; es werden hier einige Dateien installiert, welche sich noch nicht im Zwischenspeicher vorhanden waren:

[Fri Dec 30 16:19:33 CET 2011] /distrib/1/i586/media/core/updates/media_info/MD5SUM - 200 - MISS [Fri Dec 30 16:19:34 CET 2011] /distrib/1/i586/media/core/updates/media_info/20111230-134534-info.xml.lzma - 200 - MISS [Fri Dec 30 16:19:56 CET 2011] /distrib/1/i586/media/core/updates/libxulrunner9.0.1-9.0.1-0.2.mga1.i586.rpm - 200 - MISS [Fri Dec 30 16:20:13 CET 2011] /distrib/1/i586/media/core/updates/firefox-9.0.1-0.1.mga1.i586.rpm - 200 - MISS [Fri Dec 30 16:20:14 CET 2011] /distrib/1/i586/media/core/updates/libsqlite3_0-3.7.9-1.1.mga1.i586.rpm - 200 - MISS [Fri Dec 30 16:20:15 CET 2011] /distrib/1/i586/media/core/updates/firefox-en_ZA-9.0.1-0.3.mga1.noarch.rpm - 200 - MISS [Fri Dec 30 16:20:16 CET 2011] /distrib/1/i586/media/core/updates/libsqlite3-devel-3.7.9-1.1.mga1.i586.rpm - 200 - MISS [Fri Dec 30 16:20:18 CET 2011] /distrib/1/i586/media/core/updates/firefox-en_GB-9.0.1-0.3.mga1.noarch.rpm - 200 - MISS [Fri Dec 30 16:20:18 CET 2011] /distrib/1/i586/media/core/updates/xulrunner-9.0.1-0.2.mga1.i586.rpm - 200 - MISS

oder hier, dies ist ein Teil einer typischen mga_applet Sitzung:

[Mon Jan 9 23:36:11 CET 2012] /distrib/cauldron/x86_64/media/core/release/media_info/MD5SUM - 200 - MISS [Mon Jan 9 23:36:14 CET 2012] /distrib/cauldron/x86_64/media/core/release/media_info/20120109-221927-synthesis.hdlist.cz - 200 - MISS [Mon Jan 9 23:36:15 CET 2012] /distrib/cauldron/x86_64/media/nonfree/release/media_info/MD5SUM - 200 - MISS [Mon Jan 9 23:36:15 CET 2012] /distrib/cauldron/x86_64/media/tainted/release/media_info/MD5SUM - 200 - MISS [Mon Jan 9 23:36:16 CET 2012] /distrib/cauldron/x86_64/media/tainted/release/media_info/20120109-215715-synthesis.hdlist.cz - 200 - MISS

Dies ist ein Teil einer Installation für eine Folge von abhängigen Paketen und ein Gemisch aus zwischengespeicherten und nicht zwischengespeicherten Anforderung (beachte die Unterschiede der Zeitmarken):

[Sun Jan 8 17:34:28 CET 2012] /distrib/cauldron/x86_64/media/core/release/lib64mikmod3-3.2.0-0.beta2.9.mga1.x86_64.rpm - 200 - CACHED_NO_CHECK [Sun Jan 8 17:34:28 CET 2012] /distrib/cauldron/x86_64/media/core/release/lib64mikmod-devel-3.2.0-0.beta2.9.mga1.x86_64.rpm - 200 - CACHED_NO_CHECK [Sun Jan 8 17:34:28 CET 2012] /distrib/cauldron/x86_64/media/core/release/lib64xdmcp6-devel-1.1.0-1.mga1.x86_64.rpm - 200 - CACHED_NO_CHECK [Sun Jan 8 17:34:29 CET 2012] /distrib/cauldron/x86_64/media/core/release/lib64pciaccess-devel-0.12.1-1.mga1.x86_64.rpm - 200 - MISS [Sun Jan 8 17:34:30 CET 2012] /distrib/cauldron/x86_64/media/core/release/lib64gpm-devel-1.20.6-5.mga1.x86_64.rpm - 200 - CACHED_NO_CHECK [Sun Jan 8 17:34:30 CET 2012] /distrib/cauldron/x86_64/media/core/release/lib64jbig-devel-2.0-5.mga1.x86_64.rpm - 200 - CACHED_NO_CHECK [Sun Jan 8 17:34:31 CET 2012] /distrib/cauldron/x86_64/media/core/release/x11-proto-devel-7.6-12.mga2.x86_64.rpm - 200 - MISS [Sun Jan 8 17:34:31 CET 2012] /distrib/cauldron/x86_64/media/core/release/cvs-1.12.13-18.mga1.x86_64.rpm - 200 - CACHED_NO_CHECK [Sun Jan 8 17:34:38 CET 2012] /distrib/cauldron/x86_64/media/core/release/lib64ogg-devel-1.3.0-1.mga2.x86_64.rpm - 200 - MISS [Sun Jan 8 17:34:38 CET 2012] /distrib/cauldron/x86_64/media/core/release/lib64slang-devel-2.2.4-3.mga2.x86_64.rpm - 200 - MISS [Sun Jan 8 17:34:39 CET 2012] /distrib/cauldron/x86_64/media/core/release/lib64ffi5-devel-3.0.10-1.mga2.x86_64.rpm - 200 - MISS [Sun Jan 8 17:34:40 CET 2012] /distrib/cauldron/x86_64/media/core/release/lib64xcb-randr0-1.7-3.mga2.x86_64.rpm - 200 - MISS [Sun Jan 8 17:34:41 CET 2012] /distrib/cauldron/x86_64/media/core/release/lib64attr1-devel-2.4.46-1.mga2.x86_64.rpm - 200 - MISS [Sun Jan 8 17:34:43 CET 2012] /distrib/cauldron/x86_64/media/core/release/lib64lzma-devel-5.0.3-1.mga2.x86_64.rpm - 200 - MISS

Die möglichen Werte für CACHE_CODE sind:

  • MISS
Diese Datei wurde nicht zwischengespeichert
  • MISS_FAIL
Diese Datei wurde nicht zwischengespeichert, konnte aber nicht geholt werden
  • MISS_FAIL_SENT
Diese Datei wurde nicht zwischengespeichert, konnte nicht geholt werden, wurde aber trotzdem weitergeleitet (vielleicht teilweise?)
  • CACHED_NO_CHECK
Diese Datei wurde zwischengespeichert und nicht auf Aktualisierungen überprüft
  • HIT_AFTER_FAIL
Diese Datei konnte nicht geholt werden, es gibt aber eine zwischengespeicherte Versionen die ausgegeben wird
  • HIT_AFTER_FAIL_UNMODIFIED
Diese Datei konnte nicht geholt werden, es gibt aber eine zwischengespeicherte Version, aber die Anforderung selbst wurde als unmodifiziert markiert (obwohl diese fehlgeschlagen ist)

Wie kann ich hier eine lokale Repository einfügen?

Dieser Teil ist sehr einfach:

$sources = [ 'file:///var/lib/urpmi-proxy/repository', 'http://mageia.unige.ch/mirror', ];

dies bedeutet jedoch nicht, dass du bereits ein lokales Repository hast...

Dies bedeutet, dass es die erste Zeile dazu verwendet, um zuerst die Dateien zu finden. Falls dies fehlschlägt wird die zweite Zeile verwendet (deine echten Quellen)

Denke an das Spiegelserver-Layout. Es bedeutet, dass es nach den Dateien unter file:///var/lib/urpmi-proxy/repository/distrib/5/x86_64/media/core/release/* schaut.

Wenn du nun ein zusätzliches Repository in Mageia 5 haben möchtest (lass es uns "extra" nennen), würdest du eine Verzeichnisstruktur wie : /var/lib/urpmi-proxy/repository/distrib/5/x86_64/media/extra/release erstellen.

Der nächste Schritt ist es, die RPM Dateien in dieses Verzeichnis zu legen.

Nun musst du daraus ein Repository machen und die Dateien indexieren:

# genhdlist2 --allow-empty-media --no-bad-rpm --xml-info --clean /var/lib/urpmi-proxy/repository/distrib/5/x86_64/media/extra/release/

Nun haben wir alles erledigt, bis auf dass das extra Repository noch nicht verwendet wird.

Der finale Schritt ist es, die Datei media.cfg zu überschreiben, um das extra Repository hinzuzufügen.

Nimm die Datei /distrib/5/x86_64/media/media_info/media.cfg und füge diese in das Verzeichnis /var/lib/urpmi-proxy/repository/distrib/2/x86_64/media/media_info/ ein.

Bearbeite anschließend die Datei und füge folgende Zeilen hinzu:

[extra/release] hdlist=hdlist_extra_release.cz name=Extra Release media_type=release

Jede neue Installation oder bei jedem hinzufügen einer neuen Quelle aus urpmi-proxy, wird nun auch Standardmäßig das extra Repository hinzufügen und aktivieren.

Kann ich dies auch mit iurt verwenden?

Vermutlich

Entwicklung

Das git Repository kann unter der Adresse http://gitweb.mageia.org/software/rpm/urpmi-proxy/ gefunden werden.

Leeren des Caches

Der Cache wird nach einiger Zeit sehr groß werden, wenn die Repositorys z.B. wie in Cauldron geändert werden, aber auch bei Aktualisierungen. Hier sind einige Tricks um die Speicherverwendung klein zu behalten.

Zuerst einige manuelle Methoden

  • Wenn Cauldron den finalen Status erhält: Nenne in deinem Cache Verzeichnisbaum deinen Cauldron Fork um, auf den finalen Namen und die Cauldron Pakete werden weiter verwendet. (Alte Paketversionen können einfach durch das Script weiter unten entfernt werden). Vielleicht möchtest du auch Pakete manuell nach der Größe sortieren und ein paar große Dateien entfernen, welche nicht mehr benötigt werden. Falls du der Cauldron Repository weiter folgen möchtest, kannst du auch deinen Cauldron Fork kopieren, anstatt ihn umzubenennen.
  • Wenn ein Client die alten Mageia Repositorys nicht mehr verwendet: lösche die "Forks" im Cache
  • Du kannst auch manuell die Dateien löschen, wenn diese nicht mehr benötigt werden: eigenartig große Pakete, testing Repositorys...

Egal was du löscht: alles was wieder benötigt wird, wird erneut heruntergeladen.

Alte Pakete entfernen

Luca Olivetti hat unter der Mailingliste discuss@ml.mageia.org am 16.11.2014 01 ein Script veröffentlicht (https://wiki.mageia.org/mw-en/images/d/d9/Cache-rinse.txt), welches alle Pakete in einem Verzeichnis, bis auf die neusten, entfernt. Wenn ein Client ein älteres Paket benötigt, wird urpmi-proxy dies einfach nochmals herunterladen. Beachte: Es muss mit der Option --delete ausgeführt werden, damit es den Löschvorgang durchführt. Wenn das Script ohne eine Option gestartet wird, wird angezeigt, was es tun würde und wieviele Bytes es entfernen würde. Beachte: cache-rinse.py muss im Wurzelverzeichnis von Cache vorhanden sein und von dort ausgeführt werden.

Entfernen alter hdlists

In media_info werden alle Aktualisierungs-Repos und alle Cauldron-Repos alte Dateien ansammeln, welche den aktuellen Medieninhalt beschreiben. Der einfachste Weg ist es, den Inhalt der media_info Verzeichnisse zu löschen und falls diese wieder benötigt wird, wird die neuste Version wieder heruntergeladen.

Kreuzverweis von .noarch Paketen

Eine Optimierung, welche sowohl Speicherplatz als auch das herunterladen spart sind Kreuzverweise auf .noarch Pakete (z.B. große Spielekarten) mit der Verwendung von Hardlinks, damit diese, sobald diese für eine Architektur heruntergeladen wurde, auch für die anderen Architekturen zur Verfügung gestellt werden, wodurch diese nicht nochmals an einen anderen Ort heruntergeladen werden müssen. Links benötigen auch keinen Speicherplatz - im Gegenteil: wenn beide Architekturen bereits 700MB an .noarch Dateien heruntergeladen haben, wird diese Vorgehensweise 700 MB Speicherplatz sparen. Am besten ist dies durchzuführen, wenn die verschiedenen Architekturen bereits große .noarch Dateien heruntergeladen haben.

Script

Hier ist ein Script https://wiki.mageia.org/mw-en/images/6/6b/Urpmi-proxy_rinse.sh.txt , welches alle oben beschriebenen Vorgänge durchführt, bis auf die manuellen Vorgänge. Ich führe es manuell aus, vor allem nachdem ich einen Computer aktualisiert habe und sehe, wie es viele MB der .noarch Pakete spart. Du kannst es auch als Cron oder ähnlichem Ausführen. Natürlich als root. Beachte: Ändere die Befehle an die für deine eingesetzte Mageia Version: "für ver in 4 5 cauldron ;"! Überprüfe auch die anderen Einstellungen, z.B. wo sich der Cache befindet etc. bevor du das Script einsetzt.