De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


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)
Error: No site found with the domain 's2.dicas-l.com.br' (Learn more)