Junta de Andalucía devmaster@guadalinex.org
Francisco Javier Ramos Álvarez franciscoj.ramos.ext@juntadeandalucia.es
Antonio González Romero antonio.gonzalez.romero.ext@juntadeandalucia.es
frontend)backend.Aplicación web con la que podremos gestionar un repositorio de paquetes debian basado en pool, llevando un control de usuarios, con autenticación LDAP y un revisado de logs diarios.
* Por un lado dispone del backend, escrito en Python, que se encarga de la manipulación de archivos del repositorio a bajo nivel.
Y varios ficheros de configuración:
Es conveniente, si se va a trabajar con una única distribución, asignar los datos de ésta en las opciones por defecto [defaults]
ejemplo:
[repositorios]
#Añada nuevos repositorios existentes en el servidor
#Ejemplos <nombre: ruta>
#ubuntu: /var/www/repositorio/ubuntu
#debian: /var/www/repositorio/debian
#local: /home/user/repositorio/
guadalinex: /home/fran/repositorios/guadalinex-flamenco/
[pools]
#Especifique los directorios pool de cada distribución
#Ejemplo <codename: pool_directory>
#Los citados directorios deben estar ubicados en la raiz
#del repositorio especificado.
guadalinex.flamenco: pool
guadalinex.guadalinfo: pool-guadalinfo
ubuntu.dapper: pool
[defaults]
#Algunos valores por defecto
repositorio: guadalinex
dist: flamenco
apt_conf: /var/www/pooler/trunk/backend/conf/ #Indica donde se encuentran los ficheros de configuración apt.
codename.conf: Nos encontraremos uno por cada distribución. Por ejemplo, para dos distribuciones, flamenco guadalinfo, tendremos dos ficheros apt_flamenco.conf y apt_guadalinfo.conf. Son empleados para generar los ficheros Release de cada rama. Ejemplo:
APT {
FTPArchive {
Release {
Origin "Spain";
Label "Guadalinex";
Suite "breezy";
Version "2005.8.3";
Codename "flamenco";
Architectures "i386";
Components "main restricted";
Description "Guadalinex2005";
};
};
};
Interfaz de comunicación con la parte de alto nivel
La manera de invocar a los guines python se detalla a continuación:
añadir nuevo paquete
addpkg.py -p <fichero .deb o .dsc a subir> [opciones]
la lista de posibles opciones es:
Ejemplo: _addpkg.py -p /tmp/foo.deb -d flamenco -c /etc/pooler/repo.conf -r /var/www/repo
Notas:
eliminar paquete
La eliminación se realiza de manera análoga:
rmpkg -p <fichero .deb o .dsc a eliminar> [opciones]
En este caso, el parámetro a pasar con la opción -p es la ruta que tiene en el pool el fichero especificado. Esto se ha hecho así por simplicidad y por facilitar la conexión con la interfaz de alto nivel.
Las opciones permitidas son las mismas que en el caso anterior.
Notas:
Ejemplo:
rmpkg.py -p pool/main/f/foo.deb -d flamenco -c /etc/pooler/repo.conf
mover paquete
Esta funcionalidad se implementó pensando en la posibilidad de “evolucionar” de un paquete. De manera que un paquete que está en la rama test pueda pasar a la rama principal de la distribución.
La sintáxis es la siguiente:
mvpkg.py -p <paquete> -o <distribucion origen> -d <dist. destino>
¿Que pasa con los paquetes de fuentes?
Para añadir un paquete de fuentes basta con indicar el fichero .dsc del mismo y que los restantes ficheros (diff.gz, orig.tar.gz,...) estén en el mismo directorio que éste. El guión Python se encarga de identificar los ficheros correspondientes y añadirlos también.
NOTA: Para que los python puedan gestionar los repositorios, el usuario web (normalmente www-data) ha de tener permisos de lectura y escritura dichos repositorios. Como requisitos de software decir que es imprescindible tener instalado el interprete de python, como mínimo la versión 2.3 además del módulo python-apt.
Hay que prestar especial atención al tema de permisos.
Por lo general, la opción recomendada es:
chown -R administrador:pooler $REPOSITORIO).chmod -R g+rw $REPOSITORIO)2. La aplicación web tendrá la siguiente estructura de ficheros y directorios:
add_dist.php app.php auth.php confirm_delete_pkg.php content_log.php content_pck.php content_user.php edit_user.php filter.php index.php infor_events.php move_pkg_to.php new_pkg.php new_src.php
calendar.css dhtmlXGrid.css dhtmlXTabBar.css dhtmlXTree.css styles.css toolbar.css
calendar-es.js calendar.js calendar-setup.js dhtmlXCommon.js dhtmlXGridCell.js dhtmlXGrid.js dhtmlXTabbar.js dhtmlXTree.js functions_auth.js functions.js init.js md5.js poolerToolBar.class.js prototype.js wz_dragdrop.js
users_repository.ini
AuthLDAP.class.php BlockInfo.class.php check_access.php check_app.php check_user_ldap.php Command.class.php config.php delete_pkg.php delete_src.php delete_user.php dists_user.xml.php dists.xml.php end_session.php File.class.php FileInfo.class.php functions.php IniAccess.class.php IniReader.class.php language.js.php language.php Log.class.php log.xml.php move_pkg.php move_src.php msg_err_python.php myDebLog.class.php no_ie.php packages.xml.php Path.class.php tabs.xml.php tbFileInfo.class.php toolbar_calendar.xml.php toolbar_content_log.xml.php toolbar_content.xml.php toolbar_dists.xml.php toolbar_users.xml.php update_user.php upload_pkg.php upload_src.php users.xml.php view_package.php view_release.php
A continuación explicaremos el fichero config.php situado en la carpeta php y desde el que podremos configurar los parámetros principales de nuestra aplicación:
Como requisitos de software, es necesario tener instalado un servidor apache (http://httpd.apache.org/download.cgi), php versión 4.2 mínimo (http://www.php.net/downloads.php), y preferentemente un navegador Mozilla Firefox.
Configuración del fichero PHP.ini: A continuación explicaremos cuales son las directivas más importantes a configurar para un buen funcionamiento de la aplicación:
; Tamaño máximo de envíos por POST, que dependerá de las necesidades ; que tenga el usuario, por ejemplo 150 megas post_max_size = 150M
; Tamaño máximo permitido en la subida de ficheros al servidor, ; también dependerá de las necesidades, y será igual al parámetro ; anterior, es decir, 150 megas upload_max_filesize = 150M
; Tiempo máximo de ejecución para un script, que para este caso ; hemos puesto 5 minutos (300 s), teniendo en cuenta que para subir ; grandes ficheros hará falta bastante tiempo. max_execution_time = 300
; Muy similar al anterior, pero para el envío de datos por POST ; o cuadros de texto. Hemos puesto otros 5 minutos. max_input_time = 300
; Memoria que puede consumir un script, en principio, para esta ; aplicación con 8 megas basta (valor por defecto) memory_limit = 8M
; Modo seguro, que deberá estar a Off para un correcto ; funcionamiento safe_mode = Off
NOTA: si no se quiere cambiar esta directiva por temas de seguridad, se podría crear un Virtual Host para la aplicación (en el fichero de configuración del apache httpd.conf) e introducir la siguiente directiva:
php_admin_flag safe_mode off