Programacion de modulos de Webmin en 10 minutos

El otro dia se me ocurrio programar modulos para el Webmin, el webmin para los que no lo conocen, por asi decirlo a groso modo, es un panel web de administracion de servidores UNIX. Hace poco estuve leyendo un tutorial basante basico pero muy bueno en www.geocities.com/j4nusx/index.html . Hay estan los lineamientos basicos para la implementacion de un modulo webmin. Ademas estuve leyendo la documentacion de la API de webmin, para programar modulos, y me di cuenta que los permisos del servidor son por directorio, o sea el grupo o usuario que quiere permiso a un modulo lo toma por el directorio de lo modulo, ademas al ser todo CGI se pueden programar modulos en cualquier lenguaje, ya sea Perl (por default es perl ademas webmin esta hecho en perl y por lo general todos los modulos de webmin estan hechos en perl), o si no tambien en PHP, Python etc, ademas hay ports de las librerias de webmin a estos lenguajes.

Para empezar debemos tener instalado webmin en nuestro sistma, ya sea de un tar.gz un paquete .deb o un rpm, las instalacion varian, ejemplo en debian esta en /usr/share/webmin o redhat en /usr/libexec/webmin, y dentro de estos path esta contenido el webmin con sus modulos etc.

El webmin tiene un propio servidor https escrito en perl, miniserv.pl, el mismo crea un socket https en el puerto 10000 de dicho host.

Primero debemos crear el directorio para nuestro modulo ej:

/usr/libexec/webmin # mkdir miprimermodulo

Luego hay una serie de archivos y directorios principales que hacen a la estructura de nuestro modulo

como el archivo config, config.info module.info etc, y el directorio images, que contiene el icon.gif que es el icono que representa a nuestro modulo en la administracion de webmin Otro directorio con el que nos podemos topar es el directorio lang, que contiene los mensajes o cadenas traducibles y a mostrar que se guardaran en la variable tipo array $text, ejemplo podemos tener el archivo lang/es de la siguiente manera con las variables traducibles

index_title=Comandos Remotos
index_return=Regresar a la pagina principal del modulo
crear_host=Crear nuevo host
crear_host_tb=Nombre del host
crear_host_ip=Direccion IP del host

Otro archivo importante es el defaultacl

#~cat defaultacl
user=root

Que tiene los accesos por default para el modulo, cabe destacar que los permisos en webmin pueden ser por grupo o por usuario ( mirar los archivos webmin.acl webmin.groups dentro de /etc/webmin )

Hay unos archivos principales de funciones en webmin, ellos son web-lib.pl y ui-lib.pl, el primero tiene funciones basicas y minimas para el funcionamiento del modulo de webmin, y el segundo tiene funciones que hacen a la estetica y el funcionamiento del mismo.

Funciones basicas a conocer header($text{‘index_title’}); &footer(“”, $text{‘index_return’}); ui_print_header(); &ui_print_footer (); y la variable text es el array con las cadenas de texto que se mostraran en las funciones. Para acceder a variables de configuracion dentro del archivo config lo hacemos por medio de la matriz $config{‘mivariable_deconfiguracion’} etc

Si queremos programar un modulo en php, en debian tenemos que utilizar el php-cgi y en redhat como no esta, solo esta el php comun en miniserv.pl en la linea 1947 hay que hacer una modificacion y agregar:

$ENV{“REDIRECT_STATUS”} = 200;

Una vez que queremos probar como funciona nuestro modulo, o por lo menos sin funciona o no :p

Eliminamos el archivo /etc/webmin/module.infos.cache , que es una cache en la que el webmin guarda los datos de los modulos, entonces al reconstruir esa cache reescanea todos los modulos y reconstruye su lista interna, haciendolo visible en la lista principal.

Es recomendable tener un buen conocimiento de Perl o de programacion en general para encarar esta tarea, asi que el que no esta muy ducho con Perl, que lea un rato 😉 , lo que mas en claro tienen que tener es el manejo de variables globales en perl (todas son globales :p ) , el manejo de arrays hashes etc %variable @variable , funciones como push etc, manejo de archivos OPEN, ciclos como while etc. Cosas basicas pero que hay que conocerlas bien.

Ah al ser cgi, todos los archivos que queramos ejecutar deben tener la extencion CGI, aunque no es necesario que tengan permisos 755 con 644 funciona igual :), y todos deben tener #!/usr/bin/perl o #!/usr/bin/python o #!/usr/bin/php4-cgi dependiendo del lenguaje, para que sepa como ejecutarlos a los archivos.

Hoy la verdad mucho “no me esmere” en escribir por que ando con muy poco tiempo y se que si no posteaba ahora iba a pasar bastante tiempo hasta que lo haga, asi que sepan entender el mal formateo y la escritura rapida, ah y por ahi hay letras que no van para que no tengo mi teclado, estoy en otra maquina, y quiero escribir lo mas rapido posible y no es lo mismo sin el teclado de casita.

El 12 de octubre, como tenia que trabajar deje bajando todo el streaming del dia de canal 7, con tres programas alusivos a esa fecha, con participante de comunidades Mapuches, Toba, Tehuelches, Aymaras entre otros, y videos debates etc. Espero poder editar los 600MB de WMA, ya que tengo que convertilo a un formato editable por Kino, Avidemux etc, o algun editor libre que ande bajo GNU/Linux, alquien que haya tenido un caso de exito editando este tipo de video que me avise que una vez que pueda recortar los programas etc lo subo a youtube y lo pongo aca en el Blog.

Sin mas saludos a todos, ahhh y el lunes tengo el examen de Barmanager en el Club del Barman, tengo que estudiar lejislacion, sobre el codigo alimentario y unas cuantas cosas mas :s no se si llego con todo!!! jaja pero bue hay que leer, anoche no me fue muy bien en la prueba de los tiempos preparando tragos, pero despues repunte un poco :p

Seguime :