LINUX.ORG.RU

Управление файлами конфигурации при помощи GNU Stow

 ,


4

1

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/

Ссылки

Stow manual



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 6)

Очередная нанотехнология, которая делает из линукса бсд.

sbu_shpigun
()

Когда-то хотел упорядочить свои конфиги и по-модному держать dotfiles на гитхабе, заюзал такую штуку https://github.com/anishathalye/dotbot

Потом понял, что это нафиг не нужно, и поддерживать актуальность достаточно геморно

overmind88 ★★★★★
()
Ответ на: комментарий от t184256

Ну вообще-то Nix и NixOS были задолго до Stow. Это home-manager появился относительно недавно, но он и сейчас не в составе никса. :)

SeTSeR
()
Ответ на: комментарий от mrjaggers

Так как он заменяет и недоПМ из прошлого века, и недосистемы управления конфигурациями, и этот вот Stow, то +1-3=-2

t184256 ★★★★★
()
Ответ на: комментарий от kastro

Норм инструмент для любителей заката солнца вручную

Установка программ с помощью САБЖ – это, конечно, чушь, а вот управление конфигами – вполне себе. Это как раз автоматизация. Как доставить нужные конфиги на другую систему?

Im_not_a_robot ★★★★★
()
Ответ на: комментарий от SeTSeR
$ head /usr/bin/stow
#!/usr/bin/perl

# GNU Stow - manage farms of symbolic links
# Copyright (C) 1993, 1994, 1995, 1996 by Bob Glickstein
# Copyright (C) 2000, 2001 Guillaume Morin
# Copyright (C) 2007 Kahlil Hodgson
# Copyright (C) 2011 Adam Spiers
#
# This file is part of GNU Stow.
#

Думаю вопрос о том, что было задолго до чего, можно считать закрытым.

rupert ★★★★★
()
Ответ на: комментарий от overmind88

Использую rcm: https://github.com/thoughtbot/rcm

В статье стоило бы сравнить функциональность различных подобных штук.

rcm просто пользоваться и он достаточно гибок. Например, поддерживает различные конфиги для различных машин. При этом он не требует изучения сложных мануалов, начать пользоваться им можно за 5 минут, и дальше сложность особо не растёт.

emorozov
()
Ответ на: комментарий от token_polyak

Тогда где это ещё использовать, современные системы сборки вроде и так дают разруливать пути и файлы, по крайней мере CMake, да и Meson вроде тоже.

Dr64h ★★★
()
Ответ на: комментарий от Dr64h

GNU Stow is a symlink farm manager which takes distinct packages of software and/or data located in separate directories on the filesystem, and makes them appear to be installed in the same place. For example, /usr/local/bin could contain symlinks to files within /usr/local/stow/emacs/bin, /usr/local/stow/perl/bin etc., and likewise recursively for any other subdirectories such as …/share, …/man, and so on.

This is particularly useful for keeping track of system-wide and per-user installations of software built from source, but can also facilitate a more controlled approach to management of configuration files in the user’s home directory, especially when coupled with version control systems.

dataman ★★★★★
()
Ответ на: комментарий от dataman

Я так понимаю весь его прикол в том, что он как-то мудрёно расставляет ссылки? Просто ссылки можно и через системы сборки проставлять.

Dr64h ★★★
()
Последнее исправление: Dr64h (всего исправлений: 1)
Ответ на: комментарий от Dr64h

Ну да, наверное его можно назвать менеджером симлинков.

Но XStow лучше, ссылка была выше.

dataman ★★★★★
()
Последнее исправление: dataman (всего исправлений: 1)

Штука весьма удобная, но где гарантия, что эту штуку не выкинут из дистриба? Я стремаюсь такие штуки использовать. Потому как постоянно что-то переделывать надо. Лучше сделать две три функции, которые будут дёргаться при установке\удалении пакета, в котором будет удаление\создание какого-то симлинка, в том числе. Зато это не будет не от чего зависеть и не будет ломаться

serg002 ★★★
()
Ответ на: комментарий от dataman

Звучит как часть того, что сейчас уже действительно делает Nix. Или Guix, тот сейчас такая же часть GNU.

SeTSeR
()
Ответ на: комментарий от t184256

Пытался разобраться с вашим никсом, после прочтения инструкции по установке понял что мне учить haskell, чтоб поставить линукс не надо поэтому всякие никсы и гуиксы идут в лес.

den-jc
() автор топика
Ответ на: комментарий от den-jc

Nix не использует Haskell, но посыл понятен. Страдай так.

t184256 ★★★★★
()
Ответ на: комментарий от serg002

эта штука всего лишь враппер для упрощения ручного ссылкоделания. один раз отработала и всё, на выходе тебе ссылки. ты разве не сможешь сам потом разобраться с файлами?

sprutos ★★★
()
1 июня 2023 г.

В статье не написано главного: что вообще делает stow? Что происходит при выполнении этой команды с указанными опциями? Вижу только общие слова и мантры «делай так».

Xintrea ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.