[[PageOutline(2-5,Índice)]] = Páginas de Inicio = Nota: Es una primera versión, hay todavía muchas cosas que mejorar. Al arrancar el cliente queremos que se muestre una página de inicio parecida a Rembo, es decir: * una página web con una serie de enlaces que nos permitan realizar distintas tareas, básicamente arrancar y restaurar distintos sistemas. * que permita incluir funciones personalizadas que llamen a los script de EAC. Lo haremos utilizando en los clientes un navegador que llame al servidor web local, permitiendo que ejecute shell script a través de cgi y teniendo como usuario que arranca el servicio al root para que pueda ejecutar los script con todos los privilegios. Nota: el navegador no puede llamar al servicio web del servidor EAC ya que los comandos se ejecutan en el equipo que corra el servicio web, es decir se ejecutarían en el servidor de EAC. == Configuración del servicio web del cliente == === Iniciando el servicio como root === En el archivo /var/EAC/nfsroot/stable/etc/lighttpd/lighttpd.conf comentamos las líneas siguientes: {{{ ## change uid to (default: don't care) #server.username = "www-data" ## change uid to (default: don't care) #server.groupname = "www-data" }}} === Activando el modulo cgi === Entramos en una shell del servidor EAC y montamos la imagen de arranque de los clientes con la función: {{{ MountChrootEACclient }}} Ejecutamos el comando que activa el modulo cgi y nos salimos: {{{ lighty-enable-mod cgi UmountChrootEACclient }}} Configurando del modulo cgi (es provisional). El contenido del archivo /var/EAC/nfsroot/stable/etc/lighttpd/conf-available/10-cgi.conf sólo son dos opciones. '''1.''' Cargando el módulo cgi: {{{ server.modules += ( "mod_cgi" ) }}} '''2.''' Defino qué archivos tienen que ser interpretados por el servidor web como cgi. Dos posibilidades: * Solo el archivo /var/www/exec {{{ cgi.assign = ( "exec" => "/bin/bash" ) }}} * Todos los script situados en el dir /var/www/ (si las páginas de inicio también son cgi) {{{ $HTTP["url"] =~ "^/" { cgi.assign = ( "" => "/bin/bash" ) } }}} En el segundo caso todo se ejecutaría a través de bash, si fuera html normal se mostraría en blanco == Script cgi y páginas de inicio == Los comandos se van a ejecutar siempre con el cgi exec. Las páginas de inicio tendrán enlaces que apunten este script y le pasen como parámetros el comando que queremos ejecutar y archivos que contengan funciones además de las EAC o Hidra. El formato de los enlaces debería ser {{{ http://localhost/exec?comando con argumentos&lib=path_lib1&lib=path_lib2... }}} Simplificaremos esto incluyendo funciones que generen el enlace. === Script exec === * Carga funciones hidra-EAC * Trata la url sustituyendo %20 (espacio en blanco) y %22 (comillas dobles) * Carga las librerías pasadas en url. * Ejecuta el comando pasado en url. {{{ #!/bin/sh echo Content-type: text/html echo /bin/echo '
'
source /var/EAC/hidra/scripts/hidraEnviron

RESTO=`/bin/echo "$QUERY_STRING"| /bin/sed s/"%20"/" "/g|/bin/sed s/"%22"//g`
#RESTO=`/bin/echo "$QUERY_STRING"| /bin/sed s/"%20"/" "/g|/bin/sed s/"%22"/"\""/g`
COMANDO=${RESTO%%&*}

# Solo cargamos las librerias si el comando no pertenece a hidra ni a eac
# lo reconozco porque el comando type devolvera un error
if ! `type -t $COMANDO > /dev/null`
then
   # Incluimos las librerias de las pagina de incio
   # Analizamos la cadena, bucle hasta que no contenga ningun &
   until [ $RESTO == ${RESTO%&*} ]
   do
        LIB_AUX=${RESTO%%&*}
        if `ls ${LIB_AUX#lib=} > /dev/null`
        then
           source ${LIB_AUX#lib=}
        fi

        RESTO=${RESTO#*&}

   done
   if `ls ${RESTO#lib=} > /dev/null`
   then
        source ${RESTO#lib=}
   fi
fi

$COMANDO

/bin/echo '
' }}} Mejoras: * Que el path de hidraEnviron lo tome de la configuración * La sustitución de las dobles comillas está poco probada === Páginas de inicio === Tenemos varias opciones: * html puro: no permiten incluir librerías de funciones, pero son sencillas * shell script con html (cgi). Un poco más feas pero funcionan con el navegador en modo texto (links2) * javascript con html: permiten incluir librerías y son fáciles, pero necesitaríamos conseguir un navegador en modo texto que permitiera javascript Pasamos a poner un ejemplo de cada: __html puro__ Las páginas de inicio si no quisieramos incluir funciones en ellas. Formato enlace: '''href='exec?hidraListPartitions 1'''' {{{ Pagina de inicio

Listar particiones

Arrancar XP

Arrancar Ubuntu

Apagar equipo

}}} __shell script con html (cgi)__ Formato enlace: '''href='exec?hidraBoot 1 1$LIB'''' Formato inclusión de una librería: '''include path_lib''' {{{ #!/bin/sh echo Content-type: text/html echo # Para incluir las librerias que queramos. LIB="" function include (){ if `ls $1 > /dev/null` then LIB=$LIB\&$1 fi } include /var/www/include include /var/www/include2 /bin/cat << EOF Pagina de inicio

Listar particiones

Arrancar XP

Arrancar Ubuntu

Apagar equipo

Adios

EOF }}} __javascript con html__ Las funciones de javascript las tenemos en un archivo aparte: /var/www/utils.js Formato enlace: '''href='hidraListPartitions 1'''' Formato inclusión de una librería: '''include("/var/www/include");''' {{{

hola funcion incluida en /var/www/include2

Listar particiones con hidra

Listar particiones con eac

Arrancar partition2 con hidra

}}} Script utils.js {{{ // Las funciones window.onload, link e include sirven para que podamos tener // funciones tipo shell script que incluiramoe en la p?gina de inicio con // include("path_al_fichero"); // Todos los enlaces le definimos el evento onclick que llame a la funcion link window.onload = function() { for(i=0;i