Translate

jueves, 17 de junio de 2021

Configuración multiusuario de Anaconda y Conda en Linux CentOS 7

Conda es un gestor de paquetes , aplicaciones y ambientes:

conda -h  |grep 'conda is'
conda is a tool for managing and deploying applications, environments and packages.

Anaconda es una distribución de python que incluye conda

Miniconda es un instalador que también usa conda para paquetes no necesariamente de python


Todo esto está bien si no se tiene una distribución instalada científica de Linux. La idea es que los usuarios de sistemas operativos diferentes a Linux puedan usar fácilmente los paquetes y distribuciones que no están normalmente presentes en sus sistemas. Incluso los usuarios principiantes de Linux tienen estas opciones para 'instalar' fácilmente paquetes y ambientes de trabajo.

 

Ahora bien, si ya se cuenta con una distribución de Linux multiusuario y sus correspondientes paquetes y gestores de paquetes, surgen varias preguntas:

  • ¿Cómo aprovechar las ventajas de estos programas de gestión de paquetes en un ambiente multiusuario de Linux? 
  • ¿Cómo hacer para que no se repitan innecesariamente los programas, ambientes, etc., por cada uno de los usuarios del sistema operativo?
  • ¿Cómo hacer para que no se esté bajando para cada usuario su ambiente de trabajo y este ambiente pueda ser compartido entre varios usuarios?

Para esto, existe cierta documentación, pero no está muy claro que es lo que hay que hacer en concreto. 

Justamente es por ello que se hizo este documento.

 

Como usuario root:

1. Crear un usuario de administración de instalación de ambientes de conda y ponerle una contraseña:

useradd conda

passwd conda

 

Esta cuenta será la que instalará los ambientes, paquetes y programas necesarios que serán compartidos todos los usuarios. Cada ambiente podrá ser empleado por cualquiera de los usuarios del sistema como se describe más adelante

2. Crear un directorio donde se guardarán los paquetes y ambientes. Hacer que el directorio tenga como usuario y grupo propietarios el de usuario administrador de paquetes ( en este caso 'conda'):

mkdir /opt/conda

chown conda: /opt/conda


3. Generar un script de entrada al sistema para que le ponga a los usuarios, las variables de ubicación de los ambientes y paquetes compartidos.

cd /etc/profile.d

echo<<EOF_script.sh> conda-env.sh

export CONDA_PKGS_DIRS="/opt/conda/pkgs","/home/$USER/.conda/pkgs"
export CONDA_ENVS_DIRS="/opt/conda/envs"

EOF_script

 

4. Entrar ahora con el usuario adminstrador de paquetes ( en nuestro ejemplo 'conda' ) para crear e instalar un ambiente con sus paquetes necesarios

 su - conda

5. Verificar los ambientes de trabajo disponibles. Por ejemplo:

conda env list

# conda environments:
#
conda                    /opt/conda/envs/conda
datascience              /opt/conda/envs
base                     /usr

6. Crear un archivo de creación de ambiente e instalación de paquetes:

echo<<EOF_bioenv> bio.yml

name: bio
channels:
  - bioconda
  - conda-forge
dependencies:
 - vsnp
 - freebayes
 - openpyxl

EOF_bioenv


7. Instalar ambiente y paquetes a partir del archivo de configuración/instalación yml ( Nota: Este paso puede durar mucho tiempo):

conda env create -f bio.yml


8. Verificar nuevo ambiente instalado:

conda env list
# conda environments:
#
bio                      /opt/conda/envs/bio
conda                    /opt/conda/envs/conda
datascience              /opt/conda/envs/datascience
base                  *  /usr

Como se puede ver, los paquetes en este caso están instalados en /opt/conda. Podemos verificar el usuario y grupos propietarios de los paquetes. Por ejemplo:

ls -ald /opt/conda/*
drwxr-xr-x.   5 conda conda    77 Jun 14 21:56 envs
drwxr-xr-x. 317 conda conda 32768 Jun 14 22:11 pkgs


9. Activar el ambiente instalado con:

[conda@science install]$ conda activate bio
(bio) [conda@science install]$

10. Una vez instalado el ambiente es posible instalar mostrar cuales paquetes han sido instalados en este. Si ya está activo el ambiente se puede poner:

(bio) $ conda list
# packages in environment at /opt/conda/envs/bio:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                 conda_forge    conda-forge
_openmp_mutex             4.5                       1_gnu    conda-forge
_r-mutex                  1.0.1               anacondar_1    conda-forge
abyss                     2.3.1                hd403d74_0    bioconda
alsa-lib                  1.2.3                h516909a_0    conda- 

( ... se quitaron muchas lineas)
zlib                      1.2.11            h516909a_1010    conda-forge
zstd                      1.5.0                ha95c52a_0    conda-forge

 
O si se prefiere de otro ambiente ( por ejemplo 'datascience'):

conda list -n datascience

 

11.Los usuarios que van a usar estos ambientes compartidos se tendrán que agregar al mismo grupo que el usuario de administración de paquetes.  De esta manera los usuarios podrán leer estos archivos. Por ejemplo, si el grupo del administrador de paquetes es 'conda', el usuario se agregará a este grupo. Supongamos que el usuario es 'jperez, entonces se pondrá (como usuario root):

# id jperez
uid=1008(jperez) gid=1002(investigadores) groups=1002(investigadores)

# usermod -a -G conda jperez 

# id jperez
uid=1008(jperez) gid=1002(investigadores) groups=1002(investigadores),1007(conda)


12. Ahora el usuario entrará a su cuenta para que se ejecute el script de inicialización de variables de ambiente de conda ( que se creó en el punto 3) y podrá activar este ambiente y paquetes compartido. Por ejemplo:

$ whoami
jperez

$ conda env list
# conda environments:
#
bio                      /opt/conda/envs/bio
conda                    /opt/conda/envs/conda
datascience              /opt/conda/envs/datascience
base                  *  /usr
 

$ conda activate bio

 (bio) $


Algunos comandos del gestor conda:

1) Ver enviroments (ambientes) con:


conda env list

o

conda info --envs


2) Crear un nuevo enviroment con:

conda create --name myenv


3) Crear un nuevo enviroment myenv con ubicación en /opt/conda/pancho/envs/myenv y paquetes AAA BBB CCC:

conda create --name myenv

conda create --prefix  /opt/conda/pancho/envs/myenv AAA BBB CCC


Crear enviroment con confirmación explícita:

conda create -y -n bio


4) Activar un enviroment:

conda activate myenv

 

5) Desactivar enviromente con:

conda deactivate

 

6) Instalar nuevos paquetes en el ambiente activado:

conda install paquete1 paquete2

 

7) Borrar un enviroment:

conda remove --name myenv --all


8) Copiar enviroment para generar archivo de instalación ( y poder compartirlo posteriormente ) con:

conda env export > environment.yml


9) Importar el enviroment con:

conda env create -f environment.yml


Algunas referencias

  1. https://bioconda.github.io/contributor/faqs.html#conda-anaconda-minconda 
  2. https://bioconda.github.io/user/install.html#set-up-channels
  3. https://medium.com/@pjptech/installing-anaconda-for-multiple-users-650b2a6666c6
  4. https://docs.anaconda.com/anaconda/install/multi-user/
  5. https://docs.conda.io/projects/conda/en/latest/user-guide/configuration/admin-multi-user-install.html
  6. https://stackoverflow.com/questions/27263620/how-to-install-anaconda-python-for-all-users
  7. https://bioconda.github.io/contributor/faqs.html#recipe-vs-package
  8. https://projects.ncsu.edu/hpc/Software/Apps.php?app=Conda
  9. https://bioconda.github.io/user/install.html#install-conda