Creando su propio repositorio de Pypi
Este manual intenta ayudar a como implementar un espejo (mirror) de Pypi para local en tu organización.
Instalando z3c.pypimirror
Para esto, se utiliza el paquete z3c.pypimirror, que es un módulo para la construcción de un espejo PyPI, su instalación es muy simple, por eso estoy partiendo del principio de que tenemos instalado en el sistema una versión de Python 2.4 o superior + setuptools, también debemos disponer al menos 15GB de espacio libre para los paquetes, a continuación se muestra como puede instalar el paquete, con el siguiente comando:
# easy_install-2.4 z3c.pypimirror
Opcionalmente con la herramienta pip, con el siguiente comando:
# pip install z3c.pypimirror
mkdir -p /home/pypimirror/paquetes
Configurando z3c.pypimirror
Este será el directorio en donde iremos a mantener nuestros paquetes procedentes de Pypi, los archivos de registros (*.log) y temporales podemos mantenerlos en el directorio /home/pypimirror, ahora tenemos que crear el fichero de configuración, lo llamé pypimirror.cfg, tendrá la siguiente configuración:
[DEFAULT] # the root folder of all mirrored packages. # if necessary it will be created for you mirror_file_path = /home/pypimirror/paquetes # where's your mirror on the net? base_url = http://pypi.sudominio.com # lock file to avoid duplicate runs of the mirror script lock_file_name = /home/pypimirror/pypi-poll-access.lock # Pattern for package files, only those matching will be mirrored filename_matches = *.zip *.tgz *.egg *.tar.gz *.tar.bz2 # Pattern for package names; only packages having matching names will # be mirrored package_matches = # zope.* # plone.* # Products.* # collective.* *.* # remove packages not on pypi (or externals) anymore cleanup = True # create index.html files create_indexes = True # be more verbose verbose = True # resolve download_url links on pypi which point to files and download # the files from there (if they match filename_matches). # The filename and filesize (from the download header) are used # to find out if the file is already on the mirror. Not all servers # support the content-length header, so be prepared to download # a lot of data on each mirror update. # This is highly experimental and shouldn't be used right now. # # NOTE: This option should only be set to True if package_matches is not # set to '*' - otherwise you will mirror a huge amount of data. BE CAREFUL # using this option!!! external_links = False # similar to 'external_links' but also follows an index page if no # download links are available on the referenced download_url page # of a given package. # # NOTE: This option should only be set to True if package_matches is not # set to '*' - otherwise you will mirror a huge amount of data. BE CAREFUL # using this option!!! follow_external_index_pages = False # logfile log_filename = /home/pypimirror/pypimirror.log
Esta configuración, es una copia del archivo pypimirror.cfg.sample localizado en $PYTHON/site-packages/z3c.pypimirror-1.0.14-py2.4.egg/z3c/pypimirror, un detalle importante durante la configuración es que en la variable package_matches, se indique para descargar los espacios de nombre de paquetes zope, plone, Products y collective, de siendo así mismo el propio paquete z3c.pypimirror lo cual de esta forma estaría siendo descartado, así que para conseguir cualquier paquete desde Pypi, usted puede comentar las lineas y decir como se muestra a continuación:
package_matches = # zope.* # plone.* # Products.* # collective.* *.*
Ahora que tenemos nuestro repositorio Pypi debidamente configurado, para iniciar la replicacón del repositorio de PYP, ejecute el siguiente comando:
$ /usr/bin/pypimirror --initial-fetch --follow-external-links --follow-external-index-pages /home/pypimirror/pypimirror.cfg
Puedes supervisar los avances analiazndo el logfile de z3c.pypimirror:
$ tail -f /home/pypimirror/pypimirror.log
Cabe resaltar que NO es necesario preocuparse en crear la página índice como el archivo index.html, para el servidor Web, porque en el archivo de configuración anterior, le estamos indicado que este será creado automáticamente (create_indexes = True).
Configurando z3c.pypimirror y Apache Web Server
Mientras se sincroniza el repositorio, usted puede configurar su servidor Web, por ejemplo, Apache Web Server debe crear un sitio disponible con el siguiente comando:
# vim /etc/apache2/sites-available/pypimirror
Debe indicarle en su directiva DocumentRoot, que apunte hacia el directorio directorio, y entonces agrega la siguiente configuración:
<VirtualHost IP-ADDRESS:80> ServerName MIDOMINIO.TLD CustomLog /home/pypimirror/pypimirror.log combined DocumentRoot /home/pypimirror/paquetes </VirtualHost>
Realice un enlace simbólico desde el directorio de Apache2 sites-available/ al directorio sites-enabled/, para que su configuración previa este disponible:
# ln -s /etc/apache2/sites-available/pypimirror /etc/apache2/sites-enabled/pypimirror
Luego debe habilitar esta configuración del sitio llamado "pypimirror", con el siguiente comando:
# a2ensite pypimirror
Y por ultimo recargamos la configuración en el servicio de Apache2, con el siguiente comando:
# /etc/init.d/apache2 reload
Configurando z3c.pypimirror y Nginx Web Server
Opcionalmente si usted utiliza un Nginx Web Server debe crear un sitio disponible, con el siguiente comando:
# vim /etc/nginx/sites-available/pypimirror
y entonces agrega la siguiente configuración:
server { listen IP-ADDRESS; server_name MIDOMINIO.TLD/pypi; location /pypi { root /home/pypimirror/paquetes; } }
Realice un enlace simbólico desde el directorio de Nginx sites-available/ al directorio sites-enabled/, para que su configuración previa este disponible:
# ln -s /etc/nginx/sites-available/pypimirror /etc/nginx/sites-enabled/
pypimirror
Para finalizar debe carga de la nueva configuración, con el siguiente comand:
# /etc/init.d/nginx reload
Programar actualizaciones de z3c.pypimirror y crontab
Usted automatizar la sincronización de los paquetes adicionando una tarea en el crontab del sistema con la siguiente linea:
$ crontab -e
y entonces agregue la siguiente linea:
*/6 * * * * pypimirror /usr/bin/pypimirror --update-fetch --follow-external-links --follow-external-index-pages /home/pypimirror/pypimirror.cfg
Usando z3c.pypimirror y buidlout
Después de que todo este hecho, usted solo necesita decir en su archivo de configuración buildout (buildout.cfg) cual es la dirección HTTP del repositorio (que estamos configurando) de donde debería buscar y descargase los paquetes:
[buildout] index = http://pypi.sudominio.com ...
Guarde los cambios y ahora de esta forma cada ves que se ejecuta buildout busca inicialente este repositiorio ;)
Usando z3c.pypimirror y easy_install
Si usted necesita usar la herramienta "easy_install" del SetupTools usted puede especificar el servidor de donde usted desea bajar el paquete, con lo muestra el siguiente comando:
easy_install -i http://pypi.sudominio.com mipaquete
Usando z3c.pypimirror y pip
Opcionalmente con la herramienta "pip" es posible especificar el servidor de donde usted desea bajar el paquete, con lo muestra el siguiente comando:
pip install -i http://pypi.sudominio.com mipaquete
Reconocimientos
Agradecimientos Cleber J Santos de la empresa Simples Consultoria por escribir inicialmente este tutorial en Portugues, y a los compañeros Dhionel Diaz y Leonardo J. Caballero G. de la fundación CENDITEL, por traducir al Español y poner en practica z3c.pypimirror con el cual crearon esta completa receta :D
Ver tambien
- Buildout de z3c.pypimirror
- The PyPI Replication Project
- Plone en la Plataforma de Desarrollo de Software Libre de CENDITEL
Comentários