Hola,
hace poco logramos portar el software GET_HOMOLOGUES a la plataforma bioconda (ver artículo), el canal especializado en bioinformática del gestor de paquetes conda. En esta entrada voy a resumir cómo lo hicimos por si sirve de ayuda a otros programadores desprevenidos. La documentación en línea que he consultado por el camino incluye estos enlaces, me pareció que estaba todo mejor documentado en conda, el proyecto principal, que en bioconda:
- Para enterarte de cómo es el proceso de creación de una receta de principio a fin: https://bioconda.github.io/contributor/workflow.html
- La guía con los pasos esenciales: https://bioconda.github.io/contributor/guidelines.html
- Cómo formatear tu fichero meta.yaml: https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html
- Solamente si necesitas variables de ambiente: https://docs.conda.io/projects/conda-build/en/latest/user-guide/environment-variables.html
Los pasos que seguí fueron:
- Análisis de dependencias del software GET_HOMOLOGUES. Como ya lo teníamos en GitHub, Travis y Dockerhub lo teníamos bastante claro, pero aun así tuvimos que explorar las recetas ya existentes en bioconda (https://github.com/bioconda/bioconda-recipes/tree/master/recipes) para aprovechar los binarios disponibles. Tras esta tarea descubrimos que las recetas blast, hmmer, diamond, mcl y phylip resolvían casi todas nuestras necesidades, pero faltaba el software COGtriangles, necesario para ejecutar $ get_homologues.pl -G
- Por recomendación de mi colega Borja Latorre, y siguiendo la filosofía de bioconda, lo lógico era crear una nueva receta independiente para esta dependencia, así que eso decidimos hacer.
- Hacer un fork del repositorio bioconda (https://github.com/bioconda/bioconda-recipes) con tu usuario de GitHub
- Clonar localmente el nuevo repositorio
- $ cd bioconda-recipes/recipes
- Crea una nueva rama como se explica en la documentación y selecciónala
- $ mkdir cogtriangles
- Los siguientes pasos consistieron en preparar la receta cogtriangles, lo cual implicó editar dos ficheros de texto con ayuda de la documentación y cotilleando otras recetas en el repositorio:
- meta.yaml : define los metadatos de la receta, incluyendo el origen del código fuente, su suma SHA256 para comprobar que la descarga es correcta, su licencia y publicaciones, las dependencias para construir esta receta (las recetas make, el compilador de C++ y perl) y, lo más importante, la batería de tests para comprobar que la receta funciona.
- build.sh : define cómo se construye el paquete, colocando los binarios compilados de COGtriangles en la carpeta $PREFIX/bin
- $ cd .. && mkdir get_homologues && cd get_homologues
- Edito dos ficheros similares para esta segunda receta:
- meta.yaml :
- en la sección build puedes declarar variables de ambiente
- verás que la sección requirements->run importa la receta cogtriangles
- los tests se ejecutan invocando directamente dos comandos sin indicar un camino/path
- build.sh : copia a la carpeta $PREFIX/bin los scripts y dependencias de GET_HOMOLOGUES para que los tests funcionen tanto en local como en modo mulled test (mira el punto 11).
- $ cd ../..
- Tras instalar miniconda y Docker deberás configurar los canales de bioconda (gracias José María! Si ya tenías conda instalado igual no los necesitáis; una alternativa a conda es mamba)
- $ conda config --add channels defaults
- $ conda config --add channels bioconda
- $ conda config --add channels conda-forge
- $ conda create -c base -n bioconda
- $ conda install -c bioconda bioconda-utils
- Ahora prueba las nuevas recetas en tu máquina local
- $ conda activate bioconda
- $ bioconda-utils lint --packages get_homologues
- $ bioconda-utils build --docker --mulled-test --packages get_homologues
- Si hay problemas de permisos de escritura en Docker puedes resolverlos con
- $ sudo chmod 666 /var/run/docker.sock
- Si te aparence un error como FileNotFoundError: [Errno 2] No such file or directory: 'miniconda3/envs/bioconda/conda-bld/conda_build_config_0_-e_conda_build_config.yaml' puedes resolverlo con (gracias José María!):
- $ mkdir ~/miniconda3/envs/bioconda/conda-bld
- Si los paquetes de las respectivas recetas se construyen correctamente es momento de
- Registrar todos los cambios con git add, git commit, git push
- Abrir un Pull Request (PR) y documentar tus recetas. Puedes ver por ejemplo el nuestro en https://github.com/bioconda/bioconda-recipes/pull/34595 . Cada cambio que hagas, por ejemplo por nuevos git push, lanza de manera automática los tests que definiste en tus metadatos.
- Escribir en https://gitter.im/bioconda/lobby para pedir por favor que alguien revise el PR, y si todo va bien, una tu rama al repositorio oficial
- Prueba a instalar el paquete desde la nube, posiblemente desde otra máquina, con algo como
- $ conda activate bioconda
- $ conda create -n get_homologues -c conda-forge -c bioconda get_homologues
- $ conda activate get_homologues
Espero que esta explicación os ayude,
un saludo,
Bruno