UNIVERSIDAD DE CASTILLA-LA MANCHA
Transcripción
UNIVERSIDAD DE CASTILLA-LA MANCHA
UNIVERSIDAD DE CASTILLA-LA MANCHA ESCUELA SUPERIOR DE INFORMÁTICA INGENIERÍA EN INFORMÁTICA Plataforma para el despliegue y administración remota de sistemas heterogéneos en red Ignacio Dı́ez Arias Julio, 2010 UNIVERSIDAD DE CASTILLA-LA MANCHA ESCUELA SUPERIOR DE INFORMÁTICA Departamento de Tecnologı́as y Sistemas de la Información PROYECTO FIN DE CARRERA HYDRA: Heterogeneous system deployment and remote administration Autor: Ignacio Dı́ez Arias Director: David Villa Alises Julio, 2010 TRIBUNAL: Presidente: Vocal 1: Vocal 2: Secretario: FECHA DE DEFENSA: CALIFICACIÓN: PRESIDENTE Fdo.: VOCAL 1 Fdo.: VOCAL 2 Fdo.: SECRETARIO Fdo.: c Ignacio Dı́ez Arias. Se permite la copia, distribución y/o modificación de este documen to bajo los términos de la GNU Free Documentation License (GFDL), versión 1.3 o cualquier versión posterior publicada por la Free Software Foundation, sin secciones invariantes. Tal como exige la licencia, se adjunta una copia de la misma en el apéndice D. Este documento ha sido editado en Emacs y maquetado con LATEX. Las imágenes han sido generadas con inkscape y dia. Resumen A dı́a de hoy no es raro encontrar instituciones, empresas e incluso hogares en los que se utilizan distintos sistemas operativos, o varias instancias del mismo, en cada ordenador. Cuando se trata de unas pocas máquinas, no es necesario utilizar ninguna herramienta auxiliar para gestionarlos. Sin embargo, a medida que crece el número de ordenadores a controlar, administrar tantos sistemas operativos puede ser una tarea tediosa; sobre todo si la configuración cambia con cierta frecuencia. En este documento se estudiarán los problemas que plantea la gestión de este tipo de entornos; y se describirá un sistema que sirve como solución ante dichos problemas, proporcionando una herramienta de gestión remota y sencilla. Como resultado de este proyecto, se aporta el sistema HYDRA, cuyo objetivo principal es conseguir facilitar al administrador las tareas de gestión y administración de un conjunto de nodos: instalar aplicaciones en todos los ordenadores, restaurar los que no funcionen correctamente, añadir o quitar un sistema operativo, etc. Usando como base un middleware de comunicaciones se crearon las herramientas necesarias para instalar varios sistemas operativos en cada nodo, pudiendo configurar una planificación temporal de las instalaciones. Para ello, se particionarán los discos duros de los nodos y se copiarán los ficheros de cada sistema operativo en su partición correspondiente, quedando los sistemas instalados de forma nativa. Posteriormente, se configurará un gestor de arranque que permita elegir cuál de ellos arrancar. Agradecimientos ((Toda historia tiene un final feliz, sólo hay que saber cuándo parar de contarla)) Neil Gaiman, The Sandman ...y ésta ha llegado al suyo. Ha sido un camino largo, demasiado para el gusto de todos. Pero lo importante no es terminar el camino rápido, sino hacerlo. Durante este tiempo he intentado aprender de todas las personas que me han rodeado, y he de decir que he aprendido mucho. Tengo que agradecérselo a la gente del grupo Arco: Félix, Fernando, JuanCarlos y en general, todos los demiurgos, por hacerme un hueco en el grupo y ayudarme a crecer profesionalmente. Mención especial dentro de ese conjunto para mi director David, y para Paco, pues ellos son los que me han sufrido más de cerca y también de los que más he aprendido, a veces en contra de mi voluntad. No puedo olvidarme tampoco de ((los de abajo)), la gente del labo: José Luis (Lucas), Miguel Ángel, Cleto, Tobı́as, Javibot, Manolo, Peris, Sergio, Richard, Óscar, Chanque, ... Gente con la que puedes contar tanto para irte de fiesta y divertirte como nunca, como para dar el callo y trabajar duro al dı́a siguiente. Gracias por ayudarme y echarme una mano siempre que lo he necesitado (que han sido muchas veces). Gracias también a mis amigos de fuera de la Escuela: Marina, Lorenzo, Fede, Virginia y toda la gente de volley, por darme ánimos y apoyo cuando lo necesitaba. Y por último y por lo tanto, más importante, tengo que dar las gracias a mis padres por aguantarme todos estos años. Es por todos conocido el hecho de que muchos ((informáticos)) (no todos) se transforman en máquinas de von Neumann andantes, que aplican la lógica en todo lo que hacen, hablan con expresiones raras y muestran un comportamiento errático. Ellos lo han sufrido de primera mano y aún ası́, me siguen aguantando. Gracias a todos. A mis padres Índice general Índice general XIII Índice de figuras XIX Índice de Tablas XXI 1. Introducción 1.1. Estructura del Documento . . . . . . . . . . . . . . . . . . . . . . . . . 2. Objetivos del Proyecto 1 3 5 2.1. Objetivo General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2. Objetivos Especı́ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3. Estado del Arte 3.1. Cargadores de Arranque . . . . . . . . . . . . . . . . . . . . . . . . . . 9 10 3.2. Particiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.3. Sistemas de Ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4. Utilidades y herramientas de base . . . . . . . . . . . . . . . . . . . . . 15 3.4.1. WoL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.4.2. PXE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.4.3. FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.4.4. TFTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.4.5. NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.4.6. unionfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.4.7. MAD Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.5. Middlewares de Comunicaciones . . . . . . . . . . . . . . . . . . . . . . 19 3.5.1. ZeroC Ice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.5.2. CORBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.5.3. Java RMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.6. Aplicaciones de Clonado . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.6.1. PartImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.6.2. Ghosting for Unix . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.6.3. NTFS Clone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.6.4. Clonezilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.7. Distribución de Software . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.7.1. UDPCast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.7.2. ZeroInstall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.7.3. Fully Automated Installation . . . . . . . . . . . . . . . . . . . 26 3.7.4. System Imager . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.7.5. DRBL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.7.6. LTSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.7.7. SLIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.7.8. Userful Multiplier . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.7.9. rootz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.8. Herramientas para despliegue . . . . . . . . . . . . . . . . . . . . . . . 29 3.8.1. Virtual Appliances . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.8.2. MetaOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.8.3. Installable Units . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.8.4. Kadeploy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.9. Gestión de Red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.10. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4. Método de Trabajo y Herramientas 37 4.1. Método de Trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.2. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.2.1. Lenguajes de Programación . . . . . . . . . . . . . . . . . . . . 39 4.2.2. Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.2.3. Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2.4. Documentación . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. Desarrollo 40 43 5.1. Especificación de Requisitos . . . . . . . . . . . . . . . . . . . . . . . . 44 5.2. Casos de Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.3. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5.3.1. Base de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5.4. Entorno de Desarrollo y Pruebas . . . . . . . . . . . . . . . . . . . . . 51 5.4.1. Plan de Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.5. Incrementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.5.1. Incremento 1: Información del Sistema . . . . . . . . . . . . . . 62 5.5.2. Incremento 2: Particiones . . . . . . . . . . . . . . . . . . . . . 64 5.5.3. Incremento 3: Instalar imágenes . . . . . . . . . . . . . . . . . . 65 5.5.4. Incremento 4: Manager . . . . . . . . . . . . . . . . . . . . . . . 67 5.5.5. Incremento 5: Delegados . . . . . . . . . . . . . . . . . . . . . . 69 5.5.6. Incremento 6: Optimizaciones . . . . . . . . . . . . . . . . . . . 70 5.6. Bridge ethernet y servidor DHCP/PXE . . . . . . . . . . . . . . . . . . 75 5.7. Tamaño del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 6. HYDRA 79 6.1. Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 6.2. Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 6.2.1. La red IceGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 6.2.2. Agente de Base de Datos . . . . . . . . . . . . . . . . . . . . . . 82 6.2.3. Preparación de imágenes . . . . . . . . . . . . . . . . . . . . . . 82 6.2.4. Generación de la Configuración . . . . . . . . . . . . . . . . . . 84 6.3. Delegados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 6.4. HostInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 6.5. Installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 6.6. Hydra-admin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 7. Caso de Estudio: ESI 91 7.1. Situación Actual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 7.2. Implantación de HYDRA . . . . . . . . . . . . . . . . . . . . . . . . . . 95 8. Conclusiones y Trabajo Futuro A. Manual de Usuario 99 103 A.1. Gestión de Imágenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 A.2. Gestión de Despliegues . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 A.3. Gestión de Equipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 B. Terminologı́a 109 C. Acrónimos y Siglas 111 D. GNU Free Documentation License 115 Bibliografı́a 121 Índice de figuras 3.1. Tabla de Particiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.2. Esquema de funcionamiento de PXE . . . . . . . . . . . . . . . . . . . 16 3.3. Invocaciones remotas con semántica de invoación local, tı́picas de los middlewares de comunicaciones . . . . . . . . . . . . . . . . . . . . . . 19 3.4. Estructura de Ice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.5. Estructura de CORBA . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.6. Estructura de Java RMI . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.7. Installable Units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.8. Funcionamiento de Kadeploy2 . . . . . . . . . . . . . . . . . . . . . . . 32 4.1. Desarrollo Incremental . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.1. Diagrama de Casos de Uso . . . . . . . . . . . . . . . . . . . . . . . . . 47 5.2. Diagrama de Casos de Uso para el Delegado y el Manager . . . . . . . 49 5.3. Diagrama de Componentes . . . . . . . . . . . . . . . . . . . . . . . . . 51 5.4. Diagrama E/R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 5.5. Esquema de la BBDD . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 5.6. Diagrama de Clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.7. Estructura de red de HYDRA . . . . . . . . . . . . . . . . . . . . . . . 76 5.8. Lı́neas por lenguaje de programación . . . . . . . . . . . . . . . . . . . 77 6.1. Proceso de preparación de una Imagen . . . . . . . . . . . . . . . . . . 80 6.2. Flujo de trabajo en HYDRA . . . . . . . . . . . . . . . . . . . . . . . . 84 6.3. Diagrama de Componentes . . . . . . . . . . . . . . . . . . . . . . . . . 86 6.4. Secuencia de instalación en un nodo . . . . . . . . . . . . . . . . . . . . 88 6.5. Pantalla de arranque (GRUB) de un nodo . . . . . . . . . . . . . . . . 89 7.1. Pantalla de selección de máquina virtual . . . . . . . . . . . . . . . . . 92 7.2. Esquema de las máquinas virtuales en los laboratorios . . . . . . . . . . 94 Índice de Tablas 3.1. Tipos de Particiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2. Comparativa de herramientas de clonado . . . . . . . . . . . . . . . . . 25 3.3. Comparativa de Sistemas . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.1. Lineas de código por módulo . . . . . . . . . . . . . . . . . . . . . . . . 77 5.2. Estimación de costes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 1 Introducción xisten numerosos entornos (empresas, instituciones, etc.) en los que se trabaja con una gran cantidad de nodos, que pueden ser desde ordenadores de sobremesa a estaciones de trabajo, nodos de computación, tabletPC,...; en definitiva, distintos tipos de hardware, en los que deben ejecutarse distintos tipos de software. Es decir, existe gran heterogeneidad tanto a nivel hardware como software. E En un entorno con estas caracterı́sticas, instalar el software necesario en cada equipo y mantenerlos actualizados y libres de errores puede llegar a ser una tarea laboriosa y que consume una ingente cantidad de tiempo. En este tipo de sistemas, desde el punto de vista de la administración, las tareas de gestión de la configuración y del mantenimiento son mucho más complejas que en los sistemas homogéneos, ya que cada nodo tiene unas caracterı́sticas y restricciones especı́ficas que difieren de las del resto (drivers de tarjeta gráfica, tamaño y tipo de disco duro,...). Además, cada usuario o grupo de usuarios puede necesitar ejecutar distintos sistemas operativos, lo que dificulta aún más la gestión de la configuración. Una primera alternativa planteada en el ámbito de la administración de grandes conjuntos de ordenadores es el uso de máquinas virtuales para tratar de homogeneizar el acceso a los nodos. Sin embargo, esta solución no suele ser la óptima, precisamente por esa homogeneización, ya que la capa de virtualización enmascara las caracterı́sticas intrı́nsecas de cada máquina, haciéndolas a todas iguales. Esto es un problema si se 2 CAPÍTULO 1. INTRODUCCIÓN quiere aprovechar al máximo el hardware de los equipos. Además, consume una cantidad nada despreciable de recursos que, de otra forma, podrı́an ser aprovechados por los usuarios. En los laboratorios docentes de la ESI se pueden observar de primera mano estos problemas, lo que crea una motivación adicional para desarrollar un sistema que facilite el uso de los ordenadores, tanto por parte de los alumnos como de los profesores y administradores. En el uso de los laboratorios se observó que el empleo de máquinas virtuales no era del todo aceptado: algunos profesores tenı́an problemas para poder realizar de forma efectiva las actividades que requerı́an sus asignaturas. Además, cada asignatura necesita de un conjunto de aplicaciones diferentes, que corren sobre distintos sistemas operativos, con dependencias que pueden entrar en conflicto con las de otras asignaturas, etc. Todos estos problemas se podrı́an evitar si los sistemas operativos se instalaran de forma nativa en los equipos. Sin embargo, hacer esto en todas las máquinas una a una implicarı́a un consumo de tiempo colosal, pues habrı́a que examinar cada ordenador para determinar la configuración que necesita en base a su hardware. Después, habrı́a que ir instalando máquina por máquina cada sistema operativo hasta que todo el conjunto estuviese listo. No obstante, esta tarea se puede automatizar. Se pueden crear herramientas que permitan inspeccionar el nodo para saber qué hardware especı́fico posee, y se le pueden transmitir ficheros y realizar operaciones de forma remota. Una imagen especialmente preparada para un conjunto de nodos iguales podrı́a copiarse de forma automática y dejar el nodo listo para su uso, sin intervención humana. En este documento se presenta el sistema HYDRA, que utiliza estas ideas para resolver los problemas derivados de administrar un conjunto de computadores con varios sistemas operativos. El sistema pretende dar soporte y automatizar las tareas de mantenimiento de estos escenarios, desde la instalación de un sistema operativo, hasta restaurar la configuración de un nodo, pasando por la aplicación de actualizaciones o parches. Con el sistema propuesto, los administradores podrán reducir el tiempo que dedican a instalar nuevos SSOO y recuperar o solucionar incidencias; y los usuarios podrán 1.1. ESTRUCTURA DEL DOCUMENTO 3 disponer del SO con configuraciones personalizadas, con las aplicaciones y configuración que necesiten, incluso en el caso de que éstas cambien periódicamente. 1.1. Estructura del Documento A continuación se detalla la estructura que seguirá el documento, con una pequeña descripción de lo que se puede encontrar en cada capı́tulo. Capı́tulo 2: Objetivos del Proyecto Aquı́ se encuentran recopilados los problemas detectados y los objetivos que se han marcado para el proyecto, tanto generales como especı́ficos. Capı́tulo 3: Estado del Arte En este capı́tulo se realiza un estudio sobre las herramientas ya existentes en el mercado relacionadas con los problemas que se abordan en el proyecto. Capı́tulo 4: Método de Trabajo y Herramientas Este capı́tulo describe la metodologı́a seguida para el desarrollo del proyecto, ası́ como las herramientas utilizadas. Capı́tulo 5: Desarrollo Estudio del problema a resolver, análisis de requisitos, y diseño del sistema final. Capı́tulo 6: HYDRA En esta parte se encuentra una descripción detallada del sistema desarrollado, su estructura lógica y fı́sica, y las herramientas creadas para su elaboración. Capı́tulo 7: Caso de Estudio: ESI Este capı́tulo describe el sistema actual implantado en la ESI para intentar solventar los mismos problemas que HYDRA, y cómo la aplicación del nuevo sistema puede mejorar la situación actual. Capı́tulo 8: Conclusiones y Trabajo Futuro Para terminar, se realizará una evaluación de los objetivos alcanzados y el trabajo que queda por realizar. Anexo A: Manual de Usuario Pequeño manual de usuario para explicar el manejo de la herramienta de administración del sistema, y las distintas funcionalidades que ofrece. 4 CAPÍTULO 1. INTRODUCCIÓN Anexo B: Terminologı́a Definiciones de algunos de los conceptos más importantes del proyecto. Anexo C: Acrónimos y Siglas Listado de los acrónimos y siglas utilizados en este documento, y su significado. Anexo D: GNU Free Documentation License Texto de la licencia con que se libera este documento. 2 Objetivos del Proyecto En este capı́tulo... Contenidos 2.1. Objetivo General . . . . . . . . . . . . . . . . 5 2.2. Objetivos Especı́ficos . . . . . . . . . . . . . 6 ara delimitar el alcance del proyecto y qué tareas deberá ser capaz de realizar una vez acabado, se definirán a continuación una serie de objetivos que permitirán entender mejor los problemas detectados y las soluciones a aportar. P 2.1. Objetivo General En definitiva, lo que se persigue con este proyecto es conseguir una herramienta que facilite la labor tanto al administrador de sistemas como a los usuarios, en entornos de trabajo en los que se utilizan varios sistemas operativos en cada máquina, y que permita a los usuarios utilizar todos los recursos de cada nodo sin limitaciones. 6 CAPÍTULO 2. OBJETIVOS DEL PROYECTO El objetivo de este proyecto es desarrollar un sistema ligero y poco intrusivo que facilite la administración de la configuración del conjunto de nodos, permitiendo instalar varios SO en cada uno, de manera automática y teniendo en cuenta además que dicha configuración puede cambiar con cierta frecuencia (semanal o incluso diaria). 2.2. Objetivos Especı́ficos Para poder llevar a cabo esta tarea, es necesario cumplir una serie de requisitos. Entre los principales objetivos a cubrir se encuentran: Instalación automática y masiva La principal finalidad es poder distribuir aplicaciones y SSOO en un número elevado de computadores de forma automática y completamente desatendida, de forma que ni los administradores ni los usuarios deban tener en cuenta los detalles de gestión. Acceso a periféricos La utilización de una máquina virtual impide el acceso a los dispositivos que ésta no emule en su totalidad, lo que restringe, por ejemplo, la utilización de ciertos periféricos, puertos USB o la aceleración por hardware de las tarjetas gráficas. Utilizar el sistema operativo de forma nativa evita estos inconvenientes. Mayor rendimiento Al suprimir la máquina virtual, todas las prestaciones de la computadora quedan a disposición de las aplicaciones de usuario, lo que se traduce en un mejor aprovechamiento de la máquina. Integridad de datos Mediante el uso de la herramienta de administración del sistema, será muy sencillo restaurar un equipo cuyos datos o configuración se hayan visto comprometidos, por ejemplo por un ataque o por un mal uso por parte de los usuarios. Bastará con indicarle al sistema que vuelva a configurar ese equipo desde cero, y se hará de forma automática siguiendo los parámetros preestablecidos para esa máquina concreta. Configuración a medida Cada usuario podrá crear una o varias imágenes, y configurarlas como él quiera, con los programas y el software totalmente adaptado a sus necesidades especı́ficas. 2.2. OBJETIVOS ESPECÍFICOS 7 Planificación Los usuarios podrán planificar el funcionamiento del sistema, de forma que la gestión de los despliegues e instalaciones pueda realizarse de manera automática. De esta forma se reduce la carga de trabajo del personal de administración de sistemas. El sistema debe ser flexible, ya que las imágenes de los sistemas que se quieran arrancar cambiarán frecuentemente, se añadirán aplicaciones nuevas, e incluso se añadirán o eliminarán sistemas enteros. En caso de que algún ordenador vea comprometida la integridad de sus datos, debe ser muy fácil y rápido poder devolverlo a un estado seguro. La velocidad también es un factor importante, ya que se pretenden aprovechar los periodos de inactividad de los nodos (tı́picamente los periodos de descanso de la empresa o institución donde se instale) para realizar la instalación y dejar los ordenadores preparados para el turno siguiente. El sistema final deberı́a ser capaz de manejar varias imágenes de sistemas operativos distintos, con sus aplicaciones instaladas, y arrancar la que corresponda. También deberı́a proporcionar una manera sencilla de modificar y actualizar las imágenes en los servidores cuando los usuarios necesiten instalar nuevas aplicaciones o, simplemente, actualizar las existentes. La gestión deberı́a ser fácil, simple y remota, para poder manejar y configurar cualquier máquina sin necesidad de tener que desplazarse fı́sicamente hasta ella. Desde un ordenador que actuarı́a como administrador, deberı́an poder controlarse todos los demás, ver su estado, restaurarlos en caso de fallos, añadir/borrar/modificar las imágenes de trabajo, etc. Como motivación subyacente al desarrollo del proyecto, se pretende implantar HYDRA como sistema de gestión de los laboratorios docentes de la ESI, y quizá también de todo su parque informático. Para mejorar el sistema actualmente en uso, es necesario evitar el uso de máquinas virtuales. De esta forma no sólo se ahorrarı́an los recursos que ocupan las máquinas virtuales, sino que además no habrı́a limitación a la hora de utilizar los ordenadores. 3 Estado del Arte En este capı́tulo... Contenidos 3.1. Cargadores de Arranque . . . . . . . . . . . 10 3.2. Particiones . . . . . . . . . . . . . . . . . . . 11 3.3. Sistemas de Ficheros . . . . . . . . . . . . . 14 3.4. Utilidades y herramientas de base . . . . . 15 3.5. Middlewares de Comunicaciones . . . . . . 19 3.6. Aplicaciones de Clonado . . . . . . . . . . . 23 3.7. Distribución de Software . . . . . . . . . . . 25 3.8. Herramientas para despliegue . . . . . . . . 29 3.9. Gestión de Red . . . . . . . . . . . . . . . . . 33 3.10. Conclusiones . . . . . . . . . . . . . . . . . . 34 ntes de iniciar el diseño de cualquier proyecto, es necesario informarse sobre las herramientas ya existentes sobre la misma temática, para ver si algunos de los problemas que se pretende resolver están ya solucionados, aunque sea en parte. Si es A 10 CAPÍTULO 3. ESTADO DEL ARTE posible reutilizar herramientas ya probadas y validadas, el proyecto ganará en fiabilidad y su desarrollo será menos costoso. En este capı́tulo se presenta una pequeña introducción a los conceptos y herramientas que se emplearon para la elaboración del proyecto, ası́ como una descripción de varios sistemas y herramientas que versan sobre la misma problemática que este proyecto, y que intentan resolver algunos problemas similares a los planteados. 3.1. Cargadores de Arranque Los cargadores de arranque son pequeños programas que se ejecutan al inicio del equipo, cuya tarea es cargar el kernel del sistema operativo y, finalmente, pasarle el control. En la mayorı́a de las arquitecturas hardware, los cargadores de arranque se alojan en el Master Boot Record (MBR), cuya capacidad es tan sólo de 512 Bytes, por lo que suelen dividirse en varias etapas. La primera etapa (que reside en el MBR) la lee la BIOS, y se ocupa de cargar la segunda etapa desde su ubicación, generalmente en otra parte del disco duro. La segunda etapa ejecuta el cargador del sistema operativo, y suele presentar un menú para que el usuario decida cuál quiere arrancar. El cargador cede entonces el control al kernel del sistema operativo, que se ocupa de cargar los controladores de dispositivos y demás programas para el control del sistema, hasta finalmente cargar los programas de usuario. Normalmente, los usuarios consideran el proceso de carga finalizado cuando el sistema es capaz de responder a los eventos del exterior (periféricos de entrada). GRUB y LILO Son los dos cargadores más extendidos en el mundo POSIX. Funcionan prácticamente igual, aunque GRand Unified Bootloader (GRUB) tiene la ventaja de contar con una consola de lı́nea de comandos. Esto resulta útil cuando existe algún error y no se puede cargar el sistema operativo. En el caso de LInux LOader (LILO) serı́a necesario arrancar el equipo desde otro dispositivo, editar la configuración y reiniciar. 3.2. PARTICIONES 11 Aunque son producto de la comunidad GNU, ambos pueden arrancar otros sistemas operativos mediante mecanismos de chain-loading, que consisten en utilizar los cargadores de arranque de los otros sistemas operativos, en lugar de intentar cargar el SO directamente. Loadlin Se trata de un cargador de arranque un tanto especial, que sirve para arrancar Linux desde Microsoft Disk Operating System (MS-DOS) o Windows (95, 98 y ME), una vez que éstos estaban en ejecución, quitándolos de la memoria y pasándole el control al kernel Linux. Este tipo de cargador también se conoce como ((calzador )), y no operan desde el MBR. Cargadores por Red Es posible también arrancar un equipo informático a través de la red. En este caso, el sistema operativo se encuentra almacenado en otro computador, que actúa de servidor, y se transfieren los ficheros por protocolos ligeros, por ejemplo, TFTP. Es necesario disponer de una configuración especial en el servidor y que la tarjeta de red y el BIOS del cliente tengan soporte para el proceso. 3.2. Particiones Las particiones son divisiones lógicas realizadas en el disco duro, para dedicarlas a cometidos especı́ficos, o evitar la pérdida de todos los datos en caso de que ocurra algún fallo en el disco: mientras que una partición puede verse afectada, las otras se mantendrı́an a salvo. En el disco duro, y concretamente en el MBR, se almacena una estructura conocida como Tabla de Particiones. En esta estructura se describen las particiones existentes en el disco. La tabla empieza en la dirección 0x1BE y ocupa 64 Bytes, con 4 entradas de 16 Bytes cada una. Al final se encuentra la palabra 0xAA55 (55 AA en codificación littleendian) que es la firma de registro de inicio (Boot Record Signature). En la figura 3.1 12 CAPÍTULO 3. ESTADO DEL ARTE 01B0 01C0 01D0 01E0 01F0 Partición Partición Partición Partición k k k k k CD 01 FF FF FF 10 00 FF FF FF AC 07 83 82 83 3C FE FE FE FE 00 FF FF FF FF 75 FF FF FF FF F4 3F CC EB E5 C3 00 F2 E7 CF E7 00 34 1D 3B F9 00 0C 0F 0F 07 8D 1F FA 9C 00 F2 F5 E7 75 00 34 E8 1D E0 00 0C 02 00 0D 80 00 00 00 55 01 FE FE FE AA NTFS Linux Swap Linux Figura 3.1: Tabla de Particiones se muestran los últimos 80 Bytes del MBR de un disco duro, y se puede observar la tabla de particiones, en la que se han resaltado las 4 entradas. Las particiones pueden ser de 3 tipos: Primarias Son el primer tipo de partición que se creó, divisiones crudas del disco, y contienen únicamente un sistema de ficheros. Debido al reducido espacio disponible en el MBR, la tabla de particiones sólo puede albergar 4 particiones primarias. Una entrada de este tipo en la tabla de particiones tiene la siguiente estructura: Indicador de arranque (1 Byte) Usado por los sistemas DOS para indicar una partición arrancable. El valor 0x80 indica que es arrancable (o activa); 0x00, inactiva. Comienzo de la partición (3 Bytes) Coordenadas en codificación Cylinder, Head, Sector (CHS) del inicio de la partición. Tipo de partición (1 Byte) Descriptor del tipo de partición. Algunos tipos interesantes de particiones se muestran en la tabla 3.1 Final de la Partición (3 Bytes) Último sector de la partición, también en formato CHS. LBA (3 Bytes) Sector de inicio de la partición, esta vez en formato Logical Block Addressing (LBA). Este formato de direccionamiento es más sencillo que el CHS, ya que numera los sectores consecutivamente, en lugar de utilizar 3 coordenadas. Tamaño (4 Bytes) Tamaño de la partición en sectores. Esto implica que, con 512 Bytes por sector, la mayor partición posible es de unos 2.048 GiB. 13 3.2. PARTICIONES Código 0x04 0x05 0x06 0x07 0x0B 0x0C 0x0F 0x82 0x83 Tipo FAT-16 menor de 32 MB Partición Extendida FAT-16 mayor de 32 MB HPFS o NTFS FAT-32 FAT-32 con extensión INT-13 Partición extendida más allá del cilindro 1024 Linux Swap Linux ext2/ext3/ext4/reiserfs y otros Tabla 3.1: Tipos de Particiones Extendidas Son un tipo especial de partición primaria, creado para solucionar la limitación en el número máximo de particiones primarias. En realidad es una estructura en forma de lista enlazada, utilizada para albergar dentro particiones lógicas, no datos. Lógicas o Secundarias Estas particiones sı́ que contienen datos y siempre están contenidas en una partición extendida. La entrada correspondiente a una partición extendida no contiene el mismo formato que la de una primaria, sino que indica otro sector, que será un Extended Boot Record (EBR), en el que se aloja otra tabla de particiones. Esta tabla también es un poco diferente, ya que es para las particiones lógicas. La tabla contiene la información sobre la partición lógica y, si procede, el enlace a otro EBR, donde se encuentra la siguiente partición lógica. Cabe destacar que, mientras los sistemas DOS y Windows sólo podı́an arrancar desde una partición primaria, otros gestores como GRUB y LILO buscan en la tabla de particiones su segunda etapa (ver sección 3.1) en lugar de los datos del sistema operativo. Esta segunda etapa es capaz de arrancar desde cualquier partición del disco, independientemente de su tipo. 14 3.3. CAPÍTULO 3. ESTADO DEL ARTE Sistemas de Ficheros La información se guarda en los dispositivos en forma de bloques, usualmente de 512 Bytes, pero el sistema de ficheros proporciona una abstracción (el fichero) que representa un conjunto de bloques relacionados entre sı́. De hecho, un sistema operativo seguro no dejará que los procesos manejen bloques: el fichero es la unidad mı́nima de almacenamiento del sistema de ficheros. Un sistema de ficheros es una estructura de datos que permite manejar y gestionar la información almacenada en un dispositivo. Cada sistema operativo suele utilizar sus propios sistemas de ficheros, aunque normalmente son capaces de manejar otros, para aumentar la interoperabilidad. El tipo de sistema de ficheros que utilice un determinado SO será uno de los factores clave para poder darle soporte en HYDRA. A cada fichero se le asigna una serie de atributos, que es información útil para la gestión del archivo: Nombre Una cadena de texto para identificar el archivo. Algunos SSOO permiten que un fichero tenga más de un nombre. Ubicación Indica el dispositivo y la zona de almacenamiento del mismo para el fichero. En la mayorı́a de los casos ni siquiera se puede consultar. Tipo Indica la clase de información que almacena (imagen, audio, texto...). Dependiendo del tipo, pueden existir operaciones especializadas para el mismo. Tamaño Tamaño actual del fichero en Bytes. Permisos Información para el control de acceso al fichero. Fecha Información sobre cuándo se creó el fichero, cuándo se accedió a él, la última vez que fue modificado, etc. Usuario El identificador del usuario que creó el fichero. Sólo los dos primeros son realmente indispensables, el resto son opcionales, por lo que puede que algunos sistemas de ficheros no cuenten con algunos de estos atributos. 3.4. UTILIDADES Y HERRAMIENTAS DE BASE 3.4. 15 Utilidades y herramientas de base Existe una gran cantidad de programas, herramientas y protocolos que proporcionan funcionalidades de propósito general necesarias para los objetivos de cualquier proyecto. A continuación se estudian algunas de las más relevantes para este trabajo. 3.4.1. WoL Wake on Lan (WoL) es una tecnologı́a que permite arrancar o despertar ordenadores de una misma red de forma remota. La máquina ((despertador)) envı́a un mensaje especial a la Local Area Network (LAN), destinado a la dirección Medium Access Control (MAC) de la máquina que se pretende despertar. De hecho, el mensaje consiste en 6 Bytes de ((unos)) seguidos de la dirección MAC destino repetida 16 veces. Si la BIOS y la tarjeta de red del nodo destino lo soportan, el ordenador destino iniciará el arranque. 3.4.2. PXE La utilidad Preboot eXecution Environment (PXE) [Int99] brinda la oportunidad de poder arrancar un ordenador por red, independientemente de los medios de almacenamiento disponibles o de los sistemas operativos instalados en él. Un ordenador configurado para arrancar con PXE enviará una petición de arranque por red antes de intentar arrancar desde su disco duro (en caso de tenerlo). Esta petición no es más que un paquete DHCP especial, que será recibido por el servidor de DHCP. El servidor, que también es un servidor PXE, le envı́a por la red los ficheros necesarios para el arranque. Para ello, el servidor debe tener también un servidor de ficheros instalado y configurado, como por ejemplo, TFTP. El sistema operativo que se ejecuta en el cliente se encuentra almacenado en un directorio que se exporta por Network File System (NFS). Cuando el cliente necesita ejecutar algo, accede a los ficheros a través de la red (ver figura 3.2). 16 CAPÍTULO 3. ESTADO DEL ARTE Figura 3.2: Esquema de funcionamiento de PXE 3.4.3. FTP El protocolo FTP, descrito originalmente en la RFC 114 [Bhu71] en 1971, es uno de los primeros protocolos creados para redes informáticas. Define el mecanismo para copiar ficheros de un host a otro, utilizando una conexión TCP/IP. Posee conexiones separadas para control y datos, y permite autenticación por contraseña. La intención de este protocolo era proporcionar un mecanismo para que los usuarios pudieran acceder a los ficheros de un host remoto sin necesidad de tener que iniciar una sesión o saber cómo usar el sistema remoto; lo que el autor denomina ((hacer uso indirecto de la computadora)). Se consigue por tanto que los usuarios tengan una forma estandarizada de acceder a los recursos de otros equipos, abstrayendo los detalles del sistema operativo, forma de almacenamiento... El protocolo FTP permite la transferencia de cualquier tipo de fichero, desde archivos de texto ASCII hasta imágenes del núcleo, e incluso ofrece una petición para ejecutar comandos en el host remoto. 3.4. UTILIDADES Y HERRAMIENTAS DE BASE 17 La especificación original definı́a las siguientes peticiones: Identify Identifica al usuario en la máquina remota. Retrieve Descarga un fichero. Store Sube un fichero. Append Añade datos a un fichero. Delete Borra un fichero. Rename Renombra un fichero. addname Añade nombres a un fichero (ver sección 3.3). deletename Elimina nombres de un fichero. Lookup Recupera los atributos de un fichero. Open No transfiere datos, sino que abre el fichero especificado. Las peticiones siguientes se tratan sobre el fichero abierto hasta que llegue la petición de cierre. Close Cierra un fichero. Execute Ejecuta el fichero especificado, que debe ser un programa ejecutable. Posteriormente, se añadieron diversas funcionalidades, como el listado y la navegación de directorios. 3.4.4. TFTP La RFC 1350 [Sol92] define el protocolo TFTP, que es una versión más ligera y reducida de FTP, utilizada para transferir ficheros entre dos ordenadores de forma rápida y sencilla. Al contrario que FTP, TFTP trabaja sobre User Datagram Protocol (UDP), en lugar de Transmission Control Protocol (TCP), y sólo puede leer y escribir ficheros entre dos hosts; no permite manejar directorios ni autenticación. 18 3.4.5. CAPÍTULO 3. ESTADO DEL ARTE NFS NFS es un protocolo desarrollado por Sun Microsistems que permite incorporar (montar) un sistema de ficheros remoto al sistema de ficheros local a través de la red. Con él se puede acceder a los ficheros del sistema remoto de forma totalmente transparente, como si formara parte del sistema local. El protocolo fue diseñado para que fuera totalmente independiente de la arquitectura de la red, el sistema operativo y los protocolos de transporte. Para ello se utilizaron activamente las primitivas de Remote Procedure Call (RPC) y el estándar eXternal Data Representation (XDR), que define una forma común de representar un conjunto de datos a través de una red. [SBC+ 99] Los servidores NFS son servidores sin estado, de forma que cuando una petición falla, el cliente no necesita saber porqué, simplemente reintenta hasta que la petición tiene éxito, lo que simplifica el protocolo. 3.4.6. unionfs Con unionfs1 [WZ04] se pueden unir varios sistemas de ficheros distintos para hacer que formen uno sólo. También puede utilizarse para permitir realizar escrituras en ficheros de un medio de sólo-lectura: la rama de sólo lectura se combina con otra de lectura-escritura que reside en memoria, de forma que se pueden realizar cambios sobre los ficheros, aunque éstas no serán permanentes. El ejemplo más representativo de este uso son los LiveCD que permiten realizar cambios en el sistema de ficheros mientras está en uso, pero los cambios no son permanentes entre sesiones. 3.4.7. MAD Project El proyecto MAD2 reúne un conjunto de implementaciones de protocolos para transporte unidireccional multicast de información. Mediante la combinación de dichos protocolos se consigue control de congestión a través de la descripción de sesiones FLUTE. 1 2 http://www.filesystems.org/project-unionfs.html http://mad.cs.tut.fi/ 3.5. MIDDLEWARES DE COMUNICACIONES 19 Figura 3.3: Invocaciones remotas con semántica de invoación local, tı́picas de los middlewares de comunicaciones En particular, el protocolo File Delivery over Unidirectional Transport (FLUTE) es aplicable a la distribución de ficheros grandes y pequeños a muchos hosts, usando sesiones de distribución de varios segundos o más. Por ejemplo, FLUTE podrı́a emplearse para el despliegue de grandes actualizaciones de software a varios hosts simultáneamente. [PLL+ 04] 3.5. Middlewares de Comunicaciones Un middleware de comunicaciones permite al programador abstraerse de las complejidades y heterogeneidades de las capas inferiores (red, lenguaje de implementación, localización, arquitectura hardware, sistema operativo, etc.), facilitando la programación de aplicaciones y sistemas distribuidos. 3.5.1. ZeroC Ice Internet Communications Engine (Ice) [HS09] es un middleware de comunicaciones orientado a objetos desarrollado por la empresa ZeroC bajo licencia GPL, y en la 20 CAPÍTULO 3. ESTADO DEL ARTE actualidad lo utilizan empresas como Skype, Hewlett-Packard (HP), Indra e incluso Boeing, en su proyecto Future Combat Systems.3 Entre los servicios que ofrece, se encuentran transparencia de localización, despliegue de ficheros (IcePatch2 ), clustering (IceGrid ), canales de eventos (IceStorm), persistencia (Freeze) y rutado software a nivel de aplicación (Glacier ). El funcionamiento de Ice se basa en una arquitectura cliente/servidor, en la que los clientes realizan invocaciones remotas a los servidores como si fueran invocaciones locales (figura 3.3). Las operaciones que los clientes pueden invocar sobre los servidores se describen en un fichero escrito en lenguaje Specification Language for Ice (Slice), que define un contrato de interfaz entre ambas partes. Existen en Ice utilidades para traducir la interfaz Slice a los lenguajes de programación más comunes; concretamente, la distribución estándar proporciona traductores a C++, C#, Python, Java y Ruby. El cliente instancia un objeto que implementa dicha interfaz y que actuará de proxy del objeto remoto (ver figura 3.4). La implementación del objeto remoto que procesa las peticiones se llama sirviente, y se comunica con el middleware a través de un adaptador de objetos. Un adaptador de objetos es el contenedor donde se alojan los objetos del servidor que se deben acceder desde el cliente. El adaptador se encarga de traducir las peticiones de los clientes a los métodos especı́ficos de los objetos. También es el responsable de crear los proxies que se le pasan a los clientes, ya que es quien tiene los datos sobre sus interioridades (tipos, identidades, detalles de transporte...) Para poder comunicarse con el exterior, el adaptador de objetos está asociado con uno o más endpoints. Si un adaptador de objetos está asociado con varios endpoints, los objetos que contiene podrán ser invocados de varias maneras. La representación textual de un endpoint tiene la siguiente forma: tcp -h 161.67.27.15 -p 4061 Esto significa que el sirviente está escuchando en la interfaz cuya dirección es 161.67.27.15, en el puerto 4061, y que utiliza el protocolo TCP para transmitir. 3 Fuente: http://www.zeroc.com/customers.html 3.5. MIDDLEWARES DE COMUNICACIONES 21 Figura 3.4: Estructura de Ice (ZeroC [HS09]) Como es posible que varios sirvientes estén utilizando el mismo endpoint, es necesario que cada uno posea una identidad única dentro del sistema distribuido. Esta identidad se le asigna (bien por el programador, bien automáticamente) cuando el sirviente se añade al adaptador de objetos. De esta forma, se puede localizar un objeto unı́vocamente mediante su identidad y su endpoint: MiObjeto -t : tcp -h 161.67.27.15 -p 4061 Esto es, precisamente, el proxy. La opción -t (twoway) significa que la comunicación es en ambos sentidos, se realiza una petición y se espera una respuesta. Si se hubiera indicado -o (oneway) significarı́a una invocación sin respuesta. 3.5.2. CORBA Common Object Request Broker Architecture (CORBA) es un estándar [OMG08] del Object Management Group (OMG) que define un conjunto de protocolos y mecanismos que conforman un modelo de comunicaciones para sistemas distribuidos. Es uno de los middleware más usados y extendidos. De hecho, Ice nació a partir de muchas de las ideas de CORBA 4 , por lo que la arquitectura general es muy parecida (ver figura 3.5). Dispone también de un lenguaje de especificación de interfaces (Interface Definition 4 Se puede ver una comparativa de ambos middlewares en http://www.zeroc.com/iceVsCorba.html 22 CAPÍTULO 3. ESTADO DEL ARTE Figura 3.5: Estructura de CORBA (OMG [OMG08]) Language (IDL)), ası́ como de estructuras para los proxies, esqueletos y adaptadores de objetos, similares a las de Ice. Al ser una definición de un estándar, no existe una implementación oficial como ocurre con Ice, si no que cada organismo puede realizar su propia implementación. 3.5.3. Java RMI Desarrollado por Sun Microsistems, Java Remote Method Invocation (RMI) es un middleware exclusivamente para aplicaciones Java. La interfaz entre el cliente y el servidor se especifica mediante el uso de clases abstractas (interface) de Java, que contienen los prototipos de los métodos que el servidor proporciona a los clientes. En primer lugar, el servidor hace públicos los objetos que serán accesibles remotamente. Después, los clientes deben localizar dichos objetos, para lo cual pueden o bien utilizar el RMI simple naming facility (el servidor debe haber registrado los objetos en el rmiregistry), o bien intercambiar referencias de objetos con el servidor. Una vez hecho esto, los clientes pueden invocar los métodos remotos de los objetos del servidor. 3.6. APLICACIONES DE CLONADO 23 Figura 3.6: Estructura de Java RMI (Sun Microsistems on-line Training) 3.6. Aplicaciones de Clonado Algunas herramientas se dedican al clonado de ficheros, particiones o discos completos, lo que puede ser útil para el proyecto. Se describen a continuación. 3.6.1. PartImage PartImage5 es una herramienta ideada para realizar copias de seguridad, aunque también se puede utilizar para realizar instalaciones de sistemas. Facilita la creación de imágenes de particiones, comprimiéndolas con gzip para ahorrar espacio. Tiene dos desventajas graves: las particiones deben ser exactamente del mismo tamaño que las que se guardaron, y las particiones se restauran en local (sin red), por lo que habrı́a que ir ordenador por ordenador haciendo la copia. Además, el sistema que se quiera copiar debe ser desmontado previamente. 3.6.2. Ghosting for Unix Ghosting for Unix (G4U)6 es otra herramienta de clonado de discos duros (o particiones solamente). Primero, es necesario descargar las 2 imágenes de disquete o la 5 6 http://www.partimage.org/ http://www.feyrer.de/g4u/ 24 CAPÍTULO 3. ESTADO DEL ARTE imagen ISO en CD del programa, y con ella, hacer una imagen del disco duro a clonar y subirla a un servidor FTP. Después, en el ordenador destino, se arranca con el CD o el disquete y se clona desde el servidor FTP. La imagen que se crea es binaria, es decir, el disco o partición se copia bit a bit, obviando la información del sistema de ficheros o las particiones. Esto hace que sea muy probable perder información si los discos duros del servidor y el cliente no son del mismo tamaño. Esto, junto con el hecho de tener que arrancar cada ordenador manualmente es inaceptable, sobre todo cuando se tiene un número elevado de ordenadores que gestionar. 3.6.3. NTFS Clone Se trata de una herramienta7 que trabaja a nivel de sectores del disco duro, para clonar un sistema de ficheros de tipo NTFS de Windows y almacenarlo en un fichero, una imagen o enviarlo a la salida estándar. Es muy útil para hacer copias de seguridad, y puede emplearse para duplicar la información de un disco duro a varios. Sin embargo, sólo permite duplicar sistemas de ficheros NTFS, por lo que su utilidad es limitada. 3.6.4. Clonezilla Clonezilla8 es otra herramienta de clonado de particiones (o discos enteros). Puede trabajar con diferentes sistemas de ficheros, lo que permite usarlo con varios sistemas operativos. Está basado en Diskless Remote Boot in Linux (DRBL), Partition Image, NTFS Clone y UDPCast; por lo que sus ventajas e inconvenientes son los que ya se han comentado en esas herramientas. 7 8 http://www.linux-ntfs.org/doku.php?id=ntfsclone http://www.clonezilla.org/ 25 3.7. DISTRIBUCIÓN DE SOFTWARE Herramienta Multicast Part Image Clonezilla Multiplataforma Particiones Ghosting for Unix NTFS Clone Unidad SO N/A Particiones Particiones Tabla 3.2: Comparativa de herramientas de clonado 3.7. Distribución de Software Hay también herramientas especializadas en la distribución masiva de grandes cantidades de software, que se describen en esta sección. 3.7.1. UDPCast Se trata de una herramienta de transferencia de ficheros basada en el protocolo UDP para enviar datos simultáneamente a varios destinos a la vez mediante multicast.9 Para poder instalar un sistema operativo en varias máquinas al mismo tiempo mediante UDPCast es necesario que todas tengan la misma configuración hardware: mismo procesador, mismos periféricos e, incluso, la misma configuración de disco duro (particiones, sectores, clusters. . . ). Un ordenador se elige como servidor y se configura para que distribuya la imagen (sólo permite una). El resto se arranca (mediante disquete, CD o red) como ((receptores)) y cuando todos están listos, comienza la transmisión. 3.7.2. ZeroInstall ZeroInstall10 es un sistema desarrollado por Thomas Leonard. Con él pretende complementar los sistemas de instalación tradicionales de las distribuciones GNU/Linux, 9 10 http://udpcast.linux.lu/ http://0install.net/ 26 CAPÍTULO 3. ESTADO DEL ARTE en las que, como medida de seguridad, únicamente el administrador puede instalar programas. Los principales objetivos y caracterı́sticas de ZeroInstall son: Todos los usuarios pueden instalar programas En la mayorı́a de las distribuciones, es necesario recurrir al administrador del sistema para instalar cualquier programa. ZeroInstall pretende dotar a todos los usuarios del sistema de la posibilidad de instalar el software que necesiten. No importa dónde se encuentre el software para instalarlo Normalmente, las distribuciones de GNU/Linux tienen unos servidores llamados repositorios o mirrors en los que se encuentran las aplicaciones disponibles. Es posible que una aplicación exista pero no esté disponible en dichos repositorios. Con ZeroInstall esto no es problema, ya que utiliza la versión publicada en la página del desarrollador, sin necesidad que la distribución la empaquete en su formato particular. No importa si el software está ya instalado Tradicionalmente, primero se instala la aplicación y luego se ejecuta. ZeroInstall directamente la lanza, manejando la descarga y el almacenamiento temporal (caché) automáticamente. Puede elegirse si borrar o conservar lo que se haya descargado para futuras ejecuciones sin necesidad de volver a descargarlo. Cuando un usuario quiere ejecutar una aplicación, debe especificar una Universal Resource Locator (URL), en la que se encuentra el programa. Previamente, el programa debe haber sido adaptado para poder ser ejecutado en estas circunstancias. Dicha adaptación se basa principalmente en crear un paquete que contenga todo los recursos del programa, de forma que las rutas sean siempre auto-contenidos en el paquete. 3.7.3. Fully Automated Installation Este proyecto, iniciado por Thomas Lange en la Universidad de Colonia11 en 1999 como proyecto personal, sirve para instalar una imagen de GNU/Linux en varios ordenadores de forma automática. 11 http://www.informatik.uni-koeln.de/fai/ 3.7. DISTRIBUCIÓN DE SOFTWARE 27 Soporta varias configuraciones y la imagen a instalar puede ser de prácticamente cualquier distribución. Permite no sólo instalar un sistema GNU desde cero, sino que además es posible actualizar el sistema sin necesidad de reinstalar.[GLR99] Su funcionamiento se realiza en 3 pasos: primero, se arranca el cliente por PXE; después, se monta por NFS una imagen mı́nima de un sistema GNU/Linux sin hacer uso de los discos locales; y por último, se realiza la instalación. Sin embargo, no es posible tener varios sistemas operativos disponibles, sólo instala uno. Tampoco permite elegir qué sistema instalar, si no que sólo se puede instalar el que se haya configurado en el servidor. Aún ası́, se eligió para formar parte del proyecto de la ciudad de Munich para migrar los cerca de 14000 ordenadores de sus empleados públicos a software libre. [LIM] 3.7.4. System Imager Este sistema12 es similar al anterior en cuanto a objetivos se refiere, aunque trabaja de forma distinta. En lugar de arrancar un kernel por NFS, arranca un Linux empotrado propio (Brian’s Own Embedded Linux (BOEL)). Se trata de un kernel mı́nimo, que contiene sólo lo necesario para poder lanzar alguno de los clientes que utiliza para la distribución: BitTorrent, Flamethrower o Secure SHell (SSH). Estos clientes se ocupan de descargar del servidor el resto de binarios del BOEL y los ficheros de la imagen que se va a instalar. [Fin00] La imagen a instalar se obtiene desde un ((Golden Client)), que es una máquina funcional, que se configura como se quiere que queden las demás. No se pueden instalar varias imágenes en cada ordenador, ni permite una planificación horaria del sistema. 3.7.5. DRBL DRBL permite arrancar un ordenador vacı́o por red, mediante PXE y NFS. El ordenador servidor contiene una imagen de un SO que le transfiere a los clientes por red, que lo montan con NFS. 12 http://wiki.systemimager.org/index.php/Main Page 28 CAPÍTULO 3. ESTADO DEL ARTE Cuenta con un servidor en el que se configura la imagen que arrancarán los clientes. Para mejorar la eficiencia, recomiendan configurar el servidor con varias tarjetas de red y desactivar SELinux. No permite la instalación de sistemas operativos, sino que los clientes arrancan el SO desde el servidor. En realidad, todos los ficheros se encuentran en el servidor, exportados mediante NFS. Los clientes se conectan al servidor y descargan los ficheros a medida que los van necesitando. Mientras que el servidor puede ser cualquier ordenador, pues sólo se encarga de servir ficheros y autenticar usuarios, los clientes deben tener la potencia de cálculo suficiente para ejecutar los programas. 3.7.6. LTSP Linux Terminal Server Project (LTSP)13 es un concepto parecido al de DRBL. Se trata de un proyecto orientado a rehabilitar los ordenadores antiguos y con pocas prestaciones que ya no se utilizan, convirtiéndolos en terminales ligeros que se conectan a un servidor para ejecutar sus aplicaciones. El servidor recibe las entradas de los terminales y ejecuta las tareas, enviándoles los resultados. Se está implantando con bastante éxito en escuelas e institutos de EEUU como forma de ahorrar costes. 3.7.7. SLIM El proyecto Single Linux Image Management (SLIM) [LWH+ 04] se desarrolla en el Departamento de Informática de la Universidad de Tokio14 . Es el mismo concepto de terminal ligero que utiliza LTSP, aunque SLIM permite a los usuarios de los terminales elegir qué sistema operativo desean arrancar. 13 14 http://www.ltsp.org http://slim.cs.hku.hk/ 3.8. HERRAMIENTAS PARA DESPLIEGUE 3.7.8. 29 Userful Multiplier Es una aplicación que permite compartir el escritorio de un ordenador con hasta 10 ordenadores más, a través de las tarjetas de vı́deo y aprovechando el tiempo de CPU desaprovechado al haber un sólo usuario en la máquina.15 Es necesario ampliar el hardware del ordenador servidor con tarjetas de vı́deo, teclados, ratones y todos los periféricos que se quieran usar. Es decir, permite tener un ordenador con 10 monitores, teclados y ratones. 3.7.9. rootz Según sus propios creadores16 : ((rootz es un sistema de reparto de software basado en chroot. En otras palabras, es una herramienta que te ayuda a ejecutar aplicaciones sin descargarlas e instalarlas; simplemente, ejecutarlas)). El cliente se conecta a un servidor, donde localiza una distribución live y la monta en el sistema de ficheros local vı́a HTTPFS, pudiendo acceder entonces mediante chroot a todos sus recursos. 3.8. 3.8.1. Herramientas para despliegue Virtual Appliances En [SHWW08] se describe un modelo para simplificar el despliegue de servicios mediante Virtual Appliances. Estas appliances están respaldadas por máquinas virtuales, y sólo se centran en el despliegue de aplicaciones, sin considerar la distribución de SSOO. Por ello, no se tienen en cuenta aspectos como la preparación y configuración 15 16 http://www2.userful.com/products/userful-multiplier http://vamosproject.org/rootz 30 CAPÍTULO 3. ESTADO DEL ARTE Figura 3.7: Tipos de IU ([DGV04]) de los nodos (particiones, sistema de ficheros, plataforma hardware, etc.), necesidades especı́ficas de cada SO para el arranque, etc. Cada appliance consiste en una máquina virtual en la que se instala el software especı́fico que se quiere distribuir. Proporcionan mecanismos para configurarlas a través de unos agentes. Estos agentes pueden interactuar entre sı́ para resolver dependencias y configurar piezas de software de dos appliances distintas (por ejemplo, con Apache en una appliance y MySQL en otra; Apache necesita la funcionalidad de MySQL). 3.8.2. MetaOS Una solución propuesta por Zhang y Zhou[ZZ07] describe un escenario en el que los programas están almacenados en un servidor central, y los usuarios los ejecutan bajo demanda desde otros equipos, desligando ası́ el almacenamiento del programa de su ejecución. La administración se vuelve más sencilla, ya que los programas se encuentran ubicados en un sólo equipo. 3.8.3. Installable Units Draper et al. [DGV04] definieron un esquema XML para describir unidades de instalación Installable Units (IU), con la intención de crear un estándar común para que dichas unidades de instalación pudieran ser manejadas por cualquier tecnologı́a de instalación. Su trabajo estaba orientado a paquetes, aplicaciones, plug-ins, etc., sin dar un soporte especı́fico a la instalación de SSOO. 3.8. HERRAMIENTAS PARA DESPLIEGUE 31 Las IU se dividen en varios tipos (figura 3.7): Smallest Installation Unit (SIU) Son las unidades más pequeñas. Consisten en el software a instalar y una serie de metadatos relevantes para la instalación. Container Insallable Unit (CIU) Contienen varias SIU y CIU. Se distribuyen a cada instancia de un destino concreto. Solution Module (SM) Un SM incluye IUs que pueden asociarse cada una a una topologı́a distinta. rootIU Es la IU de más alto nivel dentro del IU Deployment Descriptor (IUDD). El IUDD más simple sólo contiene un SIU dentro del rootIU. Además de estos tipos, también se describen mecanismos para hacer referencia a IUs que están en otro descriptor, o crear un descriptor ((mayor)) como agregado de varios root IUs. También se pueden describir algunos tipos más de relaciones y establece un mecanismo de comprobaciones (de versión, propiedades, etc.) 3.8.4. Kadeploy Kadeploy [GLV+ 06] es un sistema pensado para gestionar la configuración de un grid o cluster de computadores. Los nodos tienen siempre un sistema instalado (al que denominan entorno de referencia), y varias particiones en el disco duro previamente establecidas. Un entorno consiste en un archivador tar que contiene la imagen del sistema operativo y los programas que el usuario desea utilizar. Cuando un usuario quiere usar el grid con un entorno especı́fico, indica en qué partición debe alojarse (esta decisión recae sobre el usuario) y Kadeploy realiza el despliegue y reinicia los nodos, que arrancarán esa partición. Una vez que termine de usar los equipos, éstos se vuelven a reiniciar, esta vez para arrancar el entorno de referencia. Dado que los usuarios deben conocer qué particiones hay y cuáles están disponibles, y Kadeploy no proporciona ninguna solución para automatizar la gestión de esta información, en entornos complejos esto puede llegar a ser problemático. Tampoco provee mecanismos para asignar entornos a nodos concretos, por lo que el hardware de todos los nodos del grid deben ser iguales. 32 CAPÍTULO 3. ESTADO DEL ARTE SO (1) DRBL SO LTSP Apps. SLIM SO Userful Multiplier N/A rootz Apps. Kadeploy2 ue SO Tabla 3.3: Comparativa de Sistemas sat end ido System Imager De SO (1) ltip lat a FAI Mu Apps. re Zero Install Lib N/A nq UDP Cast Ar ra Sistema Un ida d Re mo for ma to Figura 3.8: Funcionamiento de Kadeploy2 N/A N/A N/A 3.9. GESTIÓN DE RED 3.9. 33 Gestión de Red La gestión de red es un proceso necesario para asegurar la correcta operación de un sistema. Esta gestión debe ser transparente al usuario y estar integrada en el sistema. La naturaleza abierta de los sistemas distribuidos y las redes informáticas hace necesaria la existencia de arquitecturas de gestión estándares que faciliten su implementación. El sistema propuesto en este documento comparte algunos aspectos con los procesos de gestión de redes. Al ser un sistema complejo que manejará varias decenas de nodos, será necesario monitorizar el estado de cada uno, para saber qué está pasando en cada momento. Es crucial también comprobar que la información almacenada es correcta y completa, ası́ como asegurar la robustez del sistema y su recuperación ante posibles fallos. Hay tres arquitecturas principales en la gestión de redes: el modelo Open System Interconnection (OSI), el modelo Telecommunications Management Network (TMN) y el modelo Simple Network Management Protocol (SNMP) o internet. La arquitectura OSI divide la gestión de red en cinco áreas funcionales: Configuración Abarca la descripción del sistema (qué equipos hay, topologı́a de la red) y la configuración del mismo, manipulando los parámetros que controlan su funcionamiento. También se encarga de instalar nuevo software o retocar el existente y añadir nuevos dispositivos. Fallos Se encarga de detectar, aislar y eliminar los fallos que aparezcan. Para ello necesita de mecanismos para monitorizar la red y el sistema, para diagnosticar el fallo, para solucionarlo y para informar del mismo. Prestaciones Continua las tareas de la gestión de fallos, para garantizar la calidad de servicio en el futuro, comprobando los parámetros que miden la calidad del servicio Usuarios Se concentra en identificar, autenticar y monitorizar a los usuarios, para generar estadı́sticas de uso y asignar recursos a las cuentas. Seguridad Se trata de proteger los recursos (información, servicios, infraestructuras) de ataques externos o de un uso inadecuado. Para ello se definen polı́ticas de uso 34 CAPÍTULO 3. ESTADO DEL ARTE y acceso, se verifica la integridad de los datos, se monitoriza y notifica el estado del sistema y las violaciones de la polı́tica... El modelo TMN se basa en la arquitectura OSI adaptándolo al sector de las telecomunicaciones. La principal diferencia es que posee una red exclusiva dedicada a la gestión, aparte de la red gestionada. El modelo SNMP utiliza una arquitectura gestor-agente junto con una base de datos (Management Information Base (MIB)) en la que se representa la información de los elementos gestionados. Se basa en dos conceptos fundamentales: el objeto utilizado para representar un recurso concreto debe ser igual en cualquier sistema (es una variable de la MIB); y debe usarse un esquema común de representación, conocido como Structure of Management Information (SMI). 3.10. Conclusiones Como se ha podido observar, existen numerosas herramientas que ofrecen funcionalidades de clonado de discos y distribución de aplicaciones. Sin embargo, no son adecuadas para los objetivos que se persiguen. Clonar discos supondrı́a tener el disco duro del ordenador principal configurado como se quiera que se configuren los ordenadores de los laboratorios, pero esto implicarı́a que todos tendrı́an que ser exactamente iguales (mismos componentes, mismos periféricos, mismas particiones). Sin embargo, lo normal es que, a medida que se va renovando el ((parque informático)) de cualquier organización, los ordenadores cuenten con distintos modelos de procesadores, de tarjetas gráficas y de red, distintos discos duros, etc. Otra caracterı́stica común es que la mayorı́a de ellas hacen copias enteras: si sólo se pretende instalar una nueva aplicación habrı́a que volver a clonar todo el disco duro, lo cual no es óptimo. Las herramientas de despliegue de aplicaciones no son suficientes para copiar un sistema operativo completo, con toda su configuración; y por otro lado, las aplicaciones de grids se centran en la configuración y la gestión del conjunto de ordenadores, y en la mayorı́a de los casos son soluciones creadas a medida para el grid en el que se utilizan. 3.10. CONCLUSIONES 35 Tampoco hay una aplicación que permita planificar el uso que se pretende hacer de los nodos y los SSOO. 4 Método de Trabajo y Herramientas En este capı́tulo... Contenidos 4.1. Método de Trabajo . . . . . . . . . . . . . . 37 4.2. Herramientas . . . . . . . . . . . . . . . . . . 39 eguidamente, se explicará el método de trabajo que ha guiado la elaboración del proyecto, ası́ como una lista de las herramientas utilizadas y una breve descripción de cada una. S 4.1. Método de Trabajo El sistema fue concebido desde un principio para ser construido como un sistema distribuido, lo que permitı́a la creación de componentes independientes que funcionarı́an por separado, aunque no tendrı́an utilidad práctica individualmente. 38 CAPÍTULO 4. MÉTODO DE TRABAJO Y HERRAMIENTAS Figura 4.1: Desarrollo Incremental Los requisitos del sistema estaban claros desde el inicio, por lo que se pudo diseñar la arquitectura del sistema casi completamente desde las primeras etapas del proyecto. Dado que se pretende construir un sistema cómodo para el usuario, la interacción con el mismo era de suma importancia para obtener realimentación sobre el correcto desarrollo del proyecto. Estas razones nos llevaron a elegir una metodologı́a de prototipado incremental, ya que nos permitı́a tener prototipos funcionales de los distintos componentes desde las primeras fases para, una vez acabados, ir ensamblándolos y para montar el sistema final. Además, la funcionalidad del núcleo principal puede conseguirse en una fase temprana del desarrollo. En esta metodologı́a, se identifican a grandes rasgos los servicios que ofrecerá el sistema. Después, se definen incrementos, cada uno de los cuales proporcionará una porción de la funcionalidad del sistema. Una vez identificados los incrementos, los requisitos del primero de ellos se describen más detalladamente, y se desarrolla. Después, se integra con el sistema y el cliente puede empezar a usarlo. Es entonces cuando se empiezan a concretar los requisitos del siguiente incremento. Este proceso tiene varias ventajas: [Som04] Los clientes no tienen que esperar a que el sistema esté completo para poder empezar a utilizarlo. Los incrementos iniciales pueden usarse como prototipo, y obtener experiencia para la hora de definir los requisitos de los incrementos posteriores. Existe bajo riesgo de fallo total del proyecto, aunque se pueden encontrar problemas en algunos incrementos. 4.2. HERRAMIENTAS 39 Los incrementos más importantes se entregan al principio, por lo que son, inevitablemente, los que se someten a más pruebas. 4.2. 4.2.1. Herramientas Lenguajes de Programación Python - Lenguaje de programación interpretado, multiparadigma y orientado a objetos, creado por Guido van Roosum. Se escogió por su flexibilidad y la facilidad que ofrece para crear prototipos rápidamente. C++ - Lenguaje compilado y orientado a objetos, creado por Bjarne Stroustrup. Se utilizó para las tareas que necesitaban ser ejecutadas con mayor eficiencia, bien por restricciones de tiempo o de recursos. bash - Uno de los múltiples intérpretes de comandos de los sistemas UNIX. Se crearon algunos scripts bash para automatizar tareas en los nodos y en la preparación de imágenes. 4.2.2. Desarrollo ZeroC Ice - Internet Communications Engine (Ice) [HS09] es un middleware de comunicaciones orientado a objetos, de propósito general y que permite construir aplicaciones distribuidas con poco esfuerzo, desarrollada por la empresa ZeroC.1 De los servicios ofrecidos por Ice, se han utilizado en especial: IceGrid IcePatch2 IceBox libparted - GNU Parted es un paquete industrial para crear, destruir, redimensionar, comprobar y copiar particiones y los sistemas de ficheros que contienen. Mediante esta librerı́a se pudo obtener la información sobre los discos duros. [FSFb] 1 http://www.zeroc.com/ice.html 40 CAPÍTULO 4. MÉTODO DE TRABAJO Y HERRAMIENTAS pyunit - Librerı́a estándar de facto para pruebas unitarias (UNIT) en Python. Equivalente a JUnit para Java. [PYU] atheist - Framework para pruebas automáticas desarrollado en el grupo Arco. Debian - Distribución del sistema operativo GNU/Linux. GNU Make - Herramienta que controla la generación de ejecutables y otro código no-fuente a partir de los ficheros de código fuente de un programa. [SMS04] GCC - Compilador libre para C/C++ [Sta03] Subversion - Sistema de control de versiones (repositorio). GNU Emacs - Editor de textos extensible y personalizable [Sta07]. Utilizado para el desarrollo y la documentación. 4.2.3. Aplicaciones PXE - Herramienta para arranque por red sin utilizar el disco duro. [Int99] dnsmasq - Servidor DHCP y relay de DNS. [Kel] ebtables - Puente ethernet y administrador de tablas de tramas. Su función es configurar, mantener y configurar las tablas de reglas para las tramas ethernet en el kernel Linux. [SFB] VirtualBox - Completo virtualizador de propósito general para hardware x86 [Sun]. GRUB - Gestor de arranque que permite elegir qué sistema operativo arrancar de entre los que están instalados en el ordenador. [FSFa] 4.2.4. Documentación Inkscape - Programa para la creación de gráficos vectoriales. Dia - Herramienta para la creación de diagramas UML. 4.2. HERRAMIENTAS 41 LATEX - Sistema de maquetado de textos orientado a la producción de documentos técnicos y cientı́ficos. Es el estándar de facto para la comunicación y publicación en la comunidad cientı́fica. 5 Desarrollo En este capı́tulo... Contenidos 5.1. Especificación de Requisitos . . . . . . . . . 44 5.2. Casos de Uso . . . . . . . . . . . . . . . . . . 46 5.3. Diseño . . . . . . . . . . . . . . . . . . . . . . 50 5.4. Entorno de Desarrollo y Pruebas . . . . . . 51 5.5. Incrementos . . . . . . . . . . . . . . . . . . . 62 5.6. Bridge ethernet y servidor DHCP/PXE . . 75 5.7. Tamaño del proyecto . . . . . . . . . . . . . 76 ste capı́tulo describe el proceso de desarrollo del proyecto, desde la especificación de requisitos al diseño de los distintos componentes. Se detalla también el entorno en el que se ha desarrollado el proyecto, ası́ como el plan de pruebas y algunos detalles de implementación que tuvieron que añadirse por cuestiones arquitecturales. E 44 CAPÍTULO 5. DESARROLLO 5.1. Especificación de Requisitos Partiendo del análisis realizado a los objetivos del proyecto, descritos en el capı́tulo 2, se definieron los siguientes requisitos funcionales: Elegir SO En los ordenadores deben quedar instalados varios sistemas operativos. Se debe poder elegir cuál de ellos se desea arrancar. Uso de los SSOO Una vez elegido el sistema operativo, éste deberá ejecutarse de forma nativa, y ser completamente funcional. Instalar aplicación Debe ser posible instalar nuevas aplicaciones en los SSOO añadidos al sistema. Cuando se pretenda instalar una aplicación nueva para ser usada en las aulas, ésta se instalará en la imagen existente en el servidor principal. Posteriormente será necesario actualizar los hosts que vayan a utilizarla. Actualizar SO Realizar cambios sustanciales en el sistema operativo. De la misma forma que se instala una nueva aplicación, debe ser posible poner al dı́a el sistema operativo con actualizaciones de seguridad, parches, nuevas versiones del kernel, etc. Restaurar PC Si la configuración o los datos de algún PC se corrompen, es necesario llevarlo de nuevo a un estado inicial conocido. La restauración consistirá básicamente en volver a instalar la imagen que se ha estropeado. Instalación de SSOO Instalar sistemas operativos en los ordenadores. HYDRA instalará los sistemas operativos que se descargue del servidor central. Primero deberá crear las particiones necesarias. Se prevé un conflicto relativo a la configuración del SO: diferentes configuraciones para diferente hardware. drivers de la tarjeta gráfica. Discos Duros IDE/SATA (hda/sda). Nombres de host: cada ordenador debe tener su propio nombre de host, creado de forma automática y sin que se repita en la red. Además, es deseable que dicho nombre sea el mismo independientemente de la imagen que se haya arrancado. 5.1. ESPECIFICACIÓN DE REQUISITOS 45 Despliegues Especificación de qué imágenes tendrá cada nodo. Los usuarios deben poder elegir: en qué nodos quieren instalar cada imagen (ya que no todas las imágenes son necesarias en todos los nodos) qué dı́as de la semana debe instalarse (no es necesario que cada imagen esté disponible todos los dı́as) Se construirá un horario con las imágenes que hacen falta en cada nodo cada dı́a. El sistema será capaz de interpretarlo y aprovechar los periodos de inactividad para instalar las imágenes correspondientes. Recabar información Obtener información sobre los ordenadores de forma remota. Debe ser posible recabar información sobre el hardware de los nodos, para poder tomar decisiones sobre qué controladores o software especı́fico necesitan. Particionar HDD Particionar el disco duro para alojar los distintos sistemas operativos. El sistema debe particionar de forma adecuada el disco duro de la máquina, para poder instalar los sistemas operativos necesarios. Con estos requisitos podemos describir a grandes rasgos la manera en que funcionará el sistema: un usuario crea una imagen del sistema operativo que quiere instalar en los nodos, la sube al servidor de HYDRA y la añade al sistema (copiar los ficheros al servidor e indicar al sistema la existencia de una nueva imagen son conceptos y procesos distintos). El usuario indica también en qué ordenadores y qué dı́as de la semana quiere que esté disponible. El sistema debe tener alguna forma de iniciar la instalación periódicamente, momento en el que calcula qué imágenes deben ser copiadas en cada nodo; después se inicia la instalación. Los nodos que deban modificarse son despertados mediante WoL y se les transmiten los ficheros. Una vez terminada la instalación, se apagan, quedando listos para su uso normal. Cuando un usuario inicie un nodo, se le presentará un menú para que escoja qué SO desea utilizar. En este momento se identificaron también algunos conceptos que se van a utilizar para el desarrollo del proyecto. Estos conceptos son: 46 CAPÍTULO 5. DESARROLLO Imágenes Una imagen es un contenedor que alberga un sistema operativo completo en su interior. Actualmente, las imágenes de HYDRA pueden ser ficheros de VirtualBox (extensión .vdi) creados de forma estática (ver sección A.1 en la página 104) o bien un directorio que contiene los ficheros del SO. Despliegue Un despliegue es un conjunto de datos que representa la configuración que especifica un usuario. Cada despliegue indica: qué imágenes instalar en qué nodos instalarlas cuándo deben estar disponibles Restricciones Las restricciones permiten a los usuarios filtrar de manera automática los nodos en los que instalar las imágenes. Por ejemplo, un usuario podrı́a desear instalar una imagen sólo en aquellos nodos cuya memoria RAM sea mayor de cierta cantidad. Para ello, deben indicar 3 parámetros: Propiedad La propiedad que desean utilizar como criterio. Operador El operador de comparación (<, >, =) Valor El valor de referencia para la comparación (cantidad de memoria, nombre del fabricante, etc.) En cuanto a los usuarios, pueden desempeñar dos roles: el de Gestor, que serán los usuarios habituales del sistema; y el de Administrador. Los administradores no utilizan el sistema como tal, si no que se encargan de instalarlo y realizar algunas tareas de mantenimiento cuando sea necesario. 5.2. Casos de Uso El análisis de estos requisitos, nos llevó a identificar los casos de uso del sistema que se pueden ver en la figura 5.1, y que se describen a continuación: Añadir imagen Un usuario añade una imagen al sistema. La imagen ha sido copiada previamente a un directorio conocido del servidor central y el usuario indica al 47 5.2. CASOS DE USO Figura 5.1: Diagrama de Casos de Uso 48 CAPÍTULO 5. DESARROLLO sistema dónde se encuentra, con qué nombre quiere identificarla y el tipo de sistema de ficheros que contiene. Posteriormente, el sistema realizará las acciones necesarias para preparar la imagen para su despliegue e instalación en los nodos. Listar imágenes Un usuario desea obtener una lista con las imágenes que hay actualmente en el sistema, junto con las caracterı́sticas de cada una. Actualizar imagen Un usuario necesita reemplazar una imagen existente en el sistema con otra. Para ello le indica al sistema qué imagen necesita actualizar y el fichero que contiene la nueva imagen. Borrar imagen Se desea eliminar una imagen del sistema. Crear despliegue Cuando un usuario desea que una o más imágenes (que hayan sido previamente añadidas al sistema) sean instaladas en los nodos, deberá crear un despliegue en el que almacenar dicha información. Listar despliegues Un usuario quiere obtener una lista con los despliegues que hay en el sistema, y consultar sus caracterı́sticas. Modificar despliegue Se desea modificar la información de un despliegue para cambiar las imágenes que instala, o los nodos en los que las instala, o los dı́as que el despliegue es ejecutado. Borrar despliegue Se borra un despliegue del sistema. No implica el borrado de las imágenes asociadas. Crear grupo La única forma unı́voca de identificar a un nodo es mediante su dirección MAC. Dado que es un dato difı́cil de manejar por las personas, la creación de un grupo permite asignar un nombre a un conjunto de direcciones MAC, de forma que sea más fácil crear despliegues. Establecer delegado Permite especificar un Delegado para un nodo o un grupo de nodos. Los Delegados permiten jerarquizar el sistema para no saturar la red ni el Manager. Listar nodos El usuario pide una lista con los nodos registrados en el sistema. Restaurar nodo El funcionamiento de un nodo es defectuoso y es necesario volver a instalarlo, aunque el sistema lo considere como actualizado. 5.2. CASOS DE USO 49 Figura 5.2: Diagrama de Casos de Uso para el Delegado y el Manager Instalar Iniciar la instalación de los nodos. También existen una serie de casos de uso en la interacción del Delegado y el Manager con los nodos, como muestra la figura 5.2. Despertar El Delegado envı́a un mensaje al nodo para encenderlo, a través de WoL. Obtener información El Manager utiliza el servidor HostInfo (ver secciones 6.4 y 5.3) del nodo para recuperar la información sobre éste. Instalar El Manager le indica al nodo las imágenes que tiene que instalar y dónde puede encontrarlas (a qué Delegado pedı́rselas). Apagar Una vez concluida la instalación, el Manager indica al nodo que se apague. 50 5.3. CAPÍTULO 5. DESARROLLO Diseño Una vez analizados los requisitos del proyecto, se pasó a la fase de diseño, en la que se pasó a dar forma a la estructura básica del sistema y se definieron los distintos componentes y las interacciones entre ellos. En primer lugar es necesario definir la manera en que se va a interactuar con los nodos, ya que es necesario recabar información sobre su hardware y manipular su disco duro para instalar las imágenes. En un primer momento se pensó en crear una partición con un sistema mı́nimo, residente en cada nodo, que contuviera todas las herramientas necesarias. Esto representaba varios problemas, ya que a la hora de instalar habrı́a que tener en cuenta esta partición, para no borrarla; además, si algún usuario la arrancara (por error o premeditadamente), podrı́a tener consecuencias imprevistas. Por ello, se optó por un sistema de arranque remoto con PXE que no necesita disco duro, lo que permite además que el nodo quede completamente ((limpio)) después de la instalación. Una vez arrancado el nodo, hay que recoger información sobre él, poder particionar el disco duro, copiar ficheros, etc., para instalar los SSOO. Para ello se desarrollaron dos componentes independientes cuyas interioridades se explicarán en las secciones 6.4 HostInfo y 6.5 Installer. Estos componentes se implementaron como servicios Ice, de forma que pudieran ser invocados de forma remota e independiente. En un primer momento existió también un tercer componente, Partitioner, encargado de realizar tareas de creación de la tabla de particiones, crear las particiones propiamente dichas, y darles formato. Más tarde este componente fue empotrado en el Installer ya que el flujo de trabajo era siempre el mismo, de forma secuencial, y por tanto no tenı́a sentido contar con un componente aislado para estas tareas. HostInfo se mantuvo separado ya que podrı́a ser interesante poder usarlo fuera del proceso de instalación. Los Delegados aparecieron como una medida preventiva: si un gran número de nodos iban a descargarse varias imágenes desde el Manager, la red podrı́a saturarse, además de colapsar el Manager. Por eso se decidió crear el rol de Delegado, que serı́a un ordenador encargado de servir las imágenes a un subconjunto del total de nodos. Para poder controlar mejor el proceso, se optó por colocar también en el Delegado el servidor DHCP/PXE. 5.4. ENTORNO DE DESARROLLO Y PRUEBAS 51 Figura 5.3: Diagrama de Componentes 5.3.1. Base de Datos La base de datos almacena todo tipo de información sobre el sistema, desde la configuración hardware de cada nodo hasta la planificación de las instalaciones, pasando por los grupos de nodos, las imágenes y los despliegues. Para averiguar las tablas y campos que harı́an falta, primero se trazó un diagrama de Entidad/Relación (E/R) (figura 5.4) para tener una idea general de dónde se encuentra cada dato y cómo se relaciona con los demás. El resultado es una base de datos muy sencilla, como muestra la figura 5.5, en la que se obtiene una tabla por cada entidad, más algunas tablas adicionales para representar las relaciones entre ellas. En el fichero tables-def.sql se puede ver la definición en SQL de la base de datos completa. 5.4. Entorno de Desarrollo y Pruebas Para el desarrollo del proyecto era necesario poder simular de alguna manera el entorno en el que se pretende implantar el sistema, ya que no era posible utilizar un 52 CAPÍTULO 5. DESARROLLO Figura 5.4: Diagrama E/R 5.4. ENTORNO DE DESARROLLO Y PRUEBAS 53 Figura 5.5: Esquema de la BBDD conjunto amplio de ordenadores para las pruebas. Se utilizaron dos formas distintas para ello. La primera y principal consistió en montar una red privada con un switch, en la que se conectaron varios ordenadores. Uno de ellos cumplı́a el papel de servidor principal (HYDRA Manager), y se encargaba de proporcionar el arranque por PXE y servir las imágenes. Un segundo ordenador desempeñaba el rol de Delegado (ver secciones 5.6 y 6.3) mientras que el resto eran PCs que hacı́an las funciones de los nodos finales. La segunda manera de emulación consistı́a en utilizar máquinas virtuales, aunque su excesiva lentitud y enorme consumo de recursos hacı́an que se usaran sólo en contadas ocasiones. Todos los PCs, propiedad del grupo de investigación Arco, estaban equipados con un sistema operativo Debian GNU/Linux, a excepción de los “nodos”, que arrancaban la imagen especial de HYDRA (basada también en Debian). 54 CAPÍTULO 5. DESARROLLO Figura 5.6: Diagrama de Clases 5.4. ENTORNO DE DESARROLLO Y PRUEBAS 5.4.1. 55 Plan de Pruebas Durante el desarrollo del proyecto, se creó una baterı́a de pruebas automáticas, basadas en PyUnit [PYU] para las pruebas de caja blanca y en Atheist [VMA] para las de caja negra, encargadas de comprobar que el funcionamiento del código es el correcto. Gracias a estas pruebas, es fácil comprobar toda la funcionalidad del proyecto de una manera rápida, lo que permite detectar fallos en poco tiempo y con gran precisión. Además, el testeo periódico del proyecto permite saber si los cambios que se han realizado desde la última ejecución de las pruebas han cambiado el comportamiento de lo que ya habı́a, facilitando la tarea de integrar de nuevas funciones. A continuación se describe el plan de pruebas que se diseñó para el sistema. Añadir Imagen Precondiciones La imagen debe existir. Prueba La imagen se añade al sistema y queda a disposición de los clientes. Postcondiciones La imagen queda almacenada en el Manager y registrada en la BBDD. Tests Negativos Se especifica un fichero que no existe No se especifica un fichero de imagen No se indica nombre para la imagen No se indica el tipo de sistema de ficheros No se puede contactar con el Manager Añadir Despliegue Precondiciones Las imágenes del despliegue deben haber sido añadidas previamente al sistema. 56 CAPÍTULO 5. DESARROLLO Prueba Se añade un despliegue al sistema, con nodos, restricciones, imágenes y dı́as en los que debe instalarse. Postcondiciones Los nodos incluidos en él deben marcarse como ”sucios” El despliegue se ha añadido con los datos correctos. Tests Negativos No se indica nombre para el despliegue No se indica el calendario No se indican imágenes No se indican nodos Alguna MAC no es válida Algún dı́a no es válido Alguna imagen no existe No se puede contactar con el Manager Crear Grupo Precondiciones El grupo no existe Prueba Se agrupan varios nodos bajo un mismo nombre. Postcondiciones El grupo existe y todos los nodos especificados pertenecen a él. Tests Negativos No se indica nombre No se indican nodos No se puede contactar con el Manager Modificar Imagen Precondiciones La imagen antigua debe existir en el sistema. 5.4. ENTORNO DE DESARROLLO Y PRUEBAS 57 El fichero de la imagen nueva debe existir. Prueba Se actualiza una imagen con otra más reciente. Postcondiciones La imagen antigua contiene los ficheros de la imagen nueva. Tests Negativos No se puede contactar con el Manager Se indica un fichero que no existe La imagen antigua no existe No se indica imagen antigua No se indica imagen nueva Modificar Despliegue Precondiciones El despliegue debe existir en el sistema Prueba Cambiar algún parámetro de un despliegue; por ejemplo, ponerle una restricción más, o hacer que se instale en otros nodos. Postcondiciones El despliegue tiene los valores nuevos Tests Negativos No se puede contactar con el Manager Se especifica un despliegue que no existe No se indican imágenes No se indican nodos No se indica calendario Establecer Delegado Precondiciones Ninguna. Prueba Establecer un nodo como delegado de otros nodos. 58 CAPÍTULO 5. DESARROLLO Postcondiciones El Delegado aparece como tal. Tests Negativos No se indican nodos No se indica delegado No se puede contactar con el Manager Restaurar Nodo Precondiciones El nodo debe aparecer como actualizado. Prueba Marcar un nodo para forzar que se reinstale. Postcondiciones El nodo debe aparecer como sucio. Tests Negativos No se puede contactar con el Manager No se indica nodo Añadir Restricción Precondiciones Ninguna. Prueba Añadir una restricción al sistema. Postcondiciones La restricción queda registrada en el sistema. Tests Negativos No se puede contactar con el Manager Falta la propiedad Falta la operación Falta el valor 5.4. ENTORNO DE DESARROLLO Y PRUEBAS 59 Borrar Imagen Precondiciones La imagen debe existir en el sistema Prueba Una imagen se elimina del sistema. Postcondiciones La imagen no está en el sistema Los despliegues que la contenı́an ya no lo hacen Tests Negativos La imagen no existe No se puede contactar con el Manager No se indica la imagen Borrar Despliegue Precondiciones El despliegue debe existir en el sistema. Prueba Se elimina un despliegue del sistema. Postcondiciones El despliegue no está en el sistema Tests Negativos No se puede contactar con el Manager No se especifica despliegue El despliegue indicado no existe Realizar Instalación Precondiciones La imagen debe existir en el sistema. Prueba Instalar una imagen en un nodo. Postcondiciones Todos los ficheros de la imagen deben estar también en el nodo. 60 CAPÍTULO 5. DESARROLLO Obtener Información Precondiciones El nodo debe estar encendido y ejecutando un servidor HostInfo. Prueba Obtener información del nodo. Postcondiciones La información obtenida concuerda con la esperada. Obtener lista de nodos Precondiciones El Manager debe estar activo. Prueba Se pide al Manager la lista de los nodos. Postcondiciones La lista obtenida es la esperada. Montar una imagen Precondiciones El fichero de la imagen existe y no está ya montada. Prueba Se monta el fichero de imagen. Postcondiciones El fichero aparece en la lista de dispositivos montados del sistema operativo. Desmontar una imagen Precondiciones La imagen está montada. Prueba Se desmonta la imagen. Postcondiciones El fichero de la imagen no aparece en la lista de dispositivos montados del sistema operativo. 5.4. ENTORNO DE DESARROLLO Y PRUEBAS 61 Publicar una imagen Precondiciones La imagen no está publicada. Prueba Se publica la imagen. Postcondiciones En el Manager se ha creado un servidor IcePatch2 que sirve la imagen. Despublicar una imagen Precondiciones La imagen está publicada. Prueba Se despublica la imagen. Postcondiciones No existe ningún servidor IcePatch2 en el Manager que corresponda a la imagen. Borrar un nodo Precondiciones El nodo se encuentra registrado en el Manager. Prueba Se borra el nodo. Postcondiciones El nodo ya no se encuentra registrado en el Manager. Despertar nodo Precondiciones El Delegado está activo Prueba Se pide al Delegado que despierte un nodo Postcondiciones El Delegado ejecuta el comando wakeonlan correctamente. El nodo está activo y responde. 62 CAPÍTULO 5. DESARROLLO 5.5. Incrementos Tal como se explicó en la sección 4.1, el desarrollo del proyecto está dividido en incrementos, que se detallan a continuación. 5.5.1. Incremento 1: Información del Sistema Objetivos Obtener información de un ordenador Análisis Para poder actuar de forma remota sobre los ordenadores, eran necesarias algunas de herramientas que nos permitan realizar las acciones que deseemos. Se hace necesario poder obtener información de un PC en cuestión, por lo que habrá que desarrollar alguna herramienta que permita recabar datos sobre la configuración hardware del ordenador, el estado de los discos duros, etc. Implementación Para recabar información sobre los ordenadores se desarrolló la herramienta HostInfo. Dicha herramienta realiza un diagnóstico del ordenador en busca de la siguiente información: Procesador: Número de CPUs Velocidad de la CPU Arquitectura (Intel, Advanced Micro Devices (AMD), PowerPc...) Carga de trabajo 5.5. INCREMENTOS 63 Memoria: Memoria RAM total del sistema Memoria RAM libre (y por inferencia, memoria usada) Red: Dirección IP Dirección ethernet (MAC) Disco Duro: Número de discos duros Particiones de cada disco Sistema de ficheros de cada partición Tamaño total de cada partición Tarjeta Gráfica: Fabricante (marca) Modelo Cantidad de memoria Información del Nodo: Nombre de host Sistema Operativo Versión del núcleo (kernel ) HostInfo ofrece métodos para recabar estas informaciones por separado y se ejecuta como un servidor que queda a la espera que se produzcan dichas invocaciones. La interfaz del módulo HostInfo puede verse en el listado 5.1. Como puede apreciarse en el código, cada tipo de información puede solicitarse por separado, de forma que sólo se invocan las operaciones que hacen falta. Al ser un servicio que se incluirá en todos los nodos, también se añadieron con posterioridad las operaciones para apagar y reiniciar el nodo; se optó por añadirlas a este servidor por ser dos operaciones muy sencillas y considerar que no tenı́an entidad suficiente como para formar parte de un servidor propio. 64 CAPÍTULO 5. DESARROLLO #include <datatypes . ice> module HYDRA { interface HostInfo { MEMInfo getMEMInfo () ; CPUInfo getCPUInfo () ; GPUInfo getGPUInfo () ; HDDInfoSeq getHDDInfo () ; NICInfo getNETInfo () ; NodeInfo getNodeInfo () ; LoadInfo getLoadInfo () ; void shutdown () ; void reboot () ; }; }; Listado 5.1: Slice para HostInfo 5.5.2. Incremento 2: Particiones Objetivos Crear tabla de particiones Crear particiones Formatear particiones Análisis Para instalar sistemas operativos completos es necesario poder realizar particiones en los discos duros y dar formato a las mismas con el sistema de ficheros adecuado, para poder alojar los sistemas operativos. Implementación Para esta tarea, se desarrolló el Partitioner, que permite realizar particiones de forma remota en un ordenador. En realidad, se trata de un front-end de la herramienta 65 5.5. INCREMENTOS /∗ −∗− mode : C ++ −∗− ∗/ # ifndef # define PARTITIONER ICE PARTITIONER ICE #include <datatypes . ice> module HYDRA { interface Partitioner { int wr it eP ar ti ti on Li st ( PartitionSeq partList , string device ) ; int makePartition ( long start , long end , string filesystem , string device ) ; int c r e a t e P a r t i t i o n T a b l e (string device ) ; }; }; # endif Listado 5.2: Slice para Partitioner parted de GNU/Linux. Es decir, Partitioner recoge los datos de cómo se desea estructurar el disco (tipo de la tabla de particiones, formato y tamaño de cada partición. . . ) y utiliza el programa parted para realizar las operaciones. El listado 5.2 muestra las operaciones que ofrece la herramienta. 5.5.3. Incremento 3: Instalar imágenes Objetivos Copiar imágenes a particiones Instalar gestor de arranque Análisis Una vez que los discos están debidamente particionados y formateados hay que realizar la instalación propiamente dicha. Esto implica que hay que poner los medios necesarios para poder transmitir los ficheros hacia los ordenadores destino, y escribirlos en la partición que les corresponda. 66 CAPÍTULO 5. DESARROLLO #include <datatypes . ice> module HYDRA { interface Installer { int createDir (string path ) ; int install (string serverEndpoints , string partition , string imageName ) ; int installGrub (string directory , string device ) ; int restoreImage (string directory , string imageName ) ; int updateBootMenu (string mountPoint , string partition , stringSeq imagelist ) ; }; }; Listado 5.3: Slice para Installer Después, se debe proceder a la instalación de un gestor de arranque que permita elegir al inicio entre los distintos sistemas operativos instalados. Dicho gestor debe actualizarse cada vez que se instale un sistema nuevo o se elimine alguno existente. Implementación La instalación de las imágenes la lleva a cabo una tercera herramienta, Installer. Utilizando IcePatch como intermediario, el instalador obtiene del servidor (IcePatch2Server ) los ficheros de cada imagen, y los coloca en la partición correspondiente. Cada sistema operativo ha tenido que ser preparado previamente para su transmisión (ver sección 6.2.3). La herramienta Installer es la encargada de colocar los ficheros en sus particiones correspondientes, ası́ como de deshacer los cambios que se realizan en la preparación (sección 6.2.3). También se encarga de instalar y actualizar el gestor de arranque. La interfaz de Installer se muestra en el listado 5.3. 5.5. INCREMENTOS 5.5.4. 67 Incremento 4: Manager Objetivos Adición de imágenes Gestión de calendario Recuperación de nodos con fallos Análisis Una vez que se dispone de las herramientas básicas, se hace necesaria la implementación de una utilidad que permita el manejo de imágenes en el servidor, para poder añadirlas, indicar en qué ordenadores deben instalarse, etc. Debe ser posible indicar al sistema que un ordenador ha de ser reinstalado; es decir, forzar la reinstalación en un nodo aunque el sistema considere que está actualizado. Esto puede ser necesario en caso de que la integridad de los datos de un nodo se haya visto vulnerada (configuración corrupta, ficheros perdidos, etc.). Debe ser posible recuperar dicho ordenador de forma sencilla, mediante una simple reinstalación del software. También debe poder especificarse un calendario de utilización de los ordenadores. Cada usuario o administrador, al añadir su imagen, podrá indicar qué dı́as necesita que esté instalada en los ordenadores, y en cuáles de ellos. Implementación Para poder instalar un nodo automáticamente, se utilizó el arranque por PXE, de forma que el ordenador pudiera arrancar pero no utilizase el disco duro. De esta forma, no interferirı́a con el proceso de instalación. En el nodo maestro de la red (el Registry en la terminologı́a de Ice) se colocó la aplicación central del sistema HYDRA. Esta aplicación, llamada Manager, es la encargada 68 CAPÍTULO 5. DESARROLLO de recibir las peticiones de los usuarios (añadir/borrar imágenes, crear configuraciones, etc.) y coordina la instalación de las imágenes en los ordenadores. Cuando un equipo arranca por PXE, se le sirve un sistema operativo mı́nimo y especialmente configurado para HYDRA. Una vez que dicho sistema está en marcha, lanza un nodo de IceGrid que se registra en la red de HYDRA. Entre otras cosas, el Manager posee una serie de observadores1 que le notifican automáticamente cuando un nodo se pone en marcha. Gracias a ellos, se da cuenta de que hay un nuevo nodo en el sistema e inicia en él el proceso de instalación. En primer lugar, coloca una instancia de las herramientas básicas (HostInfo, Partitioner e Installer) en el nodo. A continuación, mediante invocaciones remotas a la herramienta adecuada, crea una serie de particiones en el disco duro para, acto seguido, copiar cada imagen en una partición. Una vez copiadas todas las imágenes, instala el gestor de arranque en el nodo. El último paso es evitar que el ordenador arranque por PXE. Si no se realizara este paso, cuando un usuario encendiera el ordenador para usarlo, éste arrancarı́a por PXE e iniciarı́a de nuevo el proceso de instalación. Por lo tanto, una vez terminada la instalación es necesario cambiar la configuración del servidor DHCP que sirve el arranque PXE para que no responda a las peticiones que procedan de la dirección hardware (MAC) del ordenador que acaba de ser instalado. Restaurar Ordenador Restaurar un ordenador es un proceso muy sencillo teniendo en cuenta que ya disponemos de arranque por PXE. Aunque el sistema operativo del ordenador se halla corrompido y no funcione correctamente, la imagen que se le sirve por PXE sı́ lo hará. Por lo tanto, para restaurar un ordenador sólo es necesario marcarlo como “sucio” para asegurar que en la próxima actualización el ordenador arrancará por PXE y se instalarán las imágenes de nuevo, aunque en la base de datos figure como actualizado. Adición de imágenes y Gestión de Calendario Una vez que el usuario ha creado una imagen, debe añadirla al sistema para que éste pueda distribuirla a los ordenadores. El usuario indicará al Manager el fichero que contiene la imagen y los dı́as de la semana que necesita que esté disponible. En ese 1 Patrón de diseño “Observer” [GHJV95] 69 5.5. INCREMENTOS <?xml version= ’ ’ 1.0 ’ ’?> <!DOCTYPE week SYSTEM ‘‘ hydra . dtd ’ ’> <week> <day> <dayname>Monday</ dayname> <image>AmpliacionSSOO . vdi</ image> <image>S i s t e m a s D i s t r i b u i d o s . vdi</ image> </ day> <day> <dayname>Tuesday</ dayname> <image>i n g e n i e r i a S W I . vdi</ image> <image>A C a t i . vdi</ image> <image>A C n v i d i a . vdi</ image> </ day> </ week> Listado 5.4: hydra.xml momento, el Manager montará la imagen y realizará el proceso de preparación descrito en la sección 6.2.3. Para que la información relativa a las imágenes y su horario no se pierda entre distintas ejecuciones del programa, se creará un fichero XML donde se almacenarán los ficheros que contienen imágenes y su horario asociado. El listado 5.4 muestra un ejemplo real del fichero XML. 5.5.5. Incremento 5: Delegados Objetivos Manager como servicio remoto Jerarquización de la instalación (Delegados) Análisis Una vez construido un prototipo completamente funcional, el siguiente paso consistió en convertir el Manager en un servicio remoto, para que los usuarios puedan 70 CAPÍTULO 5. DESARROLLO añadir las imágenes desde cualquier ordenador, sin necesidad de acceder fı́sicamente al ordenador principal. Tener algunas decenas de clientes descargando imágenes de sistemas operativos enteros desde un único servidor puede suponer un colapso en la red. Es posible evitar esta saturación añadiendo nodos que sirvan como Delegados del Manager. El Delegado sólo necesita almacenar algunas imágenes (no todas, como el Manager, y sólo las servirá a unos cuantos ordenadores. Implementación Implementar el Manager como un servicio remoto implica la construcción de dos programas: uno que actuará como servidor (el Manager propiamente dicho) y otro que será el cliente que invocará peticiones al servidor. El tipo de peticiones que podrán solicitar los clientes está descrito en la interfaz existente entre ambos (listado 5.5). El Manager incorpora un objeto en su interior, llamado HydraCore, que le proporciona funciones auxiliares para realizar operaciones básicas, tales como montar y desmontar una imagen, realizar el icepatch2calc de una imagen en un hilo aparte, crear o borrar un servidor... De esta forma, tenemos separadas las funcionalidades que se le ofrecen al cliente (capa de presentación) de los detalles de implementación (capa de dominio), consiguiendo un menor acoplamiento entre los componentes del sistema. 5.5.6. Incremento 6: Optimizaciones Objetivos Base de Datos Creación de la abstracción “despliegue” Uso de restricciones en los despliegues Creación de grupos de ordenadores Operaciones CRUD 71 5.5. INCREMENTOS # ifndef MANAGER ICE # define MANAGER ICE #include <hostinfo . ice> #include <datatypes . ice> module HYDRA { interface Query { DeploymentSeq listDeployments () ; Ice :: StringSeq listNodes (string order ) ; OSimageSeq listImages () ; DelegateSeq listDelegates () ; Ice :: StringSeq listConstraints () ; OSimage getImage (string imgname ) ; Deployment getDeployment (int depid ) ; HostDescription getHostInfo (string nodenane ) ; Ice :: StringSeq getGroup (string name ) ; void showConfig () ; }; interface Directory extends Query { int addDeployment ( Deployment dep ) throws ConflictException , ObjectNotExistException ; int addImage ( OSimage img ) throws Conf lictE xcepti on ; int addConstraint (string prop , string oper , string value ) ; void modifyDeployment (string oldname , Deployment dep )throws ObjectNotExistException ; void updateImage (string oldimage , string newimage ) throws ObjectNotExistException ; void deleteDeployment (string name ) throws ObjectNotExistException ; void deleteImage (string imgname ) throws ObjectNotExistException ; void deleteConstraint (int constID ) throws ObjectNotExistException ; void setDelegate (string delegate , string group , Ice :: StringSeq maclist ) ; void createNodeGroup (string name , Ice :: StringSeq maclist ) ; Ice :: StringSeq getDirtyNodes (string delegate ) ; Ice :: StringSeq g e t I m a g e s F o r D e l e g a t e (string delegatename ) ; int restoreNode (string macaddress ) ; void sta rtInst allati on () ; }; }; # endif Listado 5.5: Slice para Manager 72 CAPÍTULO 5. DESARROLLO Mejora de Installer Análisis Se decidió cambiar la forma de almacenar la configuración de las imágenes, nodos, despliegues, etc. en una base de datos en lugar de utilizar el formato XML. Una base de datos es más flexible, rápida y sencilla a la hora de almacenar, recuperar y buscar la información. Para simplificar un poco todo lo relacionado con la instalación, se define la abstracción despliegue, que representará la manera en que los usuarios describirán al sistema cómo quieren que se instalen las imágenes. También se añadirá la posibilidad de especificar ciertas restricciones en los despliegues, de forma que las imágenes de un despliegue sólo se instalarán en aquellos ordenadores que cumplan las restricciones (por ejemplo, que tengan una tarjeta gráfica de un determinado fabricante). Para simplificar al usuario la adición de despliegues, se podrán especificar grupos de ordenadores. Ası́, si un usuario va a utilizar siempre los mismos ordenadores, podrı́a agruparlos bajo un identificador y luego utilizar dicho identificador en lugar de listar todos los ordenadores cada vez. Como en cualquier herramienta de gestión, es necesario disponer de operaciones Create Retrieve/Read Update Delete (CRUD) sobre los distintos tipos de datos: imágenes, despliegues, restricciones, calendario y grupos. Se dará soporte a dichas operaciones. Por otra parte, se observó que el proceso de instalación en un nodo sigue siempre los mismos pasos, y no necesita coordinarse con el Manager para nada. Por lo tanto, no es necesario que el Manager esté constantemente invocando operaciones sobre los distintos HostInfo, Partitioner e Installer: basta con pasar al Installer la configuración que debe tener el nodo, y él sólo puede realizar todo el proceso. Como resultado de esto, el módulo Partitioner desapareció, y su funcionalidad fue integrada en Installer. El listado 5.3 muestra la interfaz de Installer, en la que se aprecia la nueva simplicidad. 5.5. INCREMENTOS 73 Implementación Despliegues No todas las imágenes deben instalarse en todos los nodos, ni van a ser usadas todos los dı́as. La información sobre estas situaciones viene expresada como un despliegue. Un despliegue es una entidad abstracta que contiene información sobre: qué imágenes deben instalarse en qué nodos deben instalarse (incluyendo restricciones) qué dı́as de la semana han de estar disponibles Base de Datos En este punto, se tomó la decisión de crear una base de datos en la que almacenar toda la información relativa al sistema (propiedades de los nodos, imágenes, calendario, etc.) en lugar de tenerla repartida en varios archivos. El fichero XML del calendario se eliminó, ası́ como el que guardaba la información sobre las imágenes. Para crear la base de datos, primero se estudiaron las relaciones entre los distintos componentes del sistema, para tener una visión general de los flujos de información. Estas relaciones se describen en la figura 5.4. De este diagrama se pueden inferir las tablas que tendrá la base de datos. El esquema final de la BD queda representado en la figura 5.5. La tabla node almacena información sobre los nodos y sus propiedades. Cuando un nodo se registra en la red de HYDRA, se obtienen sus propiedades con HostInfo y se almacenan aquı́. Como ı́ndice (clave primaria) de la tabla se ha utilizado la dirección MAC del nodo, por ser un valor único y además, vinculado al propio ordenador. La tabla image guarda las imágenes que se han añadido al sistema: su nombre, qué tipo de SO contienen y en qué fichero están. 74 CAPÍTULO 5. DESARROLLO La tabla constraint contiene las restricciones que se hayan definido en el sistema. Cada registro está formado por tres campos, que definen la restricción: el nombre de la propiedad, la operación que aplicarle y el valor de comparación. La tabla deployment guarda una lista de los despliegues añadidos al sistema. Al ser despliegue una entidad compuesta, la información de un despliegue completo no está recogida en esta tabla, sino en cuatro tablas más: La tabla imageset indica qué imágenes contiene cada despliegue. En la tabla nodeset se relaciona cada despliegue con el conjunto de nodos en los que debe instalarse. La tabla constraintset contiene las restricciones asociadas a cada despliegue. Por último, con la tabla calendar se indica qué dı́as de la semana debe estar el despliegue instalado. La tabla configuration es la tabla clave del sistema. Se genera automáticamente cada vez que se inicia un ciclo de actualizaciones, a partir de la información almacenada en las demás tablas. En ella se describe explı́citamente qué imagen debe instalarse en cada ordenador, una vez tenidos en cuenta el calendario y las restricciones. La tabla group indica los nodos que pertenecen a un grupo. La tabla delegate indica qué nodo actúa como delegado para otro nodo. Restricciones Las restricciones aportan gran flexibilidad a la hora de definir los despliegues. Por ejemplo, si hay dos modelos de tarjetas gráficas en los ordenadores de un mismo aula, cada uno de ellos necesita una imagen que contenga los drivers correspondientes. Si no se utilizara este mecanismo de restricciones, el usuario tendrı́a que saber exactamente qué ordenadores tienen un modelo y cuáles el otro. Con las restricciones, se puede hacer que esta distinción sea automática. El usuario puede añadir un despliegue que instale la imagen InfGrafica ATI.vdi en los ordenadores cuya tarjeta gráfica sea marca ATI Technologies Inc. (ATI) (gfxVendor == ATI) 5.6. BRIDGE ETHERNET Y SERVIDOR DHCP/PXE 75 y la imagen InfGrafica NV.vdi en aquellos cuya tarjeta sea nVidia (gfxVendor == nVidia) Grupos El uso de grupos fue una mejora incorporada por comodidad más que por funcionalidad. Permite unir varios nodos bajo un alias. De esta forma, no es necesario indicar una lista de 30 nodos cada vez que se desee realizar una operación sobre ellos; bastará con referirse al nombre del grupo. Esta funcionalidad está especialmente pensada para agrupar los nodos de un mismo recinto aunque, por supuesto, pueden agruparse bajo cualquier otro criterio. La información sobre qué nodos contiene un grupo está en una tabla de la base de datos, y a la hora de realizar operaciones sobre el grupo, éste será sustituido por la lista de nodos automáticamente. 5.6. Bridge ethernet y servidor DHCP/PXE Para realizar la instalación, cada nodo debe arrancar por PXE una imagen especialmente preparada, que contiene las herramientas necesarias para comunicarse con el Manager de HYDRA y ejecutar la instalación. El caso ideal es que este servidor PXE se encuentre en el servidor DHCP central del organismo donde se implante HYDRA, aunque esto no siempre es posible. Por eso, cada Delegado puede actuar como servidor PXE para los nodos que supervisa. Esto puede tener graves consecuencias en el caso de que Manager y Delegados se encuentren en redes distintas (por motivos de seguridad, por ejemplo), como muestra la figura 5.7. Si éste es el caso, es probable que se quiera evitar la intromisión en la configuración de red existente. Los Delegados tienen un servidor DHCP para el arranque por PXE que puede configurarse para que otorgue direcciones de la red a la que pertenece el Delegado, sin interferir con el servidor principal. En este caso, el Delegado debe hacer de gateway para los nodos, por lo que tiene que ser también configurado para actuar como bridge ethernet, de forma que los nodos puedan acceder a la red pública. 76 CAPÍTULO 5. DESARROLLO Figura 5.7: Estructura de red de HYDRA 5.7. Tamaño del proyecto El proyecto ha tenido una duración total de 27 meses, aunque no todos se han dedicado al desarrollo. Durante la primera fase, fue necesario estudiar y aprender a manejar las herramientas que se iban a emplear, y encontrar una configuración funcional para el entorno de desarrollo supuso un esfuerzo mayor del esperado. A modo de resumen, se exponen en esta sección algunos datos sobre el tamaño del proyecto en lı́neas de código (tabla 5.1), un gráfico con los lenguajes empleados en el desarrollo (figura 5.8) y una estimación del coste del proyecto basada en el modelo Cocomo (tabla 5.2). 77 5.7. TAMAÑO DEL PROYECTO Módulo Manager Pruebas Installer HostInfo Interfaces Lı́neas de Código Lenguajes 3.322 Python:3163 bash:76 SQL:72 Makefile:11 1.105 Python:1025 C++:55 Makefile:25 622 C++:599 Makefile:23 605 C++:444 ANSIC:134 Makefile:27 Slice 188 Slice:188 Tabla 5.1: Lineas de código por módulo C++ 1098 (18.31%) Slice 188 (3.13%) bash 160 (2.67%) ANSIC 134 (2.23%) Makefile 131 (2.18%) SQL 72 (1.20%) Python 4215 (70.27%) Figura 5.8: Lı́neas por lenguaje de programación Costes del Proyecto Total de lı́neas fı́sicas de código (SLOC) Esfuerzo de desarrollo en personas-año (personas-mes) (modelo de esfuerzo P ersonasM es = 3 · KSLOC 1,12 ) Estimación de Calendario, en Años (Meses) (modelo de calendario M eses = 2,5 · P ersonasM es0,35 ) Número estimado de desarrolladores (Esfuerzo/Calendario) Coste Total Estimado de Desarrollo (salario medio: 15.840 e/año) 5.810 1’79 (21’53) 0’61 (7’32) 2’94 68.200 e Tabla 5.2: Estimación de costes del proyecto (Generado usando sloccount, de David A. Wheeler) 6 HYDRA En este capı́tulo... Contenidos 6.1. Interfaces . . . . . . . . . . . . . . . . . . . . 80 6.2. Manager . . . . . . . . . . . . . . . . . . . . . 80 6.3. Delegados . . . . . . . . . . . . . . . . . . . . 84 6.4. HostInfo . . . . . . . . . . . . . . . . . . . . . 85 6.5. Installer . . . . . . . . . . . . . . . . . . . . . 86 6.6. Hydra-admin . . . . . . . . . . . . . . . . . . 87 ara comprender mejor la arquitectura del sistema, se explica a continuación el funcionamiento de cada uno de los elementos que componen el sistema HYDRA. P 80 CAPÍTULO 6. HYDRA Figura 6.1: Proceso de preparación de una Imagen 6.1. Interfaces Todos los componentes fueron diseñados como parte de un sistema distribuido. Para que interactúen entre sı́, se diseñó una serie de interfaces que definen la forma en que dos componentes concretos pueden intercambiar información. Para ello se utilizó el lenguaje Slice, proporcionado por la librerı́a de Ice. Todas las interfaces pueden consultarse en el directorio slices/ del proyecto. Existe también un fichero que define las estructuras de datos comunes para todos los componentes (imágenes, despliegues, particiones,...) 6.2. Manager El Manager es, junto con el instalador, el núcleo del sistema HYDRA. Una de sus principales funciones es procesar las peticiones que los usuarios realizan a través de la interfaz de administración, e interactuar con la base de datos. También se encarga de poner a punto los Delegados enviándoles las Imágenes que van a necesitar cuando éstos despierten a los nodos. El Manager es el único nodo que contiene todas las Imágenes del sistema. Cuando se inicia el proceso de instalación, cada Delegado recibirá únicamente las Imágenes que necesita servir a los nodos que están a su cargo. 6.2. MANAGER 81 El Manager posee una serie de observadores que le informan sobre la actividad de los nodos, para poder coordinar el proceso de instalación. Cuando un nodo (sea del tipo que sea) se levanta, el Manager lo detecta y realiza determinadas acciones dependiendo del tipo del nodo, que viene determinado por los primeros caracteres de su nombre (pxe- para los nodos han arrancado en modo instalación, del- para los delegados). En todos los casos, contacta con el servidor HostInfo que hay en el nodo para obtener la información del nodo y almacenarla en la base de datos. Es también el responsable de montar y desmontar las Imágenes, crear o borrar servidores, preparar las Imágenes, guardar y recuperar información de la base de datos... En definitiva, es el coordinador de todos los procesos que se realizan en HYDRA. El proceso de montar y desmontar las Imágenes hace referencia a la incorporación de la Imagen en el sistema de ficheros principal del Manager. Esto es necesario para la preparación de la Imagen y su distribución, como se verá más adelante. La creación de servidores es parte imprescindible de la distribución de Imágenes. Al terminar de preparar una Imagen, se crea un servidor que se encarga especı́ficamente de servir los ficheros de esa Imagen en particular. 6.2.1. La red IceGrid Para crear la red de HYDRA se utilizó el servicio IceGrid, que proporciona facilidades para crear y gestionar de forma sencilla un grid de nodos. La estructura de IceGrid está formada por un nodo principal, llamado Registry, y una serie de nodos. Juntos, el Registry y los nodos cooperan para manejar la información y los procesos que conforman las aplicaciones. Cada aplicación asigna una serie de servidores a unos nodos. En la red HYDRA, el Manager es el nodo que hace las funciones de Registry. El Registry mantiene un registro persistente de esta información, mientras que los nodos se encargan de ejecutar y monitorizar los servidores que se les han asignado [HS09]. Es posible utilizar técnicas de replicación en el Registry en el caso de necesitar tolerancia a fallos.1 En el Registry se coloca también el servicio de localización de Ice, que permite localizar servicios en distintos servidores dentro de la red HYDRA 1 Puede verse un vı́deo de demostración en http://arco.esi.uclm.es/es/dobs 82 6.2.2. CAPÍTULO 6. HYDRA Agente de Base de Datos Para interactuar con la base de datos, se incorporó al Manager un agente que se encarga de hacer que dichas operaciones sean transparentes. Es decir, el Manager no ejecuta sentencias SQL, si no que invoca operaciones para almacenar Despliegues, obtener Imágenes, etc. Si en un futuro cambiase el modelo de la base de datos, o se utilizara otra forma de almacenamiento de la información, tan sólo el agente se verı́a afectado. Sólo habrı́a que programar un nuevo agente que fuera capaz de manejar el nuevo modelo de persistencia. 6.2.3. Preparación de imágenes Una de las tareas más importantes que realiza el Manager es la preparación de las Imágenes para su distribución. La herramienta utilizada para el despliegue de las Imágenes es IcePatch2, que es un servicio del middleware Ice. IcePatch2 permite ahorrar ancho de banda de dos maneras: en primer lugar, no transmite los ficheros tal cual los encuentra, sino que los comprime antes con bzip. Por otra parte, una vez comprimido cada fichero, calcula el código MD5 [Riv92] correspondiente a cada uno, y almacena esta información en un fichero de texto, llamado IcePatch2.sum. Ambas operaciones las realiza el comando icepatch2calc. Una vez hecho esto, se utiliza icepatch2server para crear un servidor al que conectarse para descargar los ficheros. Cuando un cliente se conecta al servidor (mediante icepatch2client), descarga los ficheros comprimidos y el fichero .sum, que le servirá en primera instancia para detectar errores en la transmisión. Si todo ha ido bien, descomprimirá los ficheros y borrará los comprimidos. El fichero .sum tiene una segunda finalidad, y es que permite detectar cambios. Cuando alguien actualice la Imagen almacenada en el servidor, es de suponer que dicha actualización no afectará a todos los ficheros (aunque podrı́a ser ası́, no es lo habitual). El uso del fichero .sum permite saber qué ficheros han cambiado o han sido añadidos o eliminados, y transmitir únicamente dichos cambios. 6.2. MANAGER 83 La idea, por tanto, es realizar la preparación con icepatch2calc en la Imagen y dejarla lista para su distribución. Sin embargo, el empleo de IcePatch2 tiene algunos inconvenientes que hubo que resolver. El primero de ellos se debe a los enlaces simbólicos. icepatch2calc no trata los enlaces como ficheros normales, sino que los sigue, accediendo al fichero al que apuntan en lugar de al propio enlace. Esto hace que no los añada a la lista de ficheros a transmitir, lo que deja muchos enlaces importantes (como por ejemplo, los que indican qué núcleo debe arrancarse) sin distribuir, haciendo que el sistema quede inutilizable. También nos tropezamos con los enlaces a ficheros especiales y ficheros de dispositivo, lo que hacı́a por ejemplo que icepatch2calc intentara añadir el contenido de un CD o de los dispositivos stdin, stdout y stderr, entre otros. Para evitar esto, es necesario añadir un paso previo en el que todos los enlaces simbólicos se almacenan en un fichero comprimido y después se borran. El fichero comprimido será el que se distribuya hacia los ordenadores clientes y luego será el instalador quien se ocupe de restaurarlos en el lugar que les corresponda. El segundo inconveniente implica a los permisos y los propietarios de los ficheros. Al descomprimir los ficheros, todos pertenecen al usuario que esté ejecutando el proceso icepatch2client, ya que es el que los está creando en ese momento. Esto es grave, porque impide por ejemplo que los usuarios puedan acceder a sus propios ficheros, incluidos los usuarios del sistema2 . Además, algunos permisos como el bit sticky, el bit SUID y el bit SGID han de ser restaurados de forma especial. Por ello, fue necesario utilizar una aplicación auxiliar llamada metastore que almacenara la información sobre los permisos, el propietario y el grupo de cada archivo en un fichero. Este fichero, llamado permissions.hydra, se almacena junto al fichero IcePatch2.sum y se distribuye con la Imagen. El instalador, explicado en la sección 6.5, será el que invoque durante la instalación a la función complementaria de metastore 3 , que se encargará de restaurar los permisos originales de cada fichero. Una vez hecho esto, ya se puede llamar a icepatch2calc de forma que prepare el sistema para su despliegue. El proceso completo puede observarse en la figura 6.1. 2 3 Usuarios que representan servicios del sistema http://david.hardeman.nu/software.php 84 CAPÍTULO 6. HYDRA 1. Los usuarios suben las Imágenes al Manager, para que las prepare, y crean la configuración que necesitan (Despliegues). 2. Se invoca la orden de iniciar la instalación. 3. Los Delegados se descargan la configuración y las Imágenes (si procede) desde el Manager. 4. El Delegado despierta a los nodos, y les sirve las Imágenes. Figura 6.2: Flujo de trabajo en HYDRA 6.2.4. Generación de la Configuración Una de las primeras acciones que realiza el Manager cuando se da la orden de iniciar la instalación es generar la configuración de las Imágenes que deben ir en cada nodo. En la base de datos, esta información está almacenada en forma de Despliegues: cada despliegue indica una serie de imágenes que deben instalarse en unos nodos concretos y en unos dı́as concretos. Por supuesto es posible que varios Despliegues indiquen Imágenes para los mismos nodos y los mismos dı́as. Por eso, el Manager consulta toda la información de la base de datos y calcula qué Imágenes necesitará cada nodo en ese dı́a. 6.3. Delegados Los Delegados son los encargados de distribuir las Imágenes a los nodos que supervisan. De esta manera se consigue una estructura jerárquica, para aumentar la escalabilidad del sistema a medida que aumente el número de nodos. El SO de los Delegados puede instalarse como una Imagen más de HYDRA, pudiendo incluso crear varios niveles de Delegados y Nodos en caso de que fuera necesario. 6.4. HOSTINFO 85 Cuando se inicia el proceso de instalación, los Delegados se descargan o actualizan desde el Manager las Imágenes que necesitan para sus nodos. Esta parte requirió una pequeña modificación de la librerı́a IcePatch, ya que cuando se realiza un parcheo, los archivos comprimidos se borran. Dado que se pretende retransmitir los ficheros descargados en el Delegado hacia los Nodos, fue necesario añadir una opción extra al comando icepatch2client para que mantuviera los ficheros comprimidos al terminar la distribución. Una vez obtenidas, los Delegados despiertan a los nodos mediante WoL, y se encargan de distribuirles las Imágenes. Cuando un nodo termina su instalación con éxito, el Delegado evita que arranque por PXE la próxima vez. De esta forma, arrancará desde el disco duro, con alguno de los SSOO que se le acaban de instalar. La figura 6.2 muestra un esquema de este proceso. En los Delegados también está toda la estructura necesaria para el arranque por PXE, el servidor DHCP, etc., tal como se vio en la sección 5.6. 6.4. HostInfo El módulo HostInfo permite al Manager obtener información acerca de los nodos. Se ejecuta en el nodo y recaba información sobre el disco duro, las particiones, el hardware, el sistema operativo, etc. Dicha información se envı́a al Manager, para que conozca el estado de los nodos, y ası́ poder decidir qué acciones deben realizarse sobre la máquina. HostInfo se ejecuta al inicio del arranque por PXE, de forma que la información recogida sobre el nodo esté siempre actualizada en caso de que el hardware del nodo cambie. El listado 5.1 muestra la interfaz del módulo escrita en Slice, donde se puede ver la información que recaba y las operaciones que se pueden invocar sobre él. La forma de obtener la información es muy variada. El sistema operativo que ejecutan los nodos y en el que se ejecuta el HostInfo es un GNU/Linux mı́nimo, ası́ que se puede obtener gran parte de la misma con comandos del sistema. Ası́, con la salida de los comandos ifconfig, uptime, uname y lspci obtenemos los datos correspondientes a tarjetas de red, carga de trabajo, sistema operativo y tarjeta gráfica, respectivamente. 86 CAPÍTULO 6. HYDRA Figura 6.3: Diagrama de Componentes La información acerca del procesador y la memoria puede consultarse directamente en los ficheros que el sistema operativo crea a tal efecto en el directorio /proc. Por último, para saber cuántos discos duros hay en el sistema y qué particiones tiene cada uno se utilizó la librerı́a libparted. En una revisión posterior se le añadieron dos funciones adicionales para poder apagar y reiniciar el nodo remotamente. A pesar de que la semántica de dichas funciones no cae en el contexto del servicio HostInfo, se decidió ubicarlas aquı́ por varias razones: en primer lugar, HostInfo es el único servicio que va a ser instalado en todos los nodos que se conecten a la red HYDRA independientemente de su rol (Manager, Delegado, Nodo...), de forma que ası́ podrı́an controlarse todos los nodos. Por otro lado, son dos funciones tan simples que se consideró que no tenı́an relevancia suficiente para alojarlas en un sirviente propio. 6.5. Installer El módulo de instalación se encarga de instalar las Imágenes y configurar los nodos. Recibe una estructura que describe la configuración que debe tener el nodo, incluyendo particiones, imágenes, etc. (ver listado 6.1). Esta estructura consiste en una lista de particiones, otra lista con los nombres de las imágenes que va a instalar y el delegado al que debe pedirle las imágenes. 87 6.6. HYDRA-ADMIN struct Partition { string name ; long size ; long free ; string mountPoint ; string fs ; }; // /dev/hda1 // in kB // in kB // vfat, etx3 sequence<Partition> PartitionSeq ; struct NodeSetup { PartitionSeq partitions ; string delegate ; Ice :: StringSeq imgnames ; }; Listado 6.1: Configuración de Nodo Una vez que tiene la información necesaria, escribe una nueva tabla de particiones (lo cual borra el particionado anterior) y crea las nuevas particiones. Después, comienza a copiar las imágenes de los sistemas operativos en las particiones, en el mismo orden en el que se especificaron. Para ello, monta la partición correspondiente y se pone en contacto con el delegado para pedirle los ficheros. Al terminar de transferir una imagen, hay que desempaquetar los enlaces simbólicos que se archivaron en el proceso de preparación de la imagen y restaurar los permisos y los propietarios de cada fichero (ver sección 6.2.3). Cuando el proceso termina, instala un gestor de arranque (GRUB), que permitirá al usuario escoger cuál de ellas arrancar. El menú del GRUB está configurado para que muestre los nombres de las imágenes, de forma que sea fácil identificar cuál de ellas se quiere arrancar (figura 6.5). 6.6. Hydra-admin Hydra-admin es la aplicación que los usuarios utilizarán para comunicarse con el Manager y realizar operaciones sobre la configuración del sistema. Permite la administración de imágenes, despliegues, delegados, restricciones, etc. Para una completa guı́a de la herramienta, puede consultarse el apéndice A: Manual de Usuario. 88 CAPÍTULO 6. HYDRA Figura 6.4: Secuencia de instalación en un nodo 6.6. HYDRA-ADMIN Figura 6.5: Pantalla de arranque (GRUB) de un nodo 89 7 Caso de Estudio: ESI En este capı́tulo... Contenidos 7.1. Situación Actual . . . . . . . . . . . . . . . . 91 7.2. Implantación de HYDRA 95 . . . . . . . . . . na de las razones que motivaron el desarollo de este proyecto fue el sistema que hay implantado actualmente en la ESI para gestionar el parque informático de sus laboratorios docentes. En este capı́tulo se analizará dicho sistema, y se expondrán las ventajas que aportarı́a la instalación de HYDRA, ası́ como una valoración de la infraestructura que necesitarı́a. U 7.1. Situación Actual Actualmente, cuando un alumno se sienta delante de un ordenador de un laboratorio y lo enciende, se arranca un sistema Fedora GNU/Linux que, automáticamente al iniciar sesión, presenta al alumno una pantalla de selección (ver figura 7.1). En esta 92 CAPÍTULO 7. CASO DE ESTUDIO: ESI Figura 7.1: Pantalla de selección de máquina virtual ventana el alumno debe escoger la máquina virtual correspondiente a la asignatura sobre la que desee trabajar. Existe un servidor principal en el que están almacenados todos los ficheros de las imágenes VMWare de las diferentes asignaturas. Estas imágenes se encuentran en un directorio que está exportado por NFS para los ordenadores de las aulas, pero sólo en modo lectura. Para poder escribir y guardar cambios se utilizará un fichero distinto al de la máquina virtual, como se explicará más adelante. Cabe destacar que, mientras que la imagen del sistema es única para todos los usuarios, el fichero que contiene las modificaciones es propio de cada usuario; es decir, cada usuario tiene un fichero de modificaciones por cada imagen (la figura 7.2 ilustra esta situación). Una vez seleccionada la imagen que se desea utilizar, se ejecuta el virtualizador VMWare, que arrancará la imagen deseada, y el alumno puede entonces trabajar. El uso de máquinas virtuales puede parecer una buena solución, ya que permite reinstalar un ordenador entero en unos minutos en caso de que fuera necesario, sin que el sistema principal (Fedora) se vea afectado. Sin embargo, también tiene inconvenientes, como se explicó en el capı́tulo 2. El acceso de bajo nivel queda sesgado, lo que lleva a una situación paradójica: se puso la máquina virtual para que no fuera necesario trabajar en el sistema original (Fedora), pero ciertas asignaturas necesitan acceso de bajo nivel, por lo que tuvieron que acabar utilizando la Fedora para trabajar. 7.1. SITUACIÓN ACTUAL 93 Es el caso de Animación para la Comunicación, en la que el software estudiado requiere aceleración gráfica para trabajar. Sin embargo, desde la máquina virtual no se puede acceder a una tarjeta gráfica ATI o nVidia, sino a tarjetas genéricas emuladas. Por ejemplo, en Virtualbox, la tarjeta gráfica aparece como ((InnoTek Systemberatung GmbH Virtualbox Graphics Adapter )), cuando en realidad deberı́a constar como ((nVidia Corporation NV34 [GeForce FX 5200] )). En la asignatura de Interfaces y Periféricos realizan las prácticas utilizando un MS-DOS simulado, un sistema operativo que no se utiliza desde hace más de 10 años. En las asignaturas de redes, es necesario configurar las máquinas virtuales como Network Address Table (NAT), y los SSOO huéspedes reciben direcciones IP privadas, y direcciones MAC simuladas, con el ((ruido)) que eso implica para la docencia. Los profesores, además, deben seguir un proceso bastante engorroso si quieren cambiar algo en alguna de las máquinas virtuales. Sirva como ejemplo la siguiente sección, en la que se explica el proceso de actualización de una imagen. Es especialmente llamativo también el caso de un curso que se iba a impartir sobre tecnologı́a Android. El curso, ofrecido por INDRA, requerı́a que los alumnos descargaran una versión de la herramienta Eclipse y un plugin para el mismo. Hubo que descargar la versión de la web porque la versión instalada de serie en las máquinas virtuales no permitı́a, como es lógico, la instalación de plugins sin privilegios de súper usuario, mientras que la versión de la web puede instalarse siendo usuario normal. Los problemas comenzaron ya en la descarga, pues la escasa velocidad de la red hizo que este paso se alargara mucho más de lo esperado. Pero lo peor fue a la hora de instalar y ejecutar el programa, pues la máquina virtual consumı́a tantos recursos que hacı́a que el programa (que también es bastante pesado) se ejecutara a una velocidad inaceptable. Los ponentes hicieron un esfuerzo extra, pero el curso no se pudo impartir al 100 % y los conferenciantes señalaron que era ((la escuela con peores recursos en la que habı́an estado)). Actualizar una Imagen Es habitual que los profesores necesiten actualizar las imágenes que utilizan en su asignatura para instalar nuevos programas o ficheros, actualizaciones del SO, etc. A continuación se describe el proceso que deben seguir. Para el ejemplo se supone el uso 94 CAPÍTULO 7. CASO DE ESTUDIO: ESI FEDORA /home/imagen/... .../usuario/imagen.vmdk (instalación) Montado por NFS VMWARE SERVIDOR /home/imagen/... .../config/usuario/imagen.vmdk (modificaciones) Copia Figura 7.2: Esquema de las máquinas virtuales en los laboratorios de una imagen que contiene un sistema GNU/Linux, aunque el proceso es similar para cualquier otro. 1. En primer lugar, es necesario conseguir una copia de la imagen original que no esté congelada con un snapshot.1 2. Iniciar la máquina virtual, y actualizar/instalar lo que sea menester. 3. Si se modifica el núcleo del sistema operativo, es necesario recompilar las vmware-tools. Para ello: Instalar cabeceras del núcleo, compilador, etc. En la ventana de VMWare, ejecutar la opción VM⇒Install VMWare Tools. Aparecerá una imagen de CD montada en /media/VMWareTools, que contiene el código fuente de las herramientas en formato rpm y gzip. Instalar el código fuente. Ejecutar el script de instalación (vmware-config-tools.pl), que compilará las herramientas. Sustituir el módulo para el driver de red (pcnet32) por vmxnet. 4. Una vez actualizado el software, apagar la máquina virtual. 1 Una imagen congelada no puede ser modificada, sólo leı́da. 7.2. IMPLANTACIÓN DE HYDRA 95 5. Es recomendable (aunque opcional) desfragmentar el fichero de la imagen, para reducir su tamaño y mejorar los tiempos de acceso: vmware−vdiskmanager −d imagen . vmdk 6. Si el disco (fichero .vmdk) procede de una clonación, es posible que su nombre sea distinto al del original. Se puede renombrar: vmware−vdiskmanager −n nombreactual . vmdk nombrenuevo . vmdk Una vez renombrado, es necesario actualizar el fichero .vmx para que la referencia al disco virtual siga siendo correcta. 7. Crear un snapshot del estado de la máquina virtual apagada. Con esto se consigue un nuevo fichero .vmdk que contendrá las modificaciones que se efectúen sobre la imagen, manteniendo ésta en su estado original. También se modificará la referencia del fichero .vmx para que apunte al fichero de snapshot. 8. El disco virtual congelado, debe ubicarse en /home/imagen/usuario. Esta será la ruta que se exporta con permisos de sólo lectura, como se comentó anteriormente. 9. El disco virtual que contiene las modificaciones realizadas al fichero de snapshot debe colocarse en /home/imagen/config/usuario. Los ficheros de esta carpeta se re-copian en cada PC del laboratorio en el arranque de la máquina virtual. 10. Asignar permisos de lectura, al menos para el grupo, ya que en los PC de los laboratorios el usuario no coincide con el del servidor de las máquinas virtuales. También debe actualizarse el fichero version para que el PC del laboratorio reemplace los ficheros de configuración por los nuevos, por ejemplo con el comando: date > version 7.2. Implantación de HYDRA La adopción de HYDRA como sistema de despliegue de imágenes supondrı́a una gran mejora tanto en rendimiento como en experiencia de usuario para los profesores y los alumnos. 96 CAPÍTULO 7. CASO DE ESTUDIO: ESI Los profesores podrı́an tener tantas imágenes como quieran para sus asignaturas, completamente personalizadas y configuradas por ellos mismos, y la actualización de las mismas se reduce a copiar la imagen nueva en el servidor y ejecutar un comando (ver la sección A.1 del Manual de Usuario). Además, el sistema permite la planificación semanal de las imágenes, instalando cada dı́a las que van a ser necesarias. Los alumnos, por su parte, se olvidarán del engorro de trabajar con máquinas virtuales que les quitan recursos. Ahora, todo el equipo queda a disposición del usuario, mejorando la velocidad de ejecución de los programas. También tendrán acceso a los dispositivos reales del PC, en lugar de manejar los dispositivos virtualizados. Las prácticas de la asignatura de Interfaces y Periféricos, mencionada antes como ejemplo, podrı́an realizarse ahora en un MS-DOS nativo. Aunque podrı́an también utilizar GNU/Linux, Windows, Solaris o cualquier sistema soportado. O, por qué no, hacer una práctica en cada sistema, para ampliar conocimientos. Si por accidente un ordenador se corrompiera, el profesor podrı́a ordenar al sistema que restaurase la configuración del nodo en cuestión, y en apenas unos minutos volverı́a a estar operativo. Instalar HYDRA en la ESI, no supondrı́a modificar casi la infraestructura existente. El Manager deberı́a ir colocado en un servidor de la red DMZ, ya que es una máquina que contendrá información ((sensible)). Serı́a lógico ubicarlo en el servidor que alberga actualmente las imágenes para las máquinas virtuales. Para actuar de Delegados pueden usarse los PCs que tienen asignados los profesores, aunque aquı́ sı́ que habrı́a que cambiar un poco la red, para que tuviera la topologı́a que muestra la figura 5.7. Para comparar, veamos cómo serı́an los pasos a realizar con HYDRA para el mismo ejemplo de actualizar una imagen. Se entiende por tanto, que el profesor ya subió en su momento la imagen al Manager, por lo que habrı́a una copia de la imagen ((preparada)) en el Manager y una copia ((limpia)) en el ordenador del profesor. Para actualizarla, tendrı́a que hacer los siguiente: 1. Acceder al entorno de la imagen (a través de la máquina virtual o con chroot si es un directorio) y actualizar como convenga. Es necesario aclarar en este punto que el uso de la máquina virtual se limita a la actualización de la imagen por parte del profesor; es decir, no se usa en los laboratorios. Se optó por este método por ser el más cómodo para el usuario crear imágenes. 7.2. IMPLANTACIÓN DE HYDRA 97 2. Salir del entorno de la imagen (VirtualBox) y copiarla de nuevo al Manager, mediante FTP, SSH o cualquier otro mecanismo disponible. 3. Mediante la aplicación de administración, ejecutar el siguiente comando: hydra−admin . py update−image n o m b r e a n t i g u a −f r u t a i m g n u e v a La imagen quedarı́a entonces actualizada y en la próxima instalación se actualizarı́a en los nodos que correspondiese. 8 Conclusiones y Trabajo Futuro e ha presentado un sistema que soluciona el problema de gestionar un conjunto de nodos en el que existe gran heterogeneidad tanto a nivel hardware como software, con una herramienta orientada a facilitar la labor del administrador del cluster y a mejorar la experiencia de sus usuarios. S Se han logrado cubrir los objetivos propuestos en el capı́tulo 2, con un sistema que permite instalar masivamente y de forma remota varios SSOO, que puede planificarse y cuya gestión es sencilla. La instalación se realiza de forma totalmente automática, desatendida por el administrador, y los sistemas operativos se ejecutan de forma nativa en los nodos, evitando la virtualización. Instalación automática y masiva Es posible instalar sistemas operativos en varios nodos, de forma totalmente automática, desde el arranque de los nodos hasta el particionado de los discos y la copia de los ficheros. Acceso a periféricos Los SSOO instalados pueden tener la configuración que los usuarios necesiten, incluyendo drivers especı́ficos para los dispositivos concretos de los nodos. Mayor rendimiento Al suprimir la máquina virtual, se consiguió un ahorro de memoria y CPU que ahora queda a disposición de los usuarios. 100 CAPÍTULO 8. CONCLUSIONES Y TRABAJO FUTURO Integridad de datos Un nodo mal configurado puede ser restablecido de forma automática. Configuración a medida Cada usuario puede crear Imágenes de SSOO con la configuración y programas que necesite. Planificación El sistema contempla la posibilidad de organizar el uso de las Imágenes de acuerdo a una planificación semanal, para un mejor aprovechamiento. Como hito adicional, es posible instalar la Imagen del sistema Fedora que se utiliza actualmente en los laboratorios, por lo que la compatibilidad es completa y ambos sistemas pueden coexistir. Queda sin embargo trabajo por delante, para hacer de HYDRA un sistema mucho más potente y flexible. Actualmente sólo están soportadas las imágenes de sistemas UNIX, aunque en breve se podrán utilizar sistemas Windows y esperamos en un futuro poder distribuir más sistemas, como MacOS de Apple o Solaris de Sun. También se está trabajando en una interfaz gráfica, tanto web como de escritorio para la herramienta de administración, de forma que su manejo sea aún más sencillo. Otro avance a corto plazo será la modificación de la librerı́a Ice para soportar transporte multicast, lo que permitirá la instalación simultánea de las Imágenes en todos los nodos, acelerando el proceso de manera significativa. Una funcionalidad alternativa del sistema serı́a el manejo de imágenes que no contuvieran sistemas operativos, sino solamente datos. Tan sólo habrı́a que definir este tipo especial para tenerlo en cuenta a la hora de instalar el gestor de arranque, y que no la contara como una partición a arrancar. Con este nuevo uso podrı́an, por ejemplo, distribuirse imágenes con texturas y modelos 3D para las clases de Animación para la Comunicación. Además, HYDRA no tiene porqué quedarse en una aplicación de PC: en un futuro pueden desarrollarse versiones de sus componentes adaptadas a las arquitecturas de PDA, PocketPC, o los teléfonos de nueva generación que están apareciendo en el mercado, de forma que cualquier empresa pueda administrar de forma sencilla el conjunto de todas sus herramientas informáticas. 101 Por último, cabe destacar que este trabajo ha sido el tema de un artı́culo aceptado para el Simposio Nacional de Tecnologı́as de la Información y las Comunicaciones en la Educación (SINTICE) 2010. A Manual de Usuario En este capı́tulo... Contenidos A.1. Gestión de Imágenes . . . . . . . . . . . . . 104 A.2. Gestión de Despliegues . . . . . . . . . . . . 105 A.3. Gestión de Equipos . . . . . . . . . . . . . . 107 ara que el usuario interactúe con el Manager, se desarrolló una herramienta llamada hydra-admin que le permite efectuar todas las tareas que desee realizar con HYDRA. Es una herramienta con una Interfaz de Lı́nea de Comandos (CLI), en la que se especifica la acción a realizar y las opciones que necesite dicha acción: P hydra−admin . py <ACCION> [ OPCIONES ] A continuación se describe el manejo de dicha herramienta para cada una de las acciones posibles. 104 A.1. APÉNDICE A. MANUAL DE USUARIO Gestión de Imágenes Un usuario puede crear, modificar y borrar Imágenes del sistema. Previamente, las Imágenes deben haber sido copiadas al servidor principal, donde se encuentra el Manager. Al hablar de Imagen nos referimos a un ((contenedor)) en el que se encuentran los ficheros de un sistema operativo completo. Actualmente, dichas Imágenes pueden ser de dos tipos: Ficheros .vdi de VirtualBox El usuario puede crear un disco de VirtualBox y utilizarlo como Imagen. El único requisito es que dicho disco haya sido creado como un disco de tamaño fijo. Esto es muy importante, ya que el sistema no podrá manejar imágenes de expansión dinámica. Directorio del sistema de ficheros Es posible añadir un directorio como Imagen. Esto permite, por ejemplo, distribuir un sistema operativo que se encuentra en un disco duro externo que ha sido montado previamente en el sistema de ficheros. Adición y Eliminación de Imágenes Para añadir una imagen al sistema, se utilizará la siguiente instrucción: hydra−admin . py add−image [−n | −−name ] NOMBRE [−f | −−file ] FICHERO [−t | −−fs−type ] TIPO [−−folder ] FICHERO La ruta completa (en el Manager) al fichero .vdi o directorio que contiene la imagen. NOMBRE Un nombre que asignar a la imagen. No debe haber dos imágenes con el mismo nombre. Puede utilizarse la asignatura para la que se va a usar, por ejemplo. TIPO El tipo del sistema de ficheros de la imagen. Esto se utilizará para dar formato a la partición donde se alojará la imagen. --folder Indica que la Imagen está almacenada en un directorio. A.2. GESTIÓN DE DESPLIEGUES 105 El sistema añadirá la Imagen, la montará (en caso de ser necesario), y además la preparará para su publicación y la pondrá en disposición de ser distribuida. Estas operaciones pueden tardar algunos minutos. Para quitar una Imagen del sistema bastará con conocer su nombre y ejecutar la orden siguiente. El sistema la eliminará de la base de datos, aunque no borrará el fichero .vdi (o el directorio) que la contiene. hydra−admin . py delete−image NOMBRE Listar Imágenes Mediante esta instrucción el programa le mostrará al usuario una lista con las imágenes que se encuentren en ese momento registradas en el sistema, con todas sus caracterı́sticas. hydra−admin . py list−images Actualizar una Imagen En este caso, NOMBRE hace referencia a una Imagen existente en el sistema, que es la que se pretende actualizar, y FICHERO es el contenedor de la Imagen con los nuevos datos. hydra−admin . py update−image NOMBRE [−f | −−file FICHERO ] A.2. Gestión de Despliegues Una vez que el usuario ha añadido las Imágenes que necesita, debe especificar en qué ordenadores y qué dı́as quiere que se instalen. Para ello debe crear uno (o más) Despliegues. 106 APÉNDICE A. MANUAL DE USUARIO Crear y Eliminar Despliegues hydra−admin . py add−deployment −n NOMBRE −i IMAGEN [ , IMG2 , IMG3 , ...] −d DIA [ , DIA2 , DIA3 , ...] [−g GRUPO ] [ MACLIST ] NOMBRE Un nombre para el Despliegue. No puede haber dos Despliegues con el mismo nombre. IMAGEN Nombre de una imagen que exista en el sistema. Puede especificarse más de una separando los nombres por comas. DIA Dı́as de la semana (lunes, martes...) en que las Imágenes de este Despliegue deben estar instaladas en los nodos. GRUPO Nombre de un grupo de nodos. De esta forma no es necesario especificar una a una sus direcciones MAC. MACLIST Lista de direcciones MAC de los nodos, separada por espacios. A la hora de indicar los nodos, se puede optar por dar el nombre de un grupo, un conjunto de direcciones MAC o ambas. No indicar ningún nodo dará un error como resultado. Si se desea eliminar un Despliegue del sistema, se ejecutará la orden siguiente: hydra−admin . py delete−deployment NOMBRE Listar Despliegues Si un usuario necesita información sobre los despliegues existentes en el sistema, ejecutará lo siguiente: hydra−admin . py list−deployments La ejecución de esta instrucción retornará una lista con los Despliegues actualmente registrados en el sistema, mostrando sus nombres, Imágenes, calendario y nodos asociados. A.3. GESTIÓN DE EQUIPOS 107 Modificar Despliegues Puede ser necesario cambiar la descripción de un despliegue, para añadir o quitar una imagen, modificar el calendario, etc. Para ello, existe la siguiente instrucción: hydra−admin . py update−image NOMBRE [−f | −−file FICHERO ] A.3. Gestión de Equipos Listar Nodos Mediante esta instrucción puede obtenerse una lista con todos los nodos del sistema, junto con todas sus caracterı́sticas. hydra−admin . py list−nodes Restaurar Nodo Si algún nodo se ha estropeado y necesita ser reinstalado, apunte su dirección MAC y ejecute: hydra−admin . py restore−node MACLIST Crear Grupo Para crear un grupo de nodos y juntarlos bajo un mismo nombre, utilice la siguiente orden: hydra−admin . py group −n NOMBRE MACLIST Establecer Delegado 108 APÉNDICE A. MANUAL DE USUARIO hydra−admin . py delegate [−−hostname NOMBRE | −m MAC ] [−g GRUPO ] MACLIST Esta instrucción permite asignar un Delegado para un conjunto de nodos. El Delegado puede especificarse bien por su nombre de host (con la opción -hostname) o por su dirección MAC (con la opción -m). La lista de nodos puede indicarse con un nombre de grupo, con una lista de direcciones MAC o con ambas. B Terminologı́a Imagen - Contenedor que alberga un sistema de ficheros en su interior, el cual corresponde a un sistema operativo completo y funcional. Puede ser un fichero de VirtualBox o un directorio. Despliegue - Entidad abstracta que describe las Imágenes que hay que instalar en unos nodos determinados (los cuales deben cumplir ciertas restricciones), y qué dı́as de la semana deben estar instaladas. Manager - Ordenador en el cual se almacenan los sistemas operativos y desde el que se distribuirán. También es el encargado de decidir qué Imágenes hay que instalar y coordina las tareas de instalación. Nodo - Todo aquel ordenador que pertenece a la red HYDRA y es susceptible de ser supervisado por el Manager. Delegado - Es un tipo especial de nodo que actúa de intermediario entre el Manager y un conjunto de nodos. Se encarga de despertarlos y enviarles las Imágenes que necesiten. C Acrónimos y Siglas Arco Arquitectura y Redes de Computadores AMD Advanced Micro Devices ANSI American National Standards Institute ATA Advanced Technology Attachment ATI ATI Technologies Inc. BD Base de Datos BIOS Basic Input Output System BOEL Brian’s Own Embedded Linux CHS Cylinder, Head, Sector CIU Container Insallable Unit CLI Interfaz de Lı́nea de Comandos CORBA Common Object Request Broker Architecture CRUD Create Retrieve/Read Update Delete 112 APÉNDICE C. ACRÓNIMOS Y SIGLAS DHCP Dynamic Host Configuration Protocol DMZ De-Militarized Zone DNS Domain Name System DOS Disk Operating System DRBL Diskless Remote Boot in Linux E/R Entidad/Relación EBR Extended Boot Record ESI Escuela Superior de Informática FAI Fully Automated Installation FLUTE File Delivery over Unidirectional Transport FS File System FTP File Transfer Protocol G4U Ghosting for Unix GFDL GNU Free Documentation License GNU GNU is Not Unix GRUB GRand Unified Bootloader HDD Hard Disk Drive HP Hewlett-Packard HTTP Hyper Text Transfer Protocol HTTPFS HTTP File System HYDRA Heterogeneous sYstem Deployment and Remote Administration Ice Internet Communications Engine IDE Integrated Device Electronics 113 IDL Interface Definition Language IP Internet Protocol ISO International Standards Oganization IU Installable Units IUDD IU Deployment Descriptor LAN Local Area Network LBA Logical Block Addressing LILO LInux LOader LTSP Linux Terminal Server Project MAC Medium Access Control MBR Master Boot Record MIB Management Information Base MS-DOS Microsoft Disk Operating System NAT Network Address Table NFS Network File System NTFS New Technology File System OMG Object Management Group OSI Open System Interconnection RMI Remote Method Invocation PC Personal Computer PDA Personal Digital Assistant PXE Preboot eXecution Environment RFC Request For Comments 114 APÉNDICE C. ACRÓNIMOS Y SIGLAS RPC Remote Procedure Call SATA Serial ATA SINTICE Simposio Nacional de Tecnologı́as de la Información y las Comunicaciones en la Educación SIU Smallest Installation Unit Slice Specification Language for Ice SLIM Single Linux Image Management SM Solution Module SMI Structure of Management Information SNMP Simple Network Management Protocol SO Sistema Operativo SSOO Sistemas Operativos SSH Secure SHell SQL Standard Query Language TCP Transmission Control Protocol TFTP Trivial File Transfer Protocol TMN Telecommunications Management Network UDP User Datagram Protocol UML Unified Modelling Language URL Universal Resource Locator USB Universal Serial Bus WoL Wake on Lan XDR eXternal Data Representation XML eXtended Markup Language D GNU Free Documentation License Version 1.3, 3 November 2008 c 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Copyright http://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The purpose of this License is to make a manual, textbook, or other functional and useful document “free” in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free 116 APÉNDICE D. GNU FREE DOCUMENTATION LICENSE license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text. The “publisher” means any person or entity that distributes copies of the Document to the public. A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced 117 in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computernetwork location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. 118 APÉNDICE D. GNU FREE DOCUMENTATION LICENSE G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles. You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. COMBINING DOCUMENTS Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. 119 In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements”. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. 120 APÉNDICE D. GNU FREE DOCUMENTATION LICENSE Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Document. RELICENSING “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A “Massive Multiauthor Collaboration” (or “MMC”) contained in the site means any set of copyrightable works thus published on the MMC site. “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. “Incorporate” means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is “eligible for relicensing” if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. Bibliografı́a [Bhu71] A. Bhushan. File transfer protocol. RFC 114, Internet Engineering Task Force, April 1971. On-line: <http://www.rfc-editor.org/rfc/rfc114. txt>. [DGV04] Christine Draper, Randy George, y Marcello Vitaletti. Installable unit deployment descriptor for autonomic solution management. International Workshop on Database and Expert Systems Applications, 0:742– 746, 2004. doi:http://doi.ieeecomputersociety.org/10.1109/DEXA. 2004.1333563. [Fin00] Brian Elliott Finley. Va systemimager. En ALS’00: Proceedings of the 4th annual Linux Showcase & Conference, pages 11–11, Berkeley, CA, USA, 2000. USENIX Association. [FSFa] FSF. Grand unified bootloader. software/grub/> [ene 2010]. [FSFb] FSF. libparted. On-line: <http://www.gnu.org/software/parted/ index.shtml> [ene 2010]. [GHJV95] E. Gamma, R. Helm, R. Johnson, y J. Vlissided. Design Patterns. Addison Wesley, 1995. [GLR99] Mattias Gärtner, Thomas Lange, y Jens Rühmkorf. The fully automatic installation of a linux cluster. Informe Técnico 379, Zentrum für Angewandte Informatik Köln, Lehrstuhl Jünger, 1999. On-line: <http://www.gnu.org/ 122 BIBLIOGRAFÍA [GLV+ 06] Y. Georgiou, J. Leduc, B. Videau, J. Peyrard, y O. Richard. A tool for environment deployment in clusters and light grids. En Parallel and Distributed Processing Symposium, 2006. IPDPS 2006. 20th International, page 8 pp., april 2006. doi:10.1109/IPDPS.2006.1639691. [HS09] Michi Henning y Mark Spruiell. Distributed Programming with Ice, 2009. [Int99] Intel. Preboot execution environment (pxe) specification. Informe técnico, Intel Corp., 1999. [Kel] Simon Kelley. dnsmasq. dnsmasq/> [may 2010]. [LIM] Proyecto limux. limux>. On-line: <http://www.thekelleys.org.uk/ (en alemán). On-line: <http://www.muenchen.de/ [LWH+ 04] David C. M. Lee, C. L. Wang, Daniel H.F. Hung, Roy S.C. Ho, y Francis C.M. Lau. On managing execution environments for utility computing. Informe técnico, Department of Computer Science and Information Systems, University of Hong Kong, 2004. [OMG08] OMG. Common object request broker architecture (corba) specification. Informe Técnico rev 3.1, Object Management Group, 2008. On-line: <http://www.omg.org/technology/documents/corba_ spec_catalog.htm>. [PLL+ 04] T. Paila, M. Luby, R. Lehtonen, Vincent Roca, y Robert Walsh. FLUTE file delivery over unidirectional transport. RFC 3926, Internet Engineering Task Force, October 2004. On-line: <http://www.rfc-editor.org/rfc/ rfc3926.txt>. [PYU] pyunit. On-line: <http://www.python.org/doc/current/library/ unittest.html> [ene 2010]. [Riv92] R. Rivest. The MD5 Message-Digest algorithm. RFC 1321, Internet Engineering Task Force, April 1992. On-line: <http://www.rfc-editor.org/ rfc/rfc1321.txt>. [SBC+ 99] S. Shepler, C. Beame, B. Callaghan, M. Eisler, D. Noveck, D. Robinson, y R. Thurlow. NFS version 4 protocol. RFC 3530, Internet Engineering Task Force, December 1999. On-line: <http://www.ietf.org/ internet-drafts/draft-ietf-nfsv4-03-00.txt>. [SFB] Bart De Schuymer, Nick Fedchik, y Grzegorz Borowiak. ebtables. On-line: <http://ebtables.sourceforge.net/> [may 2010]. BIBLIOGRAFÍA 123 [SHWW08] Changhua Sunand, Le He, Qingbo Wang, y Ruth Willenborg. Simplifying service deployment with virtual appliances. En Services Computing, 2008. SCC ’08. IEEE International Conference on, volume 2, pages 265 –272, july 2008. doi:10.1109/SCC.2008.53. [SMS04] Richard Stallman, Rolan McGrath, y Paul D. Smith. GNU/Make A Program for Directed Compilation. GNU Press, Junio 2004. [Sol92] K. Sollins. The TFTP protocol (revision 2). RFC 1350, Internet Engineering Task Force, July 1992. On-line: <http://www.rfc-editor.org/ rfc/rfc1350.txt>. [Som04] Ian Sommerville. Ingenierı́a del Software. Addison Wesley, séptima edición, May 2004. On-line: <http://www.worldcat.org/isbn/ 0321210263>. [Sta03] Richard M. Stallman. Using GCC: The GNU Compiler Collection. Free Software Foundation, 2003. [Sta07] Richard Stallman. GNU Emacs Manual, decimosexta edición, 2007. [Sun] SunMicrosystems. Virtualbox. On-line: <http://www.virtualbox.org/ wiki/VirtualBox> [ene 2010]. [VMA] David Villa, Cleto Martı́n, y Óscar Aceña. Atheist. On-line: <http: //savannah.nongnu.org/projects/atheist> [may 2010]. [WZ04] C. P. Wright y E. Zadok. Unionfs: Bringing File Systems Together. Linux Journal, 2004(128):24–29, December 2004. [ZZ07] Yaoxue Zhang y Yuezhi Zhou. 4vp: A novel meta os approach for streaming programs in ubiquitous computing. Advanced Information Networking and Applications, International Conference on, 0:394–403, 2007. doi:http: //doi.ieeecomputersociety.org/10.1109/AINA.2007.6.