Changes between Version 1 and Version 2 of PaginaInicio


Ignore:
Timestamp:
May 26, 2009, 9:47:08 AM (16 years ago)
Author:
irina
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • PaginaInicio

    v1 v2  
    4242}}}
    4343
    44 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 líneas:
     44Configurando 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.
     45
     46'''1.''' Cargando el módulo cgi:
     47
    4548
    4649{{{
    4750server.modules  += ( "mod_cgi" )
     51}}}
     52
     53'''2.''' Defino qué archivos tienen que ser interpretados por el servidor web como cgi. Dos posibilidades:
     54
     55 * Solo el archivo /var/www/exec
     56
     57{{{
    4858cgi.assign      = ( "exec" => "/bin/bash" )
    4959}}}
    5060
    51 Con esta configuración sólo podemos ejecutar el cgi llamado exec, situado en cualquier directorio. Hay que ver cual será la configuración definitiva, para poder incluir funciones en la página de incio también estás se deben ejecutar como cgi.
    52 
    53 Si en las pruebas quisieramos ejecutar cualquier archivo como cgi cambiaríamos segunda la línea por:
    54 
    55 {{{
    56 cgi.assign      = ( "" => "/bin/bash" )
    57 }}}
    58 
    59 Todo se ejecutaría a través de bash, si fuera html normal se  mostraría en blanco
     61 * Todos  los script situados en el dir /var/www/ (si las páginas de inicio también son cgi)
     62
     63{{{
     64$HTTP["url"] =~ "^/" {
     65        cgi.assign = ( "" => "/bin/bash" )
     66}
     67}}}
     68
     69En el segundo caso todo se ejecutaría a través de bash, si fuera html normal se  mostraría en blanco
    6070
    6171== Script cgi y páginas de inicio ==
    6272
     73Los 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.
     74
     75El formato de los enlaces debería ser
     76
     77{{{
     78http://localhost/exec?comando con argumentos&lib=path_lib1&lib=path_lib2...
     79}}}
     80
     81Simplificaremos esto incluyendo funciones que generen el enlace.
     82
    6383=== Script exec ===
    6484
    65 Sólo utilizamos un script cgi que tomará de la url el comando de EAC o hidra a ejecutar. Un ejemplo de url sería:
    66 
    67 {{{
    68 http://localhost/exec?MountPartition 1 1
    69 }}}
    70 
    71 El contenido del script /var/EAC/nfsroot/stable/var/www/exec es el siguiente (Es una primera versión a la que hay que hacerle mejoras)
     85 * Carga funciones hidra-EAC
     86 * Trata la url sustituyendo %20 (espacio en blanco) y %22 (comillas dobles)
     87 * Carga las librerías pasadas en url.
     88 * Ejecuta el comando pasado en url.
    7289
    7390{{{
     
    7996/bin/echo '<pre>'
    8097source /var/EAC/hidra/scripts/hidraEnviron
    81 DIR="/var/EAC/hidra/scripts"
    82 ID=`/bin/echo "$QUERY_STRING"| /bin/sed s/"%20"/" "/g`
    83 /bin/ls $DIR/$ID
    84 if [ echo $? ]
     98
     99RESTO=`/bin/echo "$QUERY_STRING"| /bin/sed s/"%20"/" "/g|/bin/sed s/"%22"//g`
     100#RESTO=`/bin/echo "$QUERY_STRING"| /bin/sed s/"%20"/" "/g|/bin/sed s/"%22"/"\""/g`
     101COMANDO=${RESTO%%&*}
     102
     103# Solo cargamos las librerias si el comando no pertenece a hidra ni a eac
     104# lo reconozco porque el comando type devolvera un error
     105if ! `type -t $COMANDO > /dev/null`
    85106then
    86         /usr/bin/sudo $DIR/$ID
    87 else
    88         $ID
     107   # Incluimos las librerias de las pagina de incio
     108   # Analizamos la cadena, bucle hasta que no contenga ningun &
     109   until [ $RESTO == ${RESTO%&*} ]
     110   do
     111        LIB_AUX=${RESTO%%&*}
     112        if `ls ${LIB_AUX#lib=} > /dev/null`
     113        then
     114           source ${LIB_AUX#lib=}
     115        fi
     116
     117        RESTO=${RESTO#*&}
     118
     119   done
     120   if `ls ${RESTO#lib=} > /dev/null`
     121   then
     122        source ${RESTO#lib=}
     123   fi
    89124fi
     125
     126$COMANDO
     127
    90128/bin/echo '</pre>'
    91129}}}
    92130
     131Mejoras:
     132
     133 * Que el path de hidraEnviron lo tome de la configuración
     134 * La sustitución de las dobles comillas está poco probada
     135
     136
     137
    93138=== Páginas de inicio ===
    94139
    95 Las páginas de inicio si no quisieramos incluir funciones en ellas podrían ser html puro. Por ejemplo:
     140Tenemos varias opciones:
     141
     142 * html puro: no permiten incluir librerías de funciones, pero son sencillas
     143 * shell script con html (cgi). Un poco más feas pero funcionan con el navegador en modo texto (links2)
     144 * javascript con html: permiten incluir librerías y son fáciles, pero necesitaríamos conseguir un navegador en modo texto que permitiera javascript
     145
     146Pasamos a poner un ejemplo de cada:
     147
     148__html puro__
     149
     150Las páginas de inicio si no quisieramos incluir funciones en ellas.
     151
     152Formato enlace: '''href='exec?hidraListPartitions 1''''
    96153
    97154{{{
     
    112169}}}
    113170
    114 Si queremos incluir funciones ha de ser un shell script que ejecutaremos como cgi. '''Falta'''
     171__shell script con html (cgi)__
     172
     173Formato enlace: '''href='exec?hidraBoot 1 1$LIB''''
     174
     175Formato inclusión de una librería: '''include path_lib'''
     176
     177{{{
     178#!/bin/sh
     179
     180echo Content-type: text/html
     181echo
     182
     183# Para incluir las librerias que queramos.
     184LIB=""
     185function include (){
     186        if `ls $1 > /dev/null`
     187        then
     188                LIB=$LIB\&$1
     189        fi
     190}
     191
     192include /var/www/include
     193include /var/www/include2
     194
     195
     196/bin/cat << EOF
     197<html>
     198<head>
     199<title>Pagina de inicio</title>
     200</head>
     201<body>
     202
     203<p><a href='exec?hidraListPartitions 1$LIB'>Listar particiones</a></p>
     204<p><a href='exec?hidraBoot 1 1$LIB'>Arrancar XP</a></p>
     205<p><a href='exec?hidraBoot 1 2$LIB'>Arrancar Ubuntu</a></p>
     206<p><a href='exec?hidraPoweroff$LIB'>Apagar equipo</a></p>
     207<p><a href='exec?adios "prueba"$LIB'>Adios</a></p>
     208
     209
     210</body>
     211</html>
     212EOF
     213}}}
     214
     215__javascript con html__
     216
     217Las funciones de javascript las tenemos en un archivo aparte: /var/www/utils.js
     218
     219Formato enlace: '''href='hidraListPartitions 1''''
     220
     221Formato inclusión de una librería: '''include("/var/www/include");'''
     222
     223{{{
     224<html>
     225<head>
     226<script src="utils.js" type="text/javascript"></script>
     227<script>
     228// Ejemplo de librerias incluidas
     229include("/var/www/include");
     230include("/var/www/include2");
     231</script>
     232
     233</head>
     234<body>
     235
     236<!-- Ejemplo de tres tipos de enlaces -->
     237<p><a href='hola'>hola funcion incluida en /var/www/include2</a></p>
     238<p><a href='hidraListPartitions 1'>Listar particiones con hidra</a></p>
     239<p><a href='ListPartitions 1'>Listar particiones con eac</a></p>
     240<p><a href='hidraBoot 1 2'>Arrancar partition2 con hidra</a></p>
     241
     242
     243</body>
     244</html>
     245}}}
     246
     247Script utils.js
     248
     249{{{
     250// Las funciones window.onload, link e include sirven para que podamos tener
     251// funciones tipo shell script que incluiramoe en la p?gina de inicio con
     252// include("path_al_fichero");
     253
     254// Todos los enlaces le definimos el evento onclick que llame a la funcion link
     255window.onload = function() {
     256  for(i=0;i<document.links.length;i=i+1)
     257    document.links[i].onclick = link;
     258}
     259
     260// Modifica la url del enlace haciendo que incluya las archivos que queramos
     261// quedando la url como: exec?url_inicial&lib=Archivo1&lib=Archivo2
     262function link() {
     263  aux=this.pathname.substring(1,this.pathname.length)
     264  for (i=0;i<librerias.length;i=i+1)
     265      aux=aux+"&lib="+librerias[i];
     266
     267  this.href='exec?'+aux;
     268  //alert(this.href);
     269}
     270
     271// Incluye las path de los archivos que queramos en un array que luego utilizara
     272// la funcion link
     273librerias = new Array();
     274function include(libreria){
     275   librerias.push(libreria);
     276}
     277
     278}}}
     279
     280Mejora: En vez de usar un array en la función include directamente crear la cadena que queremos unir al enlace
    115281
    116282== Abriendo el navegador en los clientes ==
     
    119285
    120286{{{
    121 links2 -g -mode 1280x960x64K !http://localhost
     287links2 -g -driver svgalib -mode 1024x768x64K http://localhost/$pagInicio
    122288}}}
    123289