Stow

Z funus.net

GNU Stow to małe narzędzie napisane w perlu, wspomagające zarządzanie pakietami budowanego i instalowanego przez użytkownika oprogramowania.

Pomysł jest prosty. Zamiast instalować wszystko jak leci w /usr/local/{bin,lib,include,share,...} robimy tak. Tworzymy katalog /usr/local/stow, tam będziemy instalować poszczególne pakiety w osobnych katalogach, np. /usr/local/stow/gcc-4.6.1/, /usr/local/stow/boost-1.47/ itp. Następnie przy pomocy programu stow tworzymy symlinki w katalogach /usr/local/bin itp, prowadzące do miejsc, gdzie dany pakiet został zainstalowany.

Dzięki takiemu podejściu odnosimy dwie korzyści:

  • wszystko jest w /usr/local/{bin,lib,...}, nie trzeba więc definiować kilometrowych zmiennych środowiska PATH, LD_LIBRARY_PATH itp.
  • a jednocześnie wiemy, co jest skąd, bo w /usr/local/{bin,lib,...} są tylko symlinki prowadzące do /usr/local/stow/nazwa-pakietu/.

Oczywiście program stow potrafi też "odinstalować" pakiety poprzez pousuwanie symlinków.

Głównym problemem przy korzystaniu ze stowa jest to, że dany pakiet musi obsługiwać instalację w miejscu innym, niż docelowe. To znaczy, np. gcc-4.6.1 docelowo będzie w /usr/local, ale musimy je zainstalować w katalogu /usr/local/stow/gcc-4.6.1. W przypadku pakietów korzystających z frameworka buildowego autoconf/automake jest to proste:

./configure --prefix=/usr/local
make
make install DESTDIR=/usr/local/stow/pakiet-wersja
cd /usr/local/stow/pakiet-wersja
mv -vi usr/local/* .
rmdir -vp usr/local
cd ..
stow -v pakiet-wersja