Changes between Initial Version and Version 1 of variosRepoUO


Ignore:
Timestamp:
Apr 10, 2015, 1:51:12 PM (9 years ago)
Author:
irina
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • variosRepoUO

    v1 v1  
     1[[TOC(heading=Índice)]]
     2
     3{{{
     4#!div style="width:50%; background: #ffd; font: bold italic large sans-serif">
     5Propuesta de API REST para debatir en el grupo de desarrollo.
     6}}}
     7
     8= Cliente de Opengnsys con varios repositorios y unidades organizativas en directorios separados =
     9Son dos funcionalidades distintas pero ambas afectan al montaje del recurso ogimages en el cliente de opengnsys, por ello la solución ha de ser conjunta.
     10
     11== Cliente de Opengnsys con varios repositorios ==
     12
     13El cliente de opengnsys tendrá un repositorio por defecto, pero podrá restaurar y crear imágenes de otros diferente. La condición es que '''todos los repositorios tengan la misma clave ''' de samba para el usuario de opengnsys.
     14
     15El cliente al arrancar monta el recurso ogimages del repositorio por defecto.
     16
     17Los comandos de gestión de imágenes admiten además de REPO, CACHE y el valor de la ip del repositorio que queremos cambiar.
     18 * En caso de ser una ip el primer paso será comprobar si el valor que nos han dado es repositorio que está y lo cambie si es necesario.
     19 * Si el valor es REPO, se consultará la ip del repositorio por defecto y se cambiará al mismo si es necesario.
     20
     21Desde el lado del cliente la información del repositorio se optiene a partir del recurso remoto que está montado en /opt/opengnsys/images. Por ejemplo, la ip del servidor se obtiene revisando la ip del recurso remoto ogimages, el tamaño de las imágenes se calcula haciendo referencia a la ruta "local" en el cliente, el espacio libre en el repositorio según el espacio que quede en el sistema de ficheros montado en /opt/opengnsys/images, etc. Por este motivo las funciones del motor de clonación van a necesitar pocos cambio, en las pruebas realizadas hasta ahora no ha habido que modificar ninguna.
     22
     23Hasta ahora se ha conseguido utilizar deployImages y updateCache con varios repositorios en todos los protocolos. Lo demás no se ha mirado, posiblemente sae igual de fácil.
     24
     25El cambio se ha basado en la funcion '''ogChangeRepo''', que añadimos al principio de los script deployImages y updateCache.
     26
     27=== ogChangeRepo ===
     28La función cambia el recurso remoto de /opt/opengnsys/images, es decir muestra las imágenes del repositorio que digamos.  Toma como argumento:
     29 * IPREPO|REPO: la ip del repositorio, si le pasamos la cadena "REPO" busca el valor de la ip del repositorio por defecto (parámetro PXE)
     30 * Unidad organizativa: Abreviatura unidad organizativa del repositorio, para la otra funcionalidad.
     31
     32El montaje si el cliente esta en modo admin es de lectura y escritura y si está en modo user sólo de lectura.
     33
     34{{{
     35ogChangeRepo IPREPO|REPO [ OgUnit ]
     36    ej: ogChangeRepo 10.1.120.3
     37    ej: ogChangeRepo REPO
     38    ej: ogChangeRepo 10.1.120.3 cdc
     39}}}
     40
     41Falta hacer control de errores, si no se puede montar el recurso remoto que deje el repositorio por defecto y salga dando error.
     42
     43=== Cambios en los script ===
     44
     45El script deployImage sí admitía como valor del repositorio la ip, podía ser la del repositorio o la del cliente que cambiaba respectivamente por las cadenas REPO o CACHE, updateCache no lo tenía en cuenta.
     46
     47Se añade al principio antes de cualquier consulta que necesite el punto de montaje de samba:
     48
     49{{{
     50# Valor por defecto para el repositorio.
     51#[ "$REPO" == "$(ogGetRepoIp)" ] && REPO="REPO" -> lo hace  ogChangeRepo
     52[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE"
     53# Si es una ip distinta cambiamos de REPO.
     54if ogCheckIpAddress $REPO >/dev/null ; then
     55        # Si falla el cambio -> salimos con error repositorio no valido
     56        ogChangeRepo $REPO || exit $(ogRaiseError $OG_ERR_NOTFOUND '$REPO'; echo $?)
     57        REPO="REPO"
     58fi
     59}}}
     60Nota: La tercera línea sólo en deployImage, ya que updateCache no admite CACHE como valor.
     61
     62=== Pruebas realizadas ===
     63Como hemos dicho anteriormente se ha probado con éxito los comandos deployImage y updateCache con varios repositorios en todos los protocolos. Pruebas realizadas.
     64
     65{{{
     66ogChangeRepo REPO
     67ogChangeRepo 10.1.14.8
     68ogChangeRepo 10.1.14.6
     69ogChangeRepo en modo admin -> rw
     70ogChangeRepo en modo user -> ro
     71
     72updateCache 10.1.14.8 Ubuntu12.img UNICAST
     73updateCache 10.1.14.8 Ubuntu12.img MULTICAST 9000:full-duplex:239.194.17.2:70M:20:300
     74updateCache 10.1.14.8 Ubuntu12.img TORRENT seeder:1000
     75
     76deployImage 10.1.14.8 Ubuntu12 1 6 UNICAST-DIRECT
     77deployImage 10.1.14.8 Ubuntu12 1 6 UNICAST
     78deployImage 10.1.14.6 Ubuntu12BIEN 1 6 UNICAST
     79deployImage 10.1.14.8 Ubuntu12 1 6 MULTICAST-DIRECT 9000:full-duplex:239.194.17.2:150M:20:20
     80deployImage 10.1.14.8 Ubuntu12 1 6 MULTICAST 9000:full-duplex:239.194.17.2:150M:20:20
     81deployImage 10.1.14.8 Ubuntu12 1 6 TORRENT seeder:1000
     82}}}
     83
     84
     85== Unidades organizativas en directorios separados ==
     86
     87Cuando un repositorio tiene dos unidades organizativas sus imágenes se sitúan en el mismo directorio pudiendo tener problemas, por ejemplo si coinciden los nombres o se llena el espacio.
     88
     89Cada unidad organizativa tendrá sus imágenes en un subdirectorio de /opt/opengnsys/images, el nombre del subdirectorio será una abreviatura de la unidad organizativa. Está abreviatura será una propiedad más del aula en la consola y se le enviará al cliente por PXE en la variable ogunit.
     90
     91El cliente montará en /opt/opengnsys/images el recurso ogimages/ogunit, de forma que el cambio es transparente del lado del cliente. Cuando un comando le pida una imagen al servidor sí necesita la especificar a qué unidad organizativa se refiere, como los comandos aceptan que la imagen este en subdirectorios bastaría enviarle al servidor como nombre de la imagen "$OGUNIT/$IMAGENAME"
     92
     93En la cache no establecemos distinción entre las unidades organizativas ni creamos subdirectorios.
     94
     95=== Cambios en el montaje del ogimages ===
     96
     97Cuando montamos el recurso ogimages consultamos si existe el valor de ogunit y lo añadimos al path del recurso remoto. El montaje se realiza en dos pasos:
     98
     991) En el initrd tenemos la función ogExportVarEnvironment donde se definen los recursos remotos del cliente opengnsys (ogimages, oglog,...). Solo cambian las líneas:
     100
     101{{{
     102diff ogfunctions ogfunctions.orig
     103< [ "$ogunit" != "" ] && OGUNIT="/$ogunit"
     104
     105<    export SRCOGIMAGES="/opt/opengnsys/images$OGUNIT" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
     106>    export SRCOGIMAGES="/opt/opengnsys/images" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD       
     107
     108<    export SRCOGIMAGES="ogimages$OGUNIT" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
     109>    export SRCOGIMAGES="ogimages" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
     110}}}
     111
     1122) Cuando se está terminando de arrancar el script /etc/preinit/mountrepo.sh si el cliente de OpenGnSys está en modo de administración monta el recurso ogimages en modo lectura-escritura. Los cambios son:
     113{{{
     114< [ "$ogunit" != "" ] && OGUNIT="/$ogunit"
     115
     116<    nfs)       mount.nfs ${ROOTREPO}:$OGIMG$OGUNIT $OGIMG -o rw,nolock ;;
     117>    nfs)       mount.nfs ${ROOTREPO}:$OGIMG $OGIMG -o rw,nolock ;;
     118
     119<    mount.cifs //${ROOTREPO}/ogimages$OGUNIT $OGIMG -o rw,serverino,acl,username=opengnsys,password=$PASS
     120>    mount.cifs //${ROOTREPO}/ogimages $OGIMG -o rw,serverino,acl,username=opengnsys,password=$PASS
     121}}}
     122
     123
     124=== Cambios en los script ===
     125
     126En todos los pasos se crea la variable del nombre de la imagen construida poniendo delante del mismo subdirectorio de la unidad organizativa y sustituyendo esta variable donde se usaba el argumento de entrada de comando. Ejemplo:
     127{{{
     128[ "$ogunit" != "" -a "$3" == "REPO" ] && IMGNAME="$ogunit/$2" || IMGNAME="$2"
     129
     130ogExecAndLog command ogRestoreImage "$REPO" "$IMGNAME" "$DISK" "$PART"
     131}}}
     132
     133Las funciones no deben verse afectadas ya que están pensadas para que las imágenes pueda estar en subdirectorios. Hay que repasarlas todas.
     134
     135El script de servidor bin/torrent-creator, que genera las sumas de comprobación de las imágenes y los ficheros torrent, hay que modificarlo para que revise los subdirectorios de primer nivel del /opt/opengnsys/images. El cambio sería:
     136
     137{{{
     138diff torrent-creator  torrent-creator.orig
     139< for IMG in *.{img,pgz,diff} */*.{img,pgz,diff}; do
     140> for IMG in *.{img,pgz,diff}; do
     141}}}
     142 
     143
     144=== Pasamos al cliente el parámetro de la unidad organizativa por PXE ===
     145
     146Al cliente de opengnsys se le debe pasar como parámetro del kernel la abreviatura de la unidad organizativa. Inicialmente la incorporamos en las plantillas de PXE: Ejemplo:
     147{{{
     148title OpenGnSys-NET
     149keeppxe
     150kernel (pd)/ogclient/ogvmlinuz  ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true ogupdateinitrd=true ogunit=cdc INFOHOST
     151initrd (pd)/ogclient/oginitrd.img
     152boot
     153}}}
     154
     155Como solución definitiva de debe estar en la base de datos como el campo "abreviatura" en la tabla centros. Cuando se cree el fichero PXE a partir de la plantilla también habrá que consultar este dato.
     156
     157La consulta para obtener la unidad organizativa de un equipo será:
     158{{{
     159select ordenadores.idordenador, aulas.idcentro, centros.abreviatura from ordenadores inner join aulas inner join centros where ordenadores.idaula=aulas.idaula and aulas.idcentro=centros.idcentro and ordenadores.ip='$IP';
     160+-------------+----------+-------------+
     161| idordenador | idcentro | abreviatura |
     162+-------------+----------+-------------+
     163|           1 |        1 | cdc         |
     164+-------------+----------+-------------+
     165}}}
     166
     167=== Problema con el protocolo torrent ===
     168La transferencia del protocolo torrent se basa en dos procesos del servidor, btlaunchmany.bittornado y bttrack, el semillero y el tracker respectivamente. Uno de ellos no ve los subdirectorios. Habría que ver qué solución tiene.
     169
     170== Compatibilidad varios repositorios y varias unidades organizativas ==
     171En caso de querer incluir las dos funcionalidades hay que decidir cómo pasar los parámetros a los comandos, ya que tendríamos que pasar  la ip del repositorio y la unidad organizativa.
     172
     173Una posibilidad sería incluirla en el argumento del repo separada por dos puntos:
     174
     175{{{
     176$REPO=$IPREPO|REPO[:$OGUNIT]
     177}}}
     178Por ejemplo:
     179{{{
     180restoreImage 10.1.15.2:cdc Ubuntu12 1 2
     181}}}
     182
     183== Unificar el montaje de ogimages en un único paso ==
     184
     185Esto es independiente de las nuevas funcionalidades.
     186
     187El montaje se realiza en dos pasos pero podría hacerse en uno sólo, me parece que no existe ninguna comprobación intermedia que aporte algo.
     188
     189En el segundo paso el script mountrepo consulta el parámetro PXE "ogactiveadmin" para decidir si monta el repositorio en modo escritura.
     190
     191En el primer paso el script oginit del initrd llama a la función ogConnect con el parámetro "ro", bastaría comprobar el parámetro PXE ogactiveadmin y montar el recurso ogimages con los permisos correctos para cada caso. El cambio sería el siguiente:
     192
     193{{{
     194diff oginit oginit.orig
     195<[ "$ogactiveadmin" == "true" ] &&  RWOPT=',rw' || RWOPT=',ro'
     196<        ogConnect $OGSERVERIMAGES $OGPROTOCOL $SRCOGIMAGES $DSTOGIMAGES $RWOPT
     197>        ogConnect $OGSERVERIMAGES $OGPROTOCOL $SRCOGIMAGES $DSTOGIMAGES ,ro