summaryrefslogtreecommitdiff
path: root/metadata/news/2022-12-27-alternatives-introduction/2022-12-27-alternatives-introduction.ru.txt
blob: 25a989f712b3f5cd0825868707c1254e33964ee9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Title: Нововведение: пакеты app-alternatives
Author: Sam James <sam@gentoo.org>
Translator: Alexey Sokolov <alexey+gentoo@asokolov.org>
Posted: 2022-12-24
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