============================ Aufsetzen eines PyPI-Mirrors ============================ :Authors: - Christian Theune - Jan Ulrich Hasecke - Martin v. Löwis - Thomas Lotze - Veit Schiele :Date: 2011-04-06 Installationsvoraussetzungen ---------------------------- - SQLite mit *headers* und statischen Bibliotheken In Debian und ähnlichen Paketverwaltungen wird dies mit dem Paket ``libsqlite3-dev`` installiert. - bzip2 mit statischen Bibliotheken und *include*-Dateien In Debian und ähnlichen Paketverwaltungen wird dies mit dem Paket ``libbz2-dev`` installiert. - Python2.6 oder größer - Webserver, z.B. Apache oder nginx Installation der Skripte ------------------------ :: easy_install pep381client Dies installiert im ``bin``-Verzeichnis der Python-Installation die beiden folgenden Skripte: pep381run aktualisiert die Pakete, Signaturen und Simple Pages auf dem Mirror. processlogs erzeugt aus den Log-Dateien des Web-Servers eine tagesbezogene Downloadstatistik der Pakete. Erstellung des Mirrors ---------------------- In unserem Beispiel wählen wir als Ort im Dateisystem ``/srv/pypi``:: ./bin/pep381run /srv/pypi Dies lädt alle Pakete, Signaturen und Simple Pages vom Master-PyPI ``pypi.python.org`` herunter (aktuell sind dies ca. 14 GB). Aktualisierung des Mirrors -------------------------- Dies kann als cronjob geschehen, z.B. mit:: */15 * * * * /path/pep381client/pep381run -q /srv/pypi Hiermit werden die Dateien alle 15 Minuten aktualisiert. ``-q`` führt das Skript ohne Ausgabe aus. Konfiguration des Web-Servers ----------------------------- ``/srv/pypi/web`` soll nun durch einen Web-Server ausgeliefert werden. - Apache kann z.B. mit folgender Konfiguration betrieben werden:: ServerName mypypi.example.org DocumentRoot /srv/pypi/web AddOutputFilterByType DEFLATE text/html Der Wert von ``AddOutputFilterByType`` erlaubt dem Apache-Webserver, die Simple Pages komprimiert auszugeben. - Für nginx kann die Konfiguration z.B. so aussehen:: server { listen *:80; server_name mypi.example.org; root /srv/pypi/web; gzip on; gzip_min_length 1100; }