GNU Stow — это менеджер символьных ссылок. Он позволяет управлять файлами конфигурации и установкой программ из исходников. При помощи Stow можно устанавливать программы из исходных кодов в обход менеджера пакетов, не боясь сломать систему. Также им удобно управлять файлами конфигурации (далее дот-файлами) в домашнем каталоге пользователя.
Управление дот-файлами
Рассмотрим применение stow на примере настроек bash, git, и emacs. Хранить наши конфиги будем в каталоге $HOME/dotfiles
, но это может быть любой каталог.
Создадим нужные нам каталоги и переместим в них файлы настроек.
mkdir -p dotfiles/{bash,git,emacs/.config/emacs
mv .bashrc dotfiles/bash/
mv .config/emacs/init.el dotfiles/emacs/.config/emacs/
mv .gitconfig dotfiles/git/
Теперь для установки наших файлов достаточно перейти в каталог dotfiles/
и выполнить команду stow -R -v -t ~ .
stow --help
покажет все возможные ключи.
-R
— удалить ссылку, если она существует, и создать новую (не удаляя файлы);
-v
— показать детали выполнения;
-t
— указать цель (~
— домашний каталог пользователя).
cd dotfiles
stow -R -v -t ~ .
LINK: bash => dotfiles/bash
LINK: git => dotfiles/git
LINK: emacs => dotfiles/emacs
Для удаления ссылок используем флаг -D
вместо -R
:
stow -D -v -t ~ .
UNLINK: bash
UNLINK: git
UNLINK: emacs
Чтоб установить выборочно, например, только bash, говорим
stow -R -v -t ~ bash
.
stow -R -v -t ~ bash
LINK: .bashrc => dotfiles/bash/.bashrc
Теперь все файлы настроек находятся в одном месте и их можно поставить под контроль версий.
Управление программами
Рассмотрим установку программ на примере Сборка Emacs в Debian 11 (bullseye).
Все делаем по инструкции до команды ./configure
. Перед командой создаем каталог куда будет установлен Emacs. Я создал myemacs
, но может быть любой.
mkdir $HOME/myemacs/
К команде ./configure
добавляем флаг --prefix=$HOME/myemacs
, должно быть так:
./configure \
--with-native-compilation \
--with-json \
--with-tree-sitter \
--with-imagemagick \
--with-xwidgets \
--without-compress-install \
--prefix=$HOME/myemacs
Дальше устанавливаем (от простого пользователя):
make --jobs=$(nproc)
make install
После этого делаем ссылки в каталог, прописанный в $PATH
командой stow от пользователя root или с командой sudo. В примере указан /usr
, но может быть любой.
stow -v -R -t /usr/ myemacs/
...
LINK: bin/emacs-30.0.50 => ../../home/lds/myemacs/bin/emacs-30.0.50
LINK: bin/emacs => ../../home/lds/myemacs/bin/emacs
LINK: libexec/emacs => ../../home/lds/myemacs/libexec/emacs
Для удаления вместо флага -R
используем -D
:
stow -v -D -t /usr/ myemacs/