Usrmerge: различия между версиями
(→FAQ) |
|||
Строка 42: | Строка 42: | ||
Пока что рекомендуем прочитать другие материалы с описанием преимуществ решения<ref>[https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge/]</ref> | Пока что рекомендуем прочитать другие материалы с описанием преимуществ решения<ref>[https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge/]</ref> | ||
'''Q: ''' | '''Q: А что, если {{path|/usr}} на отдельном разделе по каким-то причинам не примонтируется?''' | ||
A: | A: Тогда система не сможет загрузиться, как и в случае, если {{path|/}} по каким-то причинам не примонтируется. | ||
'''Q: А раньше можно было, пользуясь программами в {{path|/}}, починить {{path|/usr}}''' | |||
A: Несколько тезисов: | |||
* В-нулевых, для того, чтобы возникла такая ситуация, систему должны были установить так, чтобы {{path|/usr}} был отдельным от {{path|/}}, т. е. такая разметка преследовала какую-либо цель. | |||
* Во-первых, для этого нужно, чтобы {{path|/}} '''смог''' смонтироваться, а {{path|/usr}} '''не смог'''. | |||
* Во-вторых, всё ещё нет критерия, по которому ту или иную программу и её зависимости можно либо отнести к "системе спасения", либо исключить из неё и сослать в {{path|/usr}}. | |||
* В-третьих, нет ни одного задокументированного случая, где таким образом спасли какую-либо типичную GNU/Linux-систему, включая Альт, есть только [https://www.ecb.torontomu.ca/~elf/hack/recovery.html предание] из 1986 года, касавшееся non-Linux тех времён на компьютере тех времён. Рецептов такого восстановления в практически важных случаях, отчуждаемых от компетенций разработчиков ALT и умелых сисадминов, нет тем более. Следовательно, можно заключить, что цитируемая возможность восстановить {{path|/usr}} из {{path|/}} в общем случае является призрачной, и её стоит причислить к религиозным верованиям. | |||
== User-visible impact == | == User-visible impact == |
Версия от 17:45, 3 июля 2023
Usrmerge
Точный план действий сейчас вырабатывается, и его подробности могут измениться.
Введение
Исторически[1] в UNIX System V, а позже и в мейнстримных линукс-дистрибутивах разделяли каталоги /bin и /usr/bin, /lib$suff и /usr/lib$suff, и т. п., давая возможность разместить /usr на отдельной файловой системе от /, содержащего все эти подкаталоги.
Позже, с увеличением средних размеров устройств хранения в машинах, сторонники разделения придумали другие обоснования (например, возможность из окружения в /{bin,sbin,libX,...}/ починить немонтирующуюся /usr, но на сегодняшний день непонятно, какой набор утилит и нужных им so/иных файлов стоит признать частью "системы спасения", которая должна быть доступна без /usr, а какой — нет, ибо сами утилиты приобретают универсальный вид и широкие границы применимости. С развитием механизмов initramfs и живых загрузочных/установочных носителей, а также практикой "раздела восстановления" на локальном хранилище машины среди настольных дистрибутивов этот аргумент теряет всякий смысл.
Чем сохранять бесцельно дублирующие друг друга два класса мест для одних и тех же файлов, лучше оставить один из них, а другой устранить:
- либо переложить /usr/{bin,sbin,lib,libx32,lib64,libexec,local,share,src,...} в корень,
- либо поместить аналоги этих каталогов из / в /usr.
Из двух вариантов, входящих в рамки FHS[2], второй лучше хотя бы тем, что уменьшает к-во top-level каталогов, куда упаковывается постоянное содержимое пакетов, до одного. Сейчас среди FHS-совместимых дистрибутивов это типичный подход.
Rationale
- Один каталог (пусть с не очень удачным именем /usr) как объект манипуляции и как общий носитель фиксированного содержимого пакетов удобнее россыпи каталогов, полный список которых даже невозможно построить. Появляется даже смысл рассматривать его в виде отдельной точки монтирования, которую можно держать общей на многих машинах под общим управлением.
- Один каталог легче снапшотить, по нему легче гонять find, ...
- Упаковка всего пакетного содержимого в /usr открывает дорогу к техническому /, который не находится на устройстве хранения и содержит только пустые каталоги-точки-монтирования.
- Возникает осмысленное разделение между /usr, /var и /etc: первый каталог несёт в себе постоянное содержимое пакетов, не предназначенное к ручной модификации (не через пакетную систему или доставку образа), а другие два уже исторически применяются для переменного хранимого состояния и общесистемных конфигов.
- Сборочным скриптам и прочим интеграционным программным компонентам не нужно будет перебирать каталоги, в которых находится программа.
- Начиная с версии 255, планируемой к выпуску в течение 2023, systemd прекратит поддержку split-usr и unmerged-usr.
Proposed changes
Необходимые действия можно разбить на две стадии.
Стадия 1
- Научить rpm автогенерировать симлинки на файлы /{bin,lib,...}/x => /usr/{bin,lib,...}/x, если в пакете указано Provides: /bin/x и упакован файл /usr/bin/x, и т. д.
- Переназначить макросы: %_bindir, %_libdir и другие.
- На стадии brp завершаться с ошибкой, если обнаружены разные файлы в /bin/x и /usr/bin/x, ...
Стадия 2
Каждая инсталляция перейдёт к ней независимо, как только все пакеты в этой инсталляции будут содержать свои файлы под /usr.
- В пакет filesystem добавить filetrigger, который заменяет /bin с симлинками на симлинк /bin -> /usr/bin.
Incompatibilities
FAQ
Здесь будет секция ЧаВО, как только эти вопросы начнут часто задавать. :) Пока что рекомендуем прочитать другие материалы с описанием преимуществ решения[3]
Q: А что, если /usr на отдельном разделе по каким-то причинам не примонтируется?
A: Тогда система не сможет загрузиться, как и в случае, если / по каким-то причинам не примонтируется.
Q: А раньше можно было, пользуясь программами в /, починить /usr
A: Несколько тезисов:
- В-нулевых, для того, чтобы возникла такая ситуация, систему должны были установить так, чтобы /usr был отдельным от /, т. е. такая разметка преследовала какую-либо цель.
- Во-первых, для этого нужно, чтобы / смог смонтироваться, а /usr не смог.
- Во-вторых, всё ещё нет критерия, по которому ту или иную программу и её зависимости можно либо отнести к "системе спасения", либо исключить из неё и сослать в /usr.
- В-третьих, нет ни одного задокументированного случая, где таким образом спасли какую-либо типичную GNU/Linux-систему, включая Альт, есть только предание из 1986 года, касавшееся non-Linux тех времён на компьютере тех времён. Рецептов такого восстановления в практически важных случаях, отчуждаемых от компетенций разработчиков ALT и умелых сисадминов, нет тем более. Следовательно, можно заключить, что цитируемая возможность восстановить /usr из / в общем случае является призрачной, и её стоит причислить к религиозным верованиям.
User-visible impact
Меньше каталогов верхнего уровня в корне, кроме симлинков.