Stow
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