Bookmark and Share
Document Actions

Creare un mirror di Pypi

Come creare un mirror di pypi.python.org per avere sempre a disposizione (velocemente) i prodotti e i pacchetti pypi per l'utilizzo con Zope e Plone.

Propositi

Lo scopo della ricetta è la creazione di un repository costantemente aggiornato che sia speculare a pypi.python.org

Come procedere

Per creare un mirror di pypi il primo passo da effettuare è l'installazione del prodotto z3c.pypimirror. Per far ciò, su una console digitate: 

$ sudo easy_install-2.4  z3c.pypimirror

Se vi trovate su una macchina Ubuntu Linux la egg verrà installata in /usr/lib/python2.4/site-packages/z3c.pypimirror-1.0.15.1-py2.4.egg/z3c/pypimirror/ dove è presente il file pypimirror.cfg.sample. Ora vi consiglio di copiare il file nella directory /etc e di rinominarlo come segue:

$ sudo cp /usr/lib/python2.4/site-packages/z3c.pypimirror-1.0.15.1-py2.4.egg/z3c/pypimirror/pypimirror.cfg.sample /etc/pypimirror.cfg

Ora dovreste creare una directory per il repository con un comando simile al seguente:

$ sudo mkdir /home/pypimirror
$ sudo chown -R www-data:www-data /home/pypimirror
$ sudo touch /var/log/pypimirror.log
$ sudo chown www-data:www-data /var/log/pypimirror.log

Le modifiche del proprietario dei file sono dovute al fatto che lo script di aggiornamento verrà avviato dall'utente www-data che gestisce anche l'esposizione della directory sul web.

Successivamente si deve modificare il file /etc/pypimirror.cfg così:

[DEFAULT]
mirror_file_path = /home/pypimirror
base_url = http://pypi.redomino.com/
lock_file_name = /home/pypimirror/pypi-poll-access.lock
filename_matches =
    *.zip
    *.tgz
    *.egg
    *.tar.gz
    *.tar.bz2

package_matches = 
    *

cleanup = True
create_indexes = True
verbose = True
external_links = False
follow_external_index_pages = False
log_filename = /var/log/pypimirror.log

Analizziamo le varie righe: la prima sta ad indicare dove verrano posti i file del mirror, base_url indica l'indirizzo a cui risponderà il vostro server. La dichiarazione fondamentale è quella riguardante package_matches, che accetta le wildcard come zope.* plone.* per fare il mirror solo dei pacchetti Plone e Zope. Nel nostro caso invece vogliamo effettuare un mirror di tutto pypi e quindi indicheremo solo *. In questo caso è importantissimo che external_links e follow_external_index_pages siano impostate a False, altrimenti andrete a scaricare tutti i pacchetti di pypi in locale occupando diverse decine di GB di dati. Copiando i dati con la configurazione appena vista si andranno ad occupare circa 13GB.

Per esporre la directory sul web qui di seguito è riportato un file di esempio di apache:

<VirtualHost *>
 ServerAdmin webmaster@localhost
 ServerName pypi.redomino.com  DocumentRoot /home/pypimirror/
 <Directory />
 Options Indexes FollowSymLinks MultiViews
 AllowOverride None
 Order allow,deny
 allow from all
 </Directory>

 ErrorLog /var/log/apache2/pypi-error.log
 LogLevel warn
 CustomLog /var/log/apache2/pypi-access.log combined
 ServerSignature On

</VirtualHost>

Ora non resta che avviare lo script per inizializzare il mirror.

$ sudo su -l www-data -c '/usr/bin/pypimirror -v --initial-fetch /etc/pypimirror.cfg'

Controllate sul file di log se non sono presenti errori, ad esempio digitando:

$ tail /var/log/pypimirror.log 
2010-06-17 03:54:51,813 DEBUG  Processing package cache_ensembl
2010-06-17 03:54:52,002 DEBUG  Found: cache_ensembl-1.0.tar.gz
2010-06-17 03:55:14,151 DEBUG  Statistics
2010-06-17 03:55:14,152 DEBUG  ----------
2010-06-17 03:55:14,152 DEBUG  Found (cached):         4002
2010-06-17 03:55:14,152 DEBUG  Stored (downloaded):    64
2010-06-17 03:55:14,152 DEBUG  Not found (404):        0
2010-06-17 03:55:14,152 DEBUG  Invalid packages:       0
2010-06-17 03:55:14,152 DEBUG  Invalid URLs:           0
2010-06-17 03:55:14,152 DEBUG  Runtime:                2m10s

Ed infine impostare uno script in cron che automatizzi le operazioni. Quindi create e modificate il file /etc/cron.d/pypimirror con il contenuto:

53 3 * * * www-data /usr/bin/pypimirror --update-fetch /etc/pypimirror.cfg

Che ogni mattina alle 3:53 aggiornerà il vostro mirror.

Utilizzare il mirror per i buildout

Nel vostro buildout.cfg dovrete inserire:

[buildout]

find-links =
    http://dist.plone.org/release/3.3.5
    http://dist.plone.org/thirdparty
    http://pypi.redomino.com

Utilizzando così il vostro nuovo mirror di pypi.

È tutto!

by Luca Cipriani last modified 2010-06-17 12:42
 

Supporto

Ottieni un
aiuto veloce e mirato sul forum, gratis!

partecipa al forum

 

Segui le icone

 

Livelli di difficoltà

livello guruSolo per i "guru"!
livello avanzatoPer configuratori e sviluppatori
livello medioPer chi ha già familiarità
livello basePer tutti!

 

I video

video

Il documento è supportato da un video!