Title: Нововведение: пакеты app-alternatives Author: Sam James Translator: Alexey Sokolov Posted: 2022-12-27 Revision: 1 News-Item-Format: 2.0 В Gentoo будет новая категория пакетов под названием «app-alternatives» для случаев, когда пользователь хочет поменять символическую ссылку, указывающую на распространённую программу, доступную в разных пакетах. По традиции, для этого использовался eselect, но, хотя eselect всё ещё бывает нужен, он плохо подходит для случаев, таких как /bin/awk и /bin/sh, потому что а) он предотвращает использование корневой файловой системы в режиме только для чтения, б) что более важно с точки зрения системы управления пакетами, он зависит от осиротевших символических ссылок: ни один пакет не владеет файлами /bin/awk, /bin/sh и т. д. Это не надёжно, и в некоторых случаях может привести к мёртвой ссылке или даже к отсутствию ссылки [0]. При использовании для этих целей пакетного менеджера вместо ручной конфигурации вовне система станет более надёжной. Начальный список пакетов с поддержкой альтернатив такой: - app-alternatives/awk - app-alternatives/bzip2 - app-alternatives/bc - app-alternatives/cpio - app-alternatives/gzip - app-alternatives/lex - app-alternatives/sh - app-alternatives/tar - app-alternatives/yacc Стабилизация этих пакетов, а также пакетов, от них зависящих, происходит в баге 886017 [1]. ## Требования для обновления Настройка по умолчанию для систем Gentoo выглядит так: FEATURES="protect-owned"; это работает подобно FEATURES="collision-protect", но позволяет конфликты между файлами-сиротами. В этом случае возникнет одноразовый конфликт, когда пакет из app-alternatives/ присвоит себе символическую ссылку, которая до этого не принадлежала ни одному пакету. Похожая ситуация была при миграции на libxcrypt, когда обновления ломались у пользователей при использовании старой, более агрессивной настройки FEATURES="collision-protect". Мы рекомендуем вам обновить свою конфигурацию, и убрать «collision-protect» из FEATURES. Вместо этого можете явно включить «protect-owned» или не указывать там ничего, потому что это итак настройка по умолчанию. Также можно выключить «collision-protect» временно, только для этого обновления, и затем включить обратно. ВНИМАНИЕ: Пользователи, использующие collision-protect, должны убрать его из FEATURES в /etc/portage/make.conf, либо установить FEATURES="-collision-protect". collision-protect находит конфликты между файлами, даже когда ни один пакет не владеет файлом. ## Миграция Для миграции достаточно убрать eselect-awk и eselect-sh из world, и обновить систему как обычно: 1. # emerge --deselect app-eselect/eselect-awk app-eselect/eselect-sh 2. # emerge --depclean app-eselect/eselect-awk app-eselect/eselect-sh 3. # emerge --sync 4. # emerge -a -uvDU @world (или похожая команда для стандартного обновления системы) ## Конфигурация Если вы не заинтересованны в использовании разных реализаций перечисленных выше инструментов, эту секцию можно пропустить. По умолчанию никакая конфигурация не требуется, но вы можете настраивать поведение пакетов из app-alternatives/, как раньше использовали для этого, например, eselect-sh и eselect-awk. Теперь для этого будет использоваться /etc/portage/package.use. Пожалуйста, просмотрите USE-флаги, доступные для различных пакетов из app-alternatives, таких как app-alternatives/sh, и настройте их на ваше усмотрение. Например, чтобы /bin/gzip был предоставлен пакетом app-arch/pigz, это автоматически параллелизует gzip, нужен такой текст в /etc/portage/package.use: ``` # https://wiki.gentoo.org/wiki/Gzip#Parallelization # Пусть /bin/gzip будет ссылкой на pigz для ускорения сжатия app-alternatives/gzip -reference pigz ``` ## Дополнительные материалы Больше технических подробностей описано в вики [2]. [0] https://wiki.gentoo.org/wiki/Project:Base/Alternatives#Why.3F [1] https://bugs.gentoo.org/886017 [2] https://wiki.gentoo.org/wiki/Project:Base/Alternatives