Skip to content

Instantly share code, notes, and snippets.

@legionus
Last active October 16, 2022 12:29
Show Gist options
  • Save legionus/f18b98d1ca4ca777a6cbeb02b4bd75e8 to your computer and use it in GitHub Desktop.
Save legionus/f18b98d1ca4ca777a6cbeb02b4bd75e8 to your computer and use it in GitHub Desktop.
  • Руками(?) в пакетах мы переносим всё из /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(...) игнорируются.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment