Спустя девять лет с момента прошлого выпуска анонсирован релиз системы управления пакетами GNU Stow 2.1.0. Код Stow написан на языке Perl и распространяется в рамках лицензии GPLv2. Ключевым отличием новой версии является полное обновление кодовой базы и реализация более жестких механизмов для предотвращения конфликтов.
В Stow используется простой и не похожий на обычные пакетные менеджеры подход к размещению пакетов: все связанные с программой компоненты устанавливаются штатными средствами в отдельной поддиректории в каталоге /usr/local/stow (например, /usr/local/stow/emacs). Задача Stow при этом сводится к расстановке символических ссылок в иерархии системных каталогов /usr/local и выполнению контроля за их целостностью. При удалении пакета производится удаление всех связанных символических ссылок. Внутри директории /usr/local/stow файлы установленных программ всегда остаются неизменными, Stow оперирует только символическими ссылками.
Ключевыми недостатком Stow, который мешал использованию Stow в современных дистрибутивах, является отсутствие каких-либо средств для контроля зависимостей и оценки конфликтов между пакетами. В версии Stow 2.1.0 этот недостаток частично преодолён за счёт добавления улучшенных средств для разрешения конфликтов. В новой версии выполнение операций откладывается до завершения оценки всех потенциальных конфликтов. Вначале производится анализ установочных образов и создание плана действий, которые необходимо выполнить для установки. Если в процессе анализа выявлены конфликты с уже установленными программами, то процесс инсталляции блокируется до устранения проблем (ранее анализ конфликтов производился по мере установки и если конфликт обнаруживался, то пользователь сталкивался с частично установленным пакетом). Разделение фаз анализа и установки также позволило минимизировать время модификации системных каталогов во время обновления пакета (меняются только изменившиеся символические ссылки, без их пересоздания).
Другим интересным новшеством стало добавление механизма для управления программами и файлами конфигурации (~/.bashrc,
~/.zshrc и т.п.) в домашней директории пользователя. Для обеспечения данной возможности создан специальный плагин для утилиты mr, предназначенной для осуществления операций с набором репозиториев (subversion, git, mercurial, bzr и т.п.).
Из других изменений, представленных в Stow 2.1.0 можно отметить:
- Проведён значительный рефакторинг кода, разделение кода на два Perl-модуля Stow и Stow::Util;
- Добавлена поддержка списков игнорирования;
- Добавлена поддержка установки и распространения Stow в стиле CPAN с использованием модуля Module::Build;
- Создан тестовый набор и функция тестирования работоспособности Stow перед установкой - "make test";
- Удалена поддержка опции '--conflicts', информация о конфликтах теперь выводится всегда;
- При выполнении операций сворачивания и разворачивания (folding/unfolding) может совместно использоваться несколько stow-директорий;
- Унифицированы и более информативны сообщения о конфликтах и отладочные данные;
- Используемые по умолчанию опции командной строки могут быть определены через файлы конфигурации '.stowrc' и '~/.stowrc';
- Возможность определения нескольких действий в рамках одного вызова Stow (например, для обновления ранее установленного пакета emacs-21.3 нужно выполнить: "stow -D emacs-21.3 -S emacs-21.4a", что приведёт к замене emacs-21.3 на emacs-21.4a);
- Новые опции (при перечислении в командной строке могут указываться несколько раз): "--ignore=regex", "--defer=regex", "--override=regex". Например, "--defer='man' --defer='info'" или "--override='man|info'" указывает на то, что пересечение документации не будет рассматриваться как конфликт;
- Возможность создавать дополнительные stow-директории для типового контента, например, perl-модули размещаются в "/usr/local/stow/perl-5.8.8-extras", а не в общей директории "/usr/local/stow";
- Увеличена скорость проверки некорректных симлинков во время выполнения операции удаления пакетов за счет организации поверхностного поиска без глубокого уровня вложенности;
- Добавлена утилита chkstow для проверки целостности заданной директории.
|