4.3 RPP using Branch and Cut Algorithm
4.3.1 An ILP Formulation to Solve the RPP
En esta sección, se discute brevemente el procedimiento de instalación paso a paso que sigue EasyBuild, ver Figura 2.3. La mayor parte de las etapas se pueden adaptar a un (grupo de) paquete(s) de software en particular proporcionando un easyblock personalizado que sea una sub-clase de la clase genérica EasyBlock o de uno de los easyblocks existentes.
Figura 2.3 Etapas del procedimiento de instalación en EasyBuild [37].
La Figura 2.3 es explicativa por sí misma: el procedimiento de instalación paso a paso consiste en leer el archivo easyconfig, obtener los archivos fuentes, comprobar si todo está listo para iniciar la compilación (módulos de dependencias se cargan, el directorio de compilación está presente, etc. ), desempaquetar las fuentes, aplicar los parches, preparar para la compilación mediante la preparación del toolchain, configurar y ejecutar el proceso de compilación, ejecutar el conjunto de pruebas al software (si lo hay), instalar el software, añadir extensiones si se especifica, realizar una comprobación de validez, limpiar los archivos temporales o directorios, y termina con la generación de un módulo de entorno. Si cualquier usuario definió casos de pruebas que son especificados en el archivo easyconfig, estos se ejecutan después de completar el proceso de instalación. Si cualquiera de estos pasos falla, EasyBuild reporta información relevante acerca del error en el archivo de registro de instalación (*.log), y lanza un EasyBuildError que se traduce en una terminación del procedimiento de instalación.
Una descripción más detallada de cada paso, se encuentra en la documentación oficial de EasyBuild7.
Si no se especifica easyblock a través del parámetro easyblock en el archivo easyconfig y si EasyBuild es incapaz de localizar un easyblock adecuado basado en el nombre del paquete de software, entonces este usa el easyblock ConfigureMake por defecto. Este easyblock implementa el procedimiento de instalación GNU configure, make, make install.
Si por alguna razón, EasyBuild es incapaz de localizar un archivo fuente que se lista en el easyconfig, él intentará descargarlo desde las URLs que se especifican en el parámetro
source_urls. Cuando ello no sea así, el procedimiento de instalación se termina y el mensaje correspondiente se escribe en el registro de la instalación.
Durante la etapa de desempaquetado, EasyBuild determina el comando para desempaquetar las fuentes a través de la extensión del nombre del archivo fuente. Del mismo modo, cuando los parches se aplican en el siguiente paso, el nivel de patch se determina automáticamente, a menos que se indique en el easyconfig.
Si el paquete de software no proporciona una manera de mover los archivos creadas a la ubicación de instalación de destino, EasyBuild permite la compilación dentro de la ubicación de la instalación. Esto puede ser fácilmente especificado en el constructor de la clase easyblock, mediante el establecimiento de la variable build_in_install_dir en True.
Después de que el software ha sido instalado, se realiza una comprobación de validez. Esta comprobación comprende asegurarse de que una lista predefinida de los archivos y directorios (no vacío) está disponible en el directorio de instalación. Esta verificación tiene como objetivo captar los casos en que la instalación falla en devolver un código de salida distinto de cero cuando se termina antes de tiempo, lo que provoca EasyBuild asuma erróneamente que todo está bien. Por ejemplo, se ha visto que algunos procedimientos de instalación se ejecutan hasta su finalización sin llegar a producir cualquiera de los binarios esperados o bibliotecas en el directorio de instalación de destino.
De forma predeterminada, la comprobación de validez se asegura de que los subdirectorios
bin y lib de la ubicación de la instalación de destino no estén vacíos. La comprobación de validez personalizada puede ser activada mediante la especificación de una lista de archivos y directorios en el parámetro sanity_check_paths en el easyconfig o mediante la adición de una comprobación de validez predeterminada en el easyblock. Si cualquiera de estos archivos o directorios no se puede encontrar, EasyBuild asume que el procedimiento de instalación ha al menos parcialmente fallado.
Después de un procedimiento de instalación exitoso, se crea un módulo de entorno de acuerdo al paquete de software instalado. Esto permite configurar fácilmente el entorno de sesión de Shell para ejecutar posteriormente el software instalado. Por lo general, esto implica el ajuste de algunas variables de entorno del sistema estándar, tales como PATH para binarios,
LD_LIBRARY_PATH para las bibliotecas que se requiere en tiempo de ejecución, etc. EasyBuild también define un par de variables de entorno personalizadas en cada módulo de entorno que genera. Por ejemplo, las variables de entorno EBROOTWRF y EBVERSIONWRF
se establecen en el módulo de entorno WRF (un paquete de software disponible en EasyBuild). Estas variables son útiles tanto para EasyBuild resolver las dependencias como para los usuarios finales cargar el módulo. Esto les permite determinar la ruta de instalación del software, por ejemplo, para acceder a los ejemplos, archivos de cabecera o bibliotecas que se instalaron. El módulo de entorno generado también incluye la documentación proporcionada por los parámetros homepage y description definidos en el archivo easyconfig.
Por último, se consideran los casos de prueba suministrados por el usuario - éstos se especifican en el parámetro tests en el archivo easyconfig. Mientras que un conjunto de pruebas proporcionado por el paquete de software está destinado principalmente para probar la exactitud (de ciertos aspectos) del software, los casos de prueba del usuario tienen un propósito diferente. Su objetivo es poner a prueba el paquete de software instalado, ya que sería usado por un usuario final o por EasyBuild en las siguientes ejecuciones de instalación de paquetes dependientes. Sin embargo, estas pruebas también se pueden usar como puntos de referencia para evaluar el rendimiento, la exactitud y la precisión del software instalado.