Vous êtes sur la page 1sur 9

Instalando e integrando Lmod para gerenciamento de mdulos

Felipe Adriano da Silva Gonalves

Sumrio
1 Configurao e instalao do Lmod
1.1 Instalando lua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Instalando o Lmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Configurando e testando o Lmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3
3
3
3

2 Exemplos
2.1 Criando
2.2 Criando
2.3 Criando
2.4 Criando

4
4
6
7
8

um
um
um
um

mdulo
mdulo
mdulo
mdulo

para
para
para
para

a
a
a
o

lib openmpi
lib szip . . .
lib zlib . . .
hdf5 . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

3 Compilando o fluids3d utilizando os mdulos instalados

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

Configurao e instalao do Lmod

Lmod um sistema de mdulos baseado em lua que fornece uma maneira mais conveniente de alterar dinamicamente as variveis de ambiente de usurio atravs de modulefiles. Isto inclui a facilidade de adicionar
ou remover diretrios para variveis, tais como, PATH e LD_LIBRARY_PATH.
A instalao do Lmod requer a instalao dos pacotes lua, alm do luafilesystem e luaposix. Para facilitar a
instalao o pacote lua j com lfs e posix pode ser baixado jundo com o Lmod no site http://sourceforge.
net/projects/lmod/files/.
Para este tutorial foram baixados os pacotes Lmod-6.0.1.tar.bz2 e
lua-5.1.4.5.tar.gz.

1.1

Instalando lua

recomendado baixar os pacotes e deixar em uma pasta que contenha os fontes de tudo que ser instalado, no
caso deste tutorial estar dentro do /home em uma pasta chamada sw, ou ainda, /sw/.
Aps ter baixado os pacotes de instalao e copiado para /sw do lua basta descompactar o arquivo e
proceder como no listing 1 para instalao:
$
$
$
$
$
$
$
$
$
$
$

sudo mkdir -p / opt / apps / lua -5.1.4.5


cd / sw
tar xvf lua -5.1.4.5. tar . gz
cd lua -5.1.4.5
./ configure -- prefix =/ opt / apps / lua /5.1.4.5
make
make inst all
cd / opt / apps / lua
ln -s 5.1.4.5 lua
mkdir / usr / local / bin
ln -s / opt / apps / lua / lua / bin / lua / usr / local / bin

Listing 1: Comandos para descompactar e instalar o pacote lua.

1.2

Instalando o Lmod

Com os pacotes lua, luafilesystem e luaposix no sistema o Lmod pode ser instalado sem maiores problemas.
Depois de ter baixado o Lmod basta prosseguir com os comandos do listing

$
$
$
$

tar xf Lmod -6.0.1. tar . gz


cd Lmod -6.0.1
./ configure -- prefix =/ opt / apps
sudo make inst all

Listing 2: Comandos para instalar o Lmod.

1.3

Configurando e testando o Lmod

Depois que Lmod instalado preciso configur-lo para que ele esteja disponvel quando o usurio loga no sistema. Para isto preciso criar links simblicos de alguns scripts dentro do diretrio /opt/apps/lmod/lmod/init/.
Para isto proceda como no listing 3.
$ ln -s / opt / apps / lmod / lmod / init / profile / etc / profile . d / modules . sh
$ ln -s / opt / apps / lmod / lmod / init / cshrc / etc / profile . d / modules . csh

Listing 3: Comandos para criar os links simblicos.

Para testar se o Lmod est funcionando adequadamente execute os comandos do listing 4.


$ type module
module ()
{
eval $ ( $LMOD_CMD bash $ *)
}
$ echo $LMOD_CMD
/ opt / apps / lmod / lmod / libexec / lmod
$ echo $MODULEPATH
/ opt / apps / modulefiles / Linux :/ opt / apps / modulefiles / Core

Listing 4: Comandos para testar o Lmod.

Exemplos

Para validar e demonstrar as facilidades do Lmod sero mostrados alguns exemplos de uso para a biblioteca
do openmpi. Scripts mais elaborados e outras informaes podem ser obtidas no site da TACC.
De forma geral os passos para criar um mdulo que ser utilizado para compilar alguma aplicao ou mesmo
um mdulo de software so:
Baixar o cdigo fonte da lib ou binrio da aplicao.
Criar um diretrio de instalao com o nome da lib ou aplicao e um sub-diretrio com a verso dentro
de /opt/apps (e.g. /opt/apps/$(NOME)/
$(VERSO)).
Instalar ou copiar o arquivos da lib ou aplicao dentro do diretrio criado no item anterior.
Criar um diretrio dentro de /opt/apps/modulefiles/Core onde estar o script em lua responsvel por
carregar o mdulo nas variveis de ambiente do sistema. Este diretrio deve ter o nome da lib ou aplicao
instalada e o script em nome do arquivo que armazenar o script lua deve ter o nome correspondente a
verso do software instalado.
Para ficar mais claro alguns mdulos sero criados o que permitir a criao de diversos outros mdulos
para o sistema.

2.1

Criando um mdulo para a lib openmpi

Openmpi uma biblioteca de Message Passing Interface, um padro de dados para comunicao paralela,
mantido por uma associao entre universidades, pesquisadores e parceiros industriais. Esta biblioteca permite construir aplicaes constitudas por um ou mais processos que se comunicam, em um ou mais computadores, por meio de envio de mensagens entre os processos.
Primeiro preciso baixar o cdigo fonte da biblioteca, criar um diretrio com a verso do openmpi no
diretrio /opt/apps/openmpi/x.y.z (que ser gerenciado pelo Lmod) e instalar a biblioteca neste diretrio.
Os comandos para proceder com a instalao do openmpi esto no listing 5.
$ cd / sw /
$ wget http :// www . open - mpi . org / software / ompi / v1 .10/ downloads / openmpi -1.10.0.
tar . bz2
$ tar xvf openmpi -1.10.0. tar . bz2
$ cd openmpi -1.10.0
$ sudo mkdir -p / opt / apps / openmpi /1.10.0
$ ./ configure -- prefix =/ opt / apps / openmpi /1.10.0 -- with - threads -- enable shared -- enable - static -- enable - mpi - cxx -- enable - mpi - fortran -- enable - cxx
- exceptions -- enable - mpi - profile -- enable - mpi - cxx - seek -- with - hwloc
$ make - j$ ( nproc ) - pipe
$ sudo make inst all

Listing 5: Comandos para instalao do openmpi-1.10.1 em /opt/apps

Para conferir se o openmpi foi instalado corretamente basta executar um ls no diretrio /opt/apps/openmpi/1.10.1, como no listing 6.
$ ls / opt / apps / openmpi /1.10.1
bin etc include lib64 share

Listing 6: Comando para checar se o openmpi foi instalado corretamente.


Para compilar e executar uma aplicao que se use a biblioteca preciso que os diretrios de include, bin,
lib estejam nas variveis de ambiente do linux isso poderia ser feito utilizando o comando export, mas com
um script em lua o Lmod permite gerenciar as variveis de ambiente de forma facilitada, alm de permitir
listar quais mdulos esto instalados no seu sistema. Outra vantagem em caso de formatao os softwares e
bibliotecas instalados no so perdidos, basta que se faa um backup de tudo que foi instalado em /opt/apps e
em alguns casos numa mquina dual boot ser possvel utilizar tudo que foi instalado nos dois sistemas.
O scritp em lua para carregar o openmpi utilizando o Lmod est no listing 8. Ele precisa ser criado dentro do
diretrio /opt/apps/modulefiles/Core/openmpi/, onde o nome do script a verso do mdulo que foi instalado,
neste caso 1.10.0.lua. Os comandos para criar o script no local correto esto no listing 7.
$ mkdir -p / opt / apps / modulefiles / Core / openmpi
$ sudo vim / opt / apps / modulefiles / Core / openmpi /1.10.0. lua

Listing 7: Script para criar o arquivo do script lua.

help (
[[
The Open MPI Project is an open source Message Passing Interface
implementation that is developed and maintained by a consortium of
academic , research , and industry partners . Open MPI is therefore able to
combine the expertise , technologies , and resources from all across the
High Performance Computing community in order to build the best MPI
library available . Open MPI offers advantages for system and software
vendors , application developers and computer science researchers .
]])
local version = " 1.10.0 "
local base = pathJoin ( " / opt / apps / openmpi " , version )
setenv ( " OMPI_MCA_btl " , " openib , sm , self " )
setenv ( " O M P I _ M C A _ b t l _ t c p _ i f _ e x c l u d e i " , " l0 , eth0 " )
prepend_path ( " PKG_CONFIG_PATH " , pathJoin ( base , " / lib64 / pkgconfig " ) )
prepend_path ( " PATH " , pathJoin ( base , " bin " ) )
prepend_path ( " LIBRARY_PATH " , pathJoin ( base , " lib64 " ) )
prepend_path ( " LD_LIBRARY_PATH " , pathJoin ( base , " lib64 " ) )
prepend_path ( " CPATH " , pathJoin ( base , " include " ) )
prepend_path ( " C_INCLUDE_PATH " , pathJoin ( base , " include " ) )
prepend_path ( " MANPATH " , pathJoin ( base , " share / man " ) )
-- Setup Modulepath for packages built by this compiler
local mroot = os . getenv ( " MODULEPATH_ROOT " )
local mdir = pathJoin ( mroot , " Core / openmpi " , version )
prepend_path ( " MODULEPATH " , mdir )

Listing 8: lua script para carregar o mdulo openmpi.


Com o script no local correto preciso atualizar os novos mdulos que foram instalados utilizando o comando
module update, para verificar se o mdulo est disponvel utilize module load openmpi. Cheque tambm as
variveis de ambiente com o echo (e.g. echo LD_LIBRARY_PATH).

2.2

Criando um mdulo para a lib szip

szip um software de compresso, capaz de comprimir dados cientficos sem perdas e tem sido fornecido
em conjunto com os softwares HDF.
Para criar um mdulo para o szip preciso proceder como para o opempi, criando um diretrio para instalao da biblioteca dentro de /opt/apps/$(NOME)
/$(VERSO) , instalar a lib neste diretrio e posteriormente criar um script no diretrio /opt/apps/modulefiles/$(NOME)/$(VERSO.lua).
No listing 9 contm a sequncia de comandos para baixar, instalar a lib e criar o script lua no local adequado
o contedo do arquivo 2.1.lua est presente no listing 10.
$
$
$
$
$
$

wget http :// www . hdfgroup . org / ftp / lib - external / szip /2.1/ src / szip -2.1. tar . gz
tar xvf szip -2.1. tar . gz
cd szip -2.1/
sudo mkdir -p / opt / apps / szip /2.1
make - j$ ( nproc ) - pipe
sudo make inst all

$ sudo mkdir / opt / apps / modulefiles / Core / szip /


$ sudo vim / opt / apps / modulefiles / Core / szip /2.1. lua

Listing 9: Comandos para baixar e criar o mdulo para a lib szpi.

help (
[[
Szip is an implementation of the extended - Rice lossless compression algorithm
. The Consultative Committee on Space Data Systems ( CCSDS ) has adopted
the extended - Rice algorithm for international standards for space
applications .
]])
local version = " 2.1 "
local base = pathJoin ( " / opt / apps / szip " , version )
prepend_path ( " LIBRARY_PATH " , pathJoin ( base , " lib64 " ) )
prepend_path ( " LD_LIBRARY_PATH " , pathJoin ( base , " lib64 " ) )
prepend_path ( " CPATH " , pathJoin ( base , " include " ) )
-- Setup Modulepath for packages built by this compiler
local mroot = os . getenv ( " MODULEPATH_ROOT " )
local mdir = pathJoin ( mroot , " Core / szip " , version )
prepend_path ( " MODULEPATH " , mdir )

Listing 10: Script para carregar a lib szip.

2.3

Criando um mdulo para a lib zlib

zlib uma biblioteca de compresso de dados escrita por Gaily e Mark Adler como uma generalizao do
algoritmo DEFLATE usado no programa de compresso de dados gzip.
Para a lib zlib deve proceder de forma semelhante com o a szip seguindo os comandos do listing 11 e 12.
wget http :// zlib . net / zlib -1.2.8. tar . gz
tar xvf zlib -1.2.8. tar . gz
cd zlib -1.2.8/
sudo mkdir -p / opt / apps / zlib /1.2.8
./ configure -- prefix =/ opt / apps / zlib /1.2.8
make
sudo make inst all
sudo mkdir / opt / apps / modulefiles / Core / zlib
sudo vim / opt / apps / modulefiles / Core / zlib /1.2.8. lua

Listing 11: Comandos para baixar e criar o mdulo para a lib szpi.

help (
[[
zlib is compression method , an LZ77 variant called deflation , emits
compressed data as a sequence of blocks .
]])
local version = " 1.2.8 "
local base = pathJoin ( " / opt / apps / zlib " , version )
prepend_path ( " LD_LIBRARY_PATH " , pathJoin ( base , " lib " ) )
prepend_path ( " LIBRARY_PATH " , pathJoin ( base , " lib " ) )
prepend_path ( " CPATH " , pathJoin ( base , " include " ) )
prepend_path ( " C_INCLUDE_PATH " , pathJoin ( base , " include " ) )
prepend_path ( " INCLUDE " , pathJoin ( base , " include " ) )
prepend_path ( " MANPATH " , pathJoin ( base , " share / man " ) )
-- Setup Modulepath for packages built by this compiler
local mroot = os . getenv ( " MODULEPATH_ROOT " )
local mdir = pathJoin ( mroot , " Core / zlib " , version )
prepend_path ( " MODULEPATH " , mdir )

Listing 12: Script para carregar a lib zlib.

2.4

Criando um mdulo para o hdf5

hdf5 uma biblioteca com modelo de dados e formato de arquivos para armazenar e gerenciar dados. Ele
suporta uma infinidade de tipos de dados e projetado para ter uma leitura e escrita eficiente e flexvel
para dados em complexos e em grande volume.
O mdulo para o hdf5 foi deixado por ltimo propositalmente, pois para que a verso paralela seja instalada
ser preciso do openmpi e tambm das libs de compresso (szip e zlib). Portanto para instalar o hdf5 siga os
comandos do listing 13. O script lua para carregar o mdulo hdf5 no sistema encontra-se no listing 14.
wget http :// www . hdfgroup . org / ftp / HDF5 / current / src / hdf5 -1.8.15 - patch1 . tar . bz2
tar xjvf hdf5 -1.8.15 - patch1 . tar . bz2
cd hdf5 -1.8.15 - patch1 /
sudo mkdir -p / opt / apps / hdf5 /5.1.8.15
./ configure -- prefix =/ opt / apps / hdf5 /1.8.16 CC =/ opt / apps / openmpi /1.10.0/ bin /
mpicc CXX =/ opt / apps / openmpi /1.10.0/ bin / mpic ++ FC =/ opt / apps / openmpi
/1.10.0/ bin / mpif90 F77 =/ opt / apps / openmpi /1.10.0/ bin / mpif77 -- with - szlib =/
opt / apps / szip /2.1 ,/ opt / apps / szip /2.1/ lib64 -- with - zlib =/ opt / apps / zlib
/1.2.8/ include ,/ opt / apps / zlib /1.2.8/ lib FCFLAGS = - fPIC -- enable - shared -enable - static -- enable - par all el -- enable - hl -- enable - fortran -- enable strict - format - checks LDFLAGS = - L / opt / apps / szip /2.1/ lib64 LDFLAGS = - L / opt /
apps / zlib /1.2.8/ lib CFLAGS = - fpic CFLAGS = - D_L ARGE_F ILE64 _SOURC E CFLAGS = D_ FILE_OFFSET_BITS =64
make - j$ ( nproc ) - pipe
sudo make inst all

Listing 13: Comandos para baixar e criar o mdulo para as libs e executveis do hdf5.

help (
[[
HDF5 is a data model , library , and file format for storing and managing data .
It supports an unlimited variety of datatypes , and is designed for
flexible and efficient I / O and for high volume and complex data . HDF5 is
portable and is extensible , allowing applications to evolve in their use
of HDF5 . The HDF5 Technology suite includes tools and applications for
managing , manipulating , viewing , and analyzing data in the HDF5 format .
]])
local version = " 1.8.16 "
local base = pathJoin ( " / opt / apps / hdf5 " , version )
prepend_path ( " PATH " , pathJoin ( base , " bin " ) )
prepend_path ( " LD_LIBRARY_PATH " , pathJoin ( base , " lib64 " ) )
prepend_path ( " LIBRARY_PATH " , pathJoin ( base , " lib64 " ) )
prepend_path ( " CPATH " , pathJoin ( base , " include " ) )
prepend_path ( " C_INCLUDE_PATH " , pathJoin ( base , " include " ) )
prepend_path ( " INCLUDE " , pathJoin ( base , " include " ) )
-- Setup Modulepath for packages built by this compiler
local mroot = os . getenv ( " MODULEPATH_ROOT " )
local mdir = pathJoin ( mroot , " Core / hdf5 " , version )
prepend_path ( " MODULEPATH " , mdir )

Listing 14: Script para carregar o mdulo hdf5.

Compilando o fluids3d utilizando os mdulos instalados

Para listar os mdulos disponveis no sistema pode se utilizar o comando module avail. A sada deste comando
deve ser semelhante ao da figura 1.

Figura 1: Sada do comando module avail.


Neste caso j esto presentes os mdulos hdf5, openmpi, zlib e szip, que podem ser carregados utilizando o
module load. Neste caso para compilar o fluids3d ser utilizado o hdf5, openmpi e szip. Para compilar o basta
prossegui como nos comandos do listing 15.
$ module load openmpi hdf5 szip
$ cd fluids / make s /
$ make all gcc =1

Listing 15: Comandos para compilar o fluids3d utilizando o Lmod.

Vous aimerez peut-être aussi