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)