Pooler v1.0 beta

Herramienta de administración de repositorios basados en pool


Autores

Junta de Andalucía devmaster@guadalinex.org

Desarrolladores

Francisco Javier Ramos Álvarez franciscoj.ramos.ext@juntadeandalucia.es

Antonio González Romero antonio.gonzalez.romero.ext@juntadeandalucia.es

Tecnologías

  • PHP en la parte de alto nivel (frontend)
  • Python en el backend.

Descripción:

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.

Backend

* Por un lado dispone del backend, escrito en Python, que se encarga de la manipulación de archivos del repositorio a bajo nivel.

  • addpkg.py: Añade un nuevo paquete (binario o fuente).
  • mvpkg.py: Mueve paquetes entre las distintas ramas del repositorio.
  • rmpkg.py: elimina paquetes (binarios o fuentes) del repositorio.
  • package.py: estructura de datos con toda la información perteneciente a un paquete
  • packagesList.py: estructura que mantiene una lista ordenada de paquetes con operaciones básicas.

Y varios ficheros de configuración:

  • repo.conf: En este fichero se especifican datos como: repositorios existentes, distribuciones en cada repositorio, rutas de otros ficheros de configuración, nombre de los directorios pool, etc.

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.
          
  • 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:

  1. r <repositorio> : Especificar un repositorio concreto con el que trabajar.
  2. d <distribución>: Indicar la distribución a la que añadir el paquete.
  3. a <arquitectura>: Si no se especifica, se toma la indicada en el .deb
  4. c <config> : Path del fichero de configuración a utilizar (repo.conf)

Ejemplo: _addpkg.py -p /tmp/foo.deb -d flamenco -c /etc/pooler/repo.conf -r /var/www/repo

Notas:

  1. La distribución que se especifique deberá contener un fichero de configuración apt_codename.conf con el formato descrito.
  2. El repositorio que se pase con la opción ‘-r’ debe estar incluido en el fichero de configuración repo.conf, en el que se debe esecificar la ruta absoluta hasta el mismo.
  3. El usuario que utilice el script deberá tener permisos rw en el repositorio.
  4. Si no se especificara ninguna opción se tomarían las especificadas por defecto en el fichero de configuración.

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:

  1. La eliminación actualiza el fichero de paquetes (Packages o Sources) manteniendo el fichero original en el pool

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.

Configuración de permisos

Hay que prestar especial atención al tema de permisos.

Por lo general, la opción recomendada es:

  1. Crear un nuevo grupo (pooler)
  2. Añadir al nuevo grupo tanto al administrador del respositorio como al usuario web (¿www-data?).
  3. Fijar uid y guid como administrador:pooler en el repositorio (chown -R administrador:pooler $REPOSITORIO).
  4. Otorgar permisos de lectura y modificación para el grupo a todo el repositorio (chmod -R g+rw $REPOSITORIO)

Frontend

2. La aplicación web tendrá la siguiente estructura de ficheros y directorios:

  • app: contiene las ventanas, diálogos, frames... en general la interfaz web de usuario. Contenido:
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
  • css: hojas de estilo de la aplicación y sus controles. Contenido:
calendar.css
dhtmlXGrid.css
dhtmlXTabBar.css
dhtmlXTree.css
styles.css
toolbar.css
  • img: Recursos de imágenes.
  • js: el corazón de la aplicación AJAX. Módulos en JavaScript. Contenido:
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
  • locale: aún no funcional. Contendrá las definiciones para los diferentes idiomas.
  • logs: se guardarán los logs diariamente con formato yyyymmdd.log. También se creará un fichero python.log para el modo PY_DEBUG = 1 (modo depuración de python) con las salidas de cada ejecución python.
  • other: carpeta provisional donde se guarda el fichero de usuarios y cuya ruta es configurable por medio del fichero config.php que explicaremos más adelante. Contenido:
users_repository.ini
  • php: módulos y clases que dan funcionalidad a la aplicación en el lado del servidor. Contenido:
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
  • tmp: carpeta donde se almacenarán temporalmente tanto los paquetes como los ficheros fuente que se suban al servidor desde la aplicación.

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:

  • AUTH_LDAP: Indica si la autenticación se realizará por medio de LDAP (valor 1) o no (valor 0). En éste último caso se comprobarán las claves, codificadas con MD5, en el fichero de usuarios users_repository.ini.
  • LDAP_SERVER: Para autenticación LDAP, host del servidor LDAP.
  • LDAP_PORT: Para autenticación LDAP, puerto del servidor.
  • DN_BASE: Para autenticación LDAP, dn base donde realizar la autenticación.
  • USERS_INI: Ruta absoluta donde se encuentra el fichero de usuarios users_repository.ini. Hay que tener en cuenta que este fichero ha de tener permisos de escritura para el usuario www-data.
  • PATH_LOG: Ruta absoluta donde se almacenarán los logs de la aplicación. Es necesario que el usuario www-data tenga permisos de escritura en dicha carpeta.
  • PATH_TEMP: Ruta absoluta donde se moverán los ficheros subidos desde la aplicación, y por lo tanto deberá tener permisos de escritura para el usuario www-data.
  • REPO_CONF: Ruta absoluta donde se guardará el fichero de configuración repo.conf, necesario para los módulos de python.
  • ADD_PKG_PY: Ruta absoluta del módulo addpkg.py encargado de añadir paquetes y/o ficheros fuente.
  • MV_PKG_PY: Ruta absoluta del módulo mvpkg.py encargado de mover paquetes y/o ficheros fuente.
  • RM_PKG_PY: Ruta absoluta del módulo rmpkg.py encargado de eliminar paquetes y/o ficheros fuente.
  • TIME_LIMIT: Tiempo máximo de ejecución de ciertos scripts susceptibles de superar el time out. Dejar por defecto 300 que equivale a 5 minutos.
  • PY_DEBUG: Indica si se activa (valor 1) o desactiva (valor 0) el módo depuración de python.
  • SHOW_WARNIGN: Indica si se muestran o no los warnigns de inicio. Éstos no detienen la ejecución de la aplicación, pero es asonsejable tener en cuenta dichos avisos.
  • $fieldsFilter: Array que contiene los distintos campos por los que se podrá realizar un filtrado de paquetes o ficheros fuente. Se ha dejado libre para que el usuario pueda definirlos según sus intereses.

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
 
principal.txt · Última modificación: 2007/03/20 02:00
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki