você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Organizando o diretório local com o GNU stow

Colaboração: Alexei Znamensky

Data de Publicação: 16 de Janeiro de 2003

Uma coisa que acontece no Linux (ou Unix) é, após compilarmos e instalarmos vários softwares no /usr/local, não sabemos mais qual arquivo pertence a qual software, o que pode ser uma chateação na hora de atualizar a versão do software, ou mesmo removê-lo simplesmente.

Para isso uma ferramenta simples e muito poderosa é o GNU stow:

http://www.gnu.ai.mit.edu/software/stow/stow.html

Com o stow, que é simplesmente um script perl, único e sem módulos externos, compilamos e instalamos(*) os softwares em algo parecido com:

   /usr/local/stow/emacs-21.2
   /usr/local/stow/libpng-1.2.4
   /usr/local/stow/mrtg-2.9.25
   /usr/local/stow/<nome do pacote, recomendamos que use a versão>

Dentro desses diretórios, teremos subdiretórios, por exemplo:

   /usr/local/stow/mrtg-2.9.25/bin
   /usr/local/stow/mrtg-2.9.25/doc
   /usr/local/stow/mrtg-2.9.25/etc
   /usr/local/stow/mrtg-2.9.25/lib
   /usr/local/stow/mrtg-2.9.25/man
   ...

Então executamos os seguintes comandos, como "root":

   # cd /usr/local/stow
   # stow -vv mrtg-2.9.25
   (o parâmetro -vv serve apenas para fazer o stow mais "verbose", o que
    irá fazer com que ele mostre uma mensagem para cada operação que ele
    for executar realmente)

ou "stow -v *", ou apenas os diretórios que você desejar. O stow irá então criar links simbólicos em /usr/local/ apontando para os equivalentes em /usr/local/stow/mrtg-2.9.25. No nosso exemplo, ele irá criar os links:

   /usr/local/bin/cfgmaker -> ../stow/mrtg-2.9.25/bin/cfgmaker
   /usr/local/bin/indexmaker -> ../stow/mrtg-2.9.25/bin/indexmaker
   /usr/local/bin/mrtg -> ../stow/mrtg-2.9.25/bin/mrtg
   /usr/local/bin/rateup -> ../stow/mrtg-2.9.25/bin/rateup
   /usr/local/doc/mrtg2 -> ../stow/mrtg-2.9.25/doc/mrtg2/
   /usr/local/lib/mrtg2 -> ../stow/mrtg-2.9.25/lib/mrtg2/
   /usr/local/share/mrtg2 -> ../stow/mrtg-2.9.25/share/mrtg2/
   ...

e assim por diante.

A grande vantagem é que todos os arquivos ficam disponíveis, através dos links, nos caminhos padronizados: /usr/local/bin, /usr/local/sbin, /usr/local/lib, /usr/local/man, o que em muitos casos elimina a necessidade de configuração de variáveis (ex: PATH, LD_LIBRARY_PATH, MANPATH, ...) de ambiente para os usuários.

O stow é espertinho, e detecta conflitos (dois ou mais arquivos que iriam gerar o mesmo link), também cria e remove diretórios para árvores compartilhadas, por exemplo, para os arquivos:

   /usr/local/stow/ezmlm-0.53/man/man1/ezmlm-list.1
   /usr/local/stow/mrtg-2.9.25/man/man1/mrtg.1

o stow cria o diretório

/usr/local/man/man1

e dentro dele cria os links apontando, cada um para o diretório do software correspondente. Automagicamente.

Para remover um programa instalado sob o stow, basta:

   # cd /usr/local/stow
   # stow -D mrtg-2.9.25 (por exemplo)
   # rm -rf ./mrtg-2.9.25

Há muitas outra brincadeiras que podem ser feitas usando o stow, como por exemplo manter várias versões do mesmo software, ou criar um mini-árvore com os seus scripts para levar de um lado para outro, mas esta dica já está comprida o bastante. Divirtam-se!!!

(*) Na maioria dos casos, quando você quiser compilar e instalar um software sob a árvore do stow, você deverá executar os comandos:

     # ./configure --prefix=/usr/local/stow/mrtg-2.9.25
     ...(passa um monte de coisas pela tela...)
     # make
     ...(idem)
     # make install
     ...(idem)


Veja a relação completa dos artigos de Alexei Znamensky