====== Instalación de software científico ====== ===== Gestor de paquetes EasyBuild ===== En nuestro HPC la instalación de software científico se realiza a través de la herramienta EasyBuild una plataforma modular para compilar e instalar software, escrito en Python. **Que no requiere privilegios de administración para su uso, por lo que los mimos usuarios pueden hacer uso de EasyBuild para disponer de sus aplicaciones en el HPC y a través de la herramienta Lmd desplegarlas en su ambiente de trabajo y usarlas.** Inicialmente dio soporte a pocos paquetes de software, pero rápidamente se convirtió en una parte muy importante de las herramientas de soporte de usuario utilizadas por el equipo del HPC UGent. Hoy en día, EasyBuild 3.4.0 tiene soporte para 1331 paquetes de software (incluyedo toolchain y librerias) y está siendo desarrollado y mejorado continuamente. EasyBuild permite limitar la cantidad de tiempo y esfuerzo necesarios para instalar y actualizar paquetes de software para el usuario final, solamente invirtiendo el tiempo necesario una sola vez para poner en práctica el procedimiento de instalación en un easyblock o quizás tan solo crear un archivo easyconfig. Compilaciones subsecuentes de nuevas versiones de un paquete de software o compilaciones que usan diferentes parámetros por lo general se puede obtener con muy poco o ningún esfuerzo, ahorrando así mucho de tiempo y mano de obra. En abril de 2012, después de más de tres años de desarrollo interno en UGent, se lanzó EasyBuild en GitHub2 como software libre bajo la licencia GPLv2, siendo considerada la versión 1.0 la primera versión pública, estable y robusta de esta plataforma, también EasyBuild en su versión más reciente está disponible en (PyPi)3. Actualmente está publicada la versión 3.4.0 de EasyBuild. EasyBuild solamente tiene dos dependencias directas: Python (Python 2.6 o superior) y módulos de entornos (Tcl/C) o Lmod). EasyBuild confía fuertemente en los **módulos de entorno**, por lo que el paquete de software para gestionar módulos de entorno es un requisito previo importante. EasyBuild **genera automáticamente** los módulos de entorno para cada paquete de software que se instala, aliviando de este modo que el usuario tenga que crear manualmente archivos de módulos apropiados. Por otra parte, se basa en el conjunto de módulos de entornos disponibles para la obtención de información acerca de los paquetes de software instalados y para resolver las dependencias. Mediante la generación de un módulo de entorno para cada instalación completa, EasyBuild permite mantener diferentes versiones sin que se afecten entre sí. Además de proporcionar acceso al paquete de instalación para los usuarios finales, estos módulos también ayudan a EasyBuild a localizar el software para instalaciones posteriores de otros paquetes de software dependientes de este, es decir, para resolver las dependencias. ===== Configuración de EasyBuild ===== EasyBuild pude ser configurado a través de tres vías diferentes o incluso usando una combinación apropiada de estas. Estas vías son: * Usando eb (comando principal de EasyBuild) con los argumentos correspondientes para las configuraciones. * Configurando directamente los valores de las variables de entornos ($EASYBUILD_...). * Proporcionando uno o más archivos de configuración. ==== Vía archivo de configuración ==== Por defecto EasyBuild usa el archivo de configuración si existe en las siguientes rutas: * ///etc/easybuild.d/*.cfg//, archivo de configuración global para EasyBuild * //$HOME/.config/easybuild/config.cfg//, archivo de configuración propio para cada usuario. Si un usuario define el archivo de configuración en su $HOME pues este tendrá preferencia sobre el archivo global. El archivo de configuración de EasyBuild sigue el formato de configuración por defecto de Python a través del módulo [[https://docs.python.org/2/library/configparser.html|configparser]]. Este se organiza en secciones, el nombre de una sección para una opción de configuración particular se indica en la salida del comando //eb --help//. Algunos ejemplos de secciones son: //MAIN, basic, config, informative, override, regtest, software, unittest,// etc. Las secciones se indican mediante la especificación del nombre de la sección entre corchetes, por ejemplo, //[base]//. Los ajustes de configuración se especifican siguiendo el formato //key = value// o //key:value//, sin usar comillas para los valores en forma de cadenas (string). Para las opciones de configuración booleanas, los valores que se evalúan como //True// (por ejemplo, true, 1,...) equivalen a habilitar la configuración. Las líneas de comentarios comienzan con un carácter # (al igual que en el código Python). Esto sería un ejemplo de un archivo de configuración de EasyBuild y mas detalles puede encontrar en el [[http://easybuild.readthedocs.io|manual oficial]] en la parte de [[http://easybuild.readthedocs.io/en/latest/Configuration.html#configuration-file-s|configuracion a través de archivos]]. {{:hpc:ebconfig.jpg?400|}} ==== Vía variables de entorno ==== Todas las opciones de configuración que se listan con el comando //eb --help// también se pueden especificar mediante variables de entorno con el prefijo //EASYBUILD_//. Los valores de configuración especificados de esta manera siempre tienen prioridad sobre las opciones correspondientes que se especifican en un archivo de configuración. Por ejemplo, para habilitar el registro de depuración utilizando una variable de entorno: **//$ export EASYBUILD_DEBUG=1//** Si cualquier variable de entorno con el prefijo //$EASYBUILD_// que se definen no corresponden a una opción de configuración conocida, EasyBuild informará un mensaje de error y finalizará su ejecución. En el [[http://easybuild.readthedocs.io|manual oficial]] de EasyBuild existen otros ejemplos del [[http://easybuild.readthedocs.io/en/latest/Configuration.html#environment-variables|uso de variables de entorno para configurar EasyBuild]]. ==== Vía argumentos en la línea de comando ==== El tipo de configuración con la más alta prioridad son los argumentos de la línea de comandos //eb//, que prevalecen sobre los valores especificados a través de variables de entorno o en archivos de configuración. Para algunas opciones de configuración, ambos argumentos de línea de comandos largos y cortos están disponibles (ver //eb --help//); las opciones largas indican cómo el valor de configuración debe especificarse en un archivo de configuración o mediante una variable de entorno (//$EASYBUILD_//). Para las opciones de configuración booleanas, ambas variantes //--