- Руками(?) в пакетах мы переносим всё из
/bin
, /sbin
в соответстующие /usr/bin
и /usr/sbin
и создаём Provides со старым путём.
- rpm должен сам создавать симлинк. Если есть Provides
/bin/sh
и файл /usr/bin/sh
, то создаём ссылку /bin/sh
-> ../usr/bin/sh
.
- После того как в
/bin
не останется ничего кроме ссылок на /usr/bin
, в пакете filesystem можно менять /bin
на симлинк.
- Пока пакет
filesystem
не обновился, мы находимся на стадии постепенной подготовки, замещая файлы в /bin
автоматическими
ссылкам.
- Чтобы
filesystem
заменить каталог на ссылку нам нужно удалить каталог в %pretrans
. В этом случае конфликта не должно быть. From rpm handleRemovalConflict():
...but if the conflicting item is either not on disk, or has
already been changed to the new type, we should be ok afterall.
- Если предположить, что файлтриггер будет следить за содержимым
/bin
и автоматически заменит его на ссылку в тот момент, когда там останутся только ссылки на ../usr/bin/
, и если предположить, что rpm будет генерить виртуальный provides с условным названием rpmlib(bin-is-not-dir)
, когда $root/bin нет или не является каталогом, тогда в пакете filesystem
при замене /bin
на ссылку достаточно поставить зависимость на этот условный rpmlib(bin-is-not-dir)
. Тем, кто будет обновляться с p10 на p11, придётся сделать dist-upgrade дважды, потому что первый раз filesystem
не захочет обновляться, думаю что это нормально. Потому что filesystem
просто не сможет обновиться из-за того, что rpm не провайдит этот провайд и поэтому даже не попадёт в транзакцию.
- Кажется в этом случае с apt не нужно ничего делать так как зависимости на
rpmlib(...)
игнорируются.