[devel] [p11-release-mgmt] usrmerge action proposal

Arseny Maslennikov arseny на altlinux.org
Вт Июл 4 16:11:37 MSK 2023


On Tue, Jul 04, 2023 at 04:09:40PM +0300, Arseny Maslennikov wrote:
> On Thu, Jun 22, 2023 at 02:35:37PM +0300, Arseny Maslennikov wrote:
> > Ждём ваших конструктивных ответов и встречных вопросов.
> 
> Одним из самых трудоёмких изменений, если не самым, станет usrmerge.
> В следующем письме я предложу предварительный план действий.

Предварительный план действий, выработанный с учётом реалий нашей
пакетной системы, выглядит так:
1) Определить, что слиянию с аналогами внутри /usr подлежат:

  /bin
  /lib
  /lib64
  /libx32
  /sbin

Надеюсь, я никого не забыл.

2) Тем или иным образом научить rpm создавать симлинк вида

  /bin/x -> ../usr/bin/x

..., если в пакете существует /usr/bin/x и Provides: /bin/x.
Аналогично для всех каталогов из списка 1.
Таким образом, на переходном этапе будет не нужно указывать в %files
пакетов все эти симлинки, чтобы потом их убирать, и пакеты продолжат
удовлетворять зависимостям на такие файлы.

Важно, чтобы сначала удалялся старый путь, как обычно при установке
пакета, а симлинк возникал после этой фазы.
2.1) Бекпортировать поддержку в p10.

3) Подготовить пакет filesystem версии 3: поместить в нём файлтриггер,
который проверяет, не состоят ли каталоги из списка 1 целиком из
симлинков внутрь /usr, и превращает такой каталог с симлинками в симлинк
на каталог.
Сценарий файлтриггера должен будет давать предельно ясную информацию и
диагностические сообщения на стандартные потоки. Нужно будет либо
положиться на static coreutils, либо очень осторожно обращаться с
обычными и dynamic linker.

4) Этот пункт, видимо, потребует содействия мейнтейнеров.
Заменить макросы, использующие старые каталоги (%_udevrulesdir,
%_tmpfilesdir и другие), и пересобрать с ними пакеты, что-либо
помещающие в эти каталоги.
Приближённое число затрагиваемых бинарных пакетов:

  % grep -E '^/(bin|lib[^/]*|sbin)/[a-z0-9_-]+' contents-index | 
    grep -vE '^/lib/(systemd|udev|sysusers.d|modules[^/]*|modprobe.d|security|tmpfiles.d)' | # exclude known places
    cut -f2 -d$'\t' | grep -v '^/' | # exclude path provides
    sort | uniq | wc -l
  528

Оценка дана по x86_64 + noarch. Исходных, конечно, будет меньше.

При обновлении на эти пакеты будет действовать правило 2, поэтому их
содержимое будет доступно.

Некоторые пакеты, например, vim-common, сейчас упаковывают разные
файловые объекты в /bin и /usr/bin; другие пакеты ставят файлы прямо
в %buildroot/bin. Их потребуется исправить руками. (Справедливости ради,
многие из них и так стоит обновить)

5) Этот пункт вступает в действие на каждой машине индивидуально при
обновлении её пакетов.
Файлтриггер из пункта 3 обнаруживает, что можно ввести симлинки, и
делает это, завершая процесс usrmerge на данной системе.

----
На текущий момент непонятно:
— есть ли не обозначенные выше пакеты, требующие пристального внимания;
— нужен ли особый подход к системам, применяющим overlayfs вблизи
охваченных путей /* и /usr/*.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : signature.asc
Тип     : application/pgp-signature
Размер  : 833 байтов
Описание: отсутствует
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20230704/de942ee7/attachment-0001.bin>


Подробная информация о списке рассылки Devel