Projeto

Geral

Perfil

1. Criação de Containeres do Singularity

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

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"

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.