- Руками(?) в пакетах мы переносим всё из
/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(...) игнорируются.