1. Criação de Containeres do Singularity¶
- 1. Criação de Containeres do Singularity
- 1.1 Requerimentos
- 1.2 Download de um container Linux (imagem) para customização
- 1.3 Montagem da imagem para customização
- 1.4 Customização do sistema
- 1.5 Atualização dos repositórios
- 1.6 Configuração do Locale
- 1.7 Instalação de pacotes
- 1.8 Alias para o "gmake"
- 1.9 Configuração da "libmpi.so"
- 1.10 Comando "locate"
- 1.11 Instalação de versões do "gcc", "g++" e "gfortran"
- 1.12 Instalação e configuração do JAVA
- 1.13 Limpeza do sistema
- 1.14 Criação da imagem SIF - Singularity Image File
- 1.15 Para utilizar a imagem SIF
Neste documento apresenta-se um passo-a-passo para a criação de uma imagem baseada no Linux encapsulada em um container do Singularity. O Singularity é um sistema de container adequado para uso em sistema de High Performance Computing (HPC) utilizando o mesmo namespace (uma característica instrínseca dos sistemas Linux) da máquina em que o container será utilizando. Os passos apresentados neste documento foram testados em uma máquina Linux com Ubuntu 18.04. A imagem singularity criada ao final, foi apenas testada neste ambiente.
1.1 Requerimentos¶
- Sistema operacional Linux com o Singularity instalado (programa em linha de comando).
É possível realizar os mesmos procedimentos nos sistemas operacionais Mac OS e Windows, mas será necessária a instalação dos programa VirtualBox (para a emulação de um sistema operacional Linux) e Vagrant (para o gerenciamento do sistema operacional Linux emulado, pela linha de comando). É necessário permissões de root na máquina local para a instalação de pacotes e configurações do sistema.
1.2 Download de um container Linux (imagem) para customização¶
Com o Singularity instalado em máquina local, utilize o comando a seguir para baixar um container singularity do Ubuntu 18.04 que servirá de base para a imagem customizada final do sistema.
$ sudo singularity build --sandbox ubuntu_remix_vx.y.z/ library://ubuntu:18.04
Nota: substitua o sufixo "_vx.y.z" por algo mais adequado.
1.3 Montagem da imagem para customização¶
Antes de customizar a imagem baixada, ie., instalação de pacotes para uso com o container, será necessário montar a imagem com permissões de escrita. Este procedimento executa a imagem do container com permissões para a instalação de pacotes. Para isso, utilize o comando a seguir:
$ sudo singularity exec --writable ubuntu_remix_vx.y.z /bin/bash
1.4 Customização do sistema¶
Antes de instalar novos pacotes, será necessário realizar uma atualização do sistema e instalar o editor de texto "vim" (ou "nano") para a edição do arquivo com os repositórios dos pacotes do sistema.
apt update apt upgrade apt install vim
1.5 Atualização dos repositórios¶
Para editar o arquivo com os repositórios dos pacotes do sistema, edite o arquivo "/etc/apt/sources.list":
vim /etc/apt/sources.list
Este arquivo deverá conter os seguintes repositórios:
deb http://archive.ubuntu.com/ubuntu/ bionic main restricted deb http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted deb http://archive.ubuntu.com/ubuntu/ bionic universe deb http://archive.ubuntu.com/ubuntu/ bionic-updates universe deb http://archive.ubuntu.com/ubuntu/ bionic multiverse deb http://archive.ubuntu.com/ubuntu/ bionic-updates multiverse deb http://archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse deb http://security.ubuntu.com/ubuntu bionic-security main restricted deb http://security.ubuntu.com/ubuntu bionic-security universe deb http://security.ubuntu.com/ubuntu bionic-security multiverse
Salve e feche o arquivo e, em seguida, realize uma atualização completa do sistema:
apt update apt upgrade
1.6 Configuração do Locale¶
A configuração do "locale" do sistema é importante, pois arquivo editados e salvos a partir da execução do container, devem ser comuns a todos os usuários da imagem. Para configurar o "locale" do sistema, siga os procedimentos a seguir:
apt install locales locales-all dpkg-reconfigure locales
Nota: escolha os "locales" 378 e 158 (ie., "378. pt_BR.UTF-8 UTF-8", "158. en_US.UTF-8 UTF-8")
Nota: o padrão será "158" ou "en_US.UTF-8"
A seguir, execute:
locale-gen
1.7 Instalação de pacotes¶
Neste ponto, a instalação de pacotes pode variar de acordo com as necessidades. Nesta etapa devem ser instalados todos os pacotes necessários para a compilação e execução de programas seriais e paralelos, além de compiladores em diferentes versões. Os pacotes listados a seguir devem suprir parte das necessidades básicas para um container de desenvolvimentos e execução do modelo atmosférico BAM. Para a instalação destes pacotes, utilize os comando a seguir:
apt install vim-gtk apt install build-essential apt install gdb gdb-doc apt install cgdb apt install cmake ksh csh tcsh automake autoconf autoconf-archive libtool pkg-config apt install libssl-dev uuid-dev libgpgme11-dev squashfs-tools apt install xauth apt install rsync wget apt install zip p7zip-full apt install subversion git apt install gcc-4.8 g++-4.8 gfortran-4.8 apt install gcc-5 g++-5 gfortran-5 apt install gcc-6 g++-6 gfortran-6 apt install gcc-7 g++-7 gfortran-7 apt install gcc-8 g++-8 gfortran-8 apt install mpich libstdc++-6-dev manpages-dev apt install libhugetlbfs0 libhugetlbfs-dev libblas3 liblapack3 apt install grads cdo nco ncl-ncarg gnuplot apt install python3 curl htop ncftp sshfs sshpass apt install netcdf-bin libnetcdf-c++4 libnetcdf-dev libnetcdf13 libnetcdff6 ncview apt install gdal-bin gdal-data apt install cdftools hdf5-tools apt install glueviz libjpeg8 imagemagick apt install pandoc apt install doxygen apt install emacs apt install mpi-default-dev
1.8 Alias para o "gmake"¶
Para criar um alias para o comando "gmake", utilize o comando a seguir:
cd /usr/bin ln -s make gmake
1.9 Configuração da "libmpi.so"¶
Nota: esta etapa é necessárias apenas se algum módulo MPI foi instalado (eg., pacote "mpich").
Crie um link simbólico para o arquivo "libmpi_mpifh.so":
cd /usr/lib/x86_64-linux-gnu ln -s libmpi_mpifh.so.20 libmpi_mpifh.so.40
Em seguida, execute:
ldconfig
- Referência: https://stackoverflow.com/questions/14769599/mpi-error-loading-shared-libraries/40817816
1.10 Comando "locate"¶
Para indexar arquivos do sistema, será necessário instalar o pacote "mlocate". Este pacote fornece o comando "locate", útil para a localização de bibliotecas no sistema operacional. Para instalar o pacote "mlocate" e en seguida indexar os arquivos do sistema, execute os comandos a seguir:
apt install mlocate updatedb
1.11 Instalação de versões do "gcc", "g++" e "gfortran"¶
Para instalar diferentes versões dos compiladores GNU (C, C++ e Fortran), utilize os comando a seguir. Com o comando "update-alternatives", são criados os links simbólicos para as versões instaladas. Ao final, são definidos quais são as versões padrão a serem utilizadas no sistema.
Nota: não foi testada a alteração da versão padrão destes compiladores depois que a imagem do container foi finalizada.
update-alternatives --remove-all gcc update-alternatives --remove-all g++ update-alternatives --remove-all gfortran update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 10 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 20 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 30 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 40 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 50 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 10 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 20 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 30 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 40 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 50 update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-4.8 10 update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-5 20 update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-6 30 update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-7 40 update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-8 50 update-alternatives --config gcc update-alternatives --config g++ update-alternatives --config gfortran
1.12 Instalação e configuração do JAVA¶
Para instalar e configurar o compilador e o interpretador da linguagem Java, utilize os comandos a seguir:
apt install default-jre default-jdk openjdk-8-jdk update-alternatives --config java
Escolha: "/usr/lib/jvm/java-11-openjdk-amd64/bin/java"
update-alternatives --config javac
Escolha: "/usr/lib/jvm/java-11-openjdk-amd64/bin/javac"
- Referência: https://www.digitalocean.com/community/tutorials/como-instalar-o-java-com-apt-no-ubuntu-18-04-pt
1.13 Limpeza do sistema¶
Com todos os pacotes instalados e configurados, antes de fechar a imagem do container, realize uma limpeza do sistema apagando os arquivos em cache que foram baixados do repositório. Além disso, uma última atualização do sistema será realizada. Para isso, execute os comandos a seguir:
apt update apt upgrade apt autoremove apt autoclean apt clean
Ao final, saia do prompt do Singularity para a criação da imagem final do container:
exit
1.14 Criação da imagem SIF - Singularity Image File¶
Nesta etapa é realizada a criação da imagem do container Singularity. Observe que não se está mais utilizando o prompt do Singularity e esse procedimento é realizado na máquina local. Para criar a imagem do container, execute o comando a seguir:
sudo singularity build ubuntu_remix_vx.y.z.sif ubuntu_remix_vx.y.z
Ao final desta etapa, será criado um arquivo SIF que contém todo o ambiente de compilação e execução criado de acordo com a instalação dos pacotes e configurações realizados nas etapas anteriores.
1.15 Para utilizar a imagem SIF¶
Para utilizar a imagem SIF do container criado, utilize o comando a seguir:
singularity shell -e image_file.sif
Nota: a utilização da imagem, seja do ambiente de compilação e do seu tempo de execução, não estão contemplados neste documento.