Usrmerge/HowToTest
Введение
В прошлом веке, на заре линуксостроения, в системах на базе Linux сложилась ситуация, где часть системных файлов, распространяемых в пакетах и не изменяющихся при естественной работе системы, была упакована под /usr/{bin,sbin,lib,lib64,...}, а другая под /{bin,sbin,lib,lib64,...}. Например, /usr/bin/gedit упакован под /usr, программа /sbin/ip для настройки сетевой подсистемы Linux — вне /usr, а программа из того же пакета /usr/sbin/ss — снова внутри. 🤷 Какого-либо чёткого критерия, определяющего, должна ли программа лежать вне или внутри каталога /usr, не существовало; мейнтейнеры принимали решение произвольно. Позднее для сохранения такого произвольного разделения некоторые подводили гипотетические обоснования, не подкреплённые практикой и пользой для администратора, и практика устоялась. Более подробно об этом рассказано на отдельной странице: введение, FAQ.
Никакой пользы в сохранении этого разделения нет (хотя некоторые участники Team высказывали иное мнение, возражения которому изложены на той же странице). С точки зрения как разработчика и мейнтейнера, так и квалифицированного администратора, это разделение имеет смысл убрать, чтобы упростить иерархию системных файлов и исключить возможные внутренние несовместимости, и помещать все неизменяемые файлы в пакетах под /usr. Но, чтобы избавиться от этого технического долга, нужно много сил; подготовка Sisyphus к изменению заняла на момент написания текста более 8 человекомесяцев. По этой причине операцию откладывали, пока могли.
Сейчас, в апреле 2024 года, мы ведём активную подготовку к выпуску одиннадцатой платформы Альт. В течение цикла поддержки репозитория p11 мы планируем, в частности, обновлять пакет systemd, который начиная с версии 255 не поддерживает упаковку, описанную в предыдущем абзаце. Поэтому до выхода p11 нам нужно не только ликвидировать эти дублирующие друг друга пути в Sisyphus, но и организовать аккуратный переезд всех уже установленных систем.
Используемый в системах Альт пакетный менеджер rpm в силу недостатков его реализации сам не справится, и cp -a тоже. В репозиторий выложена специальная программа, которая максимально бережно переносит на место все системные файлы, которые нужно, и заменяет каталоги /{bin,sbin,lib,lib64,...} на ссылки внутрь /usr. Но возможные ошибки в алгоритме переноса способны привести к трудновосстановимой порче программ, библиотек и прочих файлов в системе, поэтому перед тем, как выложить в Сизиф, желательно её протестировать на максимально широком круге инсталляций.
Нас интересуют любые системы на базе Sisyphus, а особенно те, что на базе серверных редакций (где много пакетов с файлами вне /usr), и долгоживущие системы с нестандартным набором пакетов (в отличие от свежеустановленных).
Как помочь тестированию
- Иметь на руках установленную систему на Сизифе. Обновление с других репозиториев мы собираемся тестировать позднее.
- Можно, конечно, и систему на p10 таким образом попробовать обновить до Сизифа, но на сегодня (12 апреля 2024) это отлажено гораздо хуже.
- Рекомендуем воспользоваться средством резервного копирования, например, timeshift, и начать с подготовки снимка текущего состояния системы. Если что-то пойдёт не так, можно будет без потери данных вернуться к снимку.
- С привилегиями суперпользователя дать следующие команды (рекомендуем скопировать и вставить в терминал):
apt-get remove vim-common apt-get update && apt-get install usrmerge-hier-convert (set -x; apt-repo; rpm -qa; apt-repo test 344990) >/tmp/3install.log 2>&1
Удалять vim-common приходится из-за известной баги altbug:49541, которая мешает протестировать миграцию. Если вы полагаетесь в работе на vim, не беда: vim-minimal остаётся, другие текстовые редакторы, в том числе neovim, никак не затронуты. Если vim-common у вас уже отсутствует, ничего удалять не требуется. Начиная с 17 апреля 2024 vim-common не конфликтует с vim-minimal. Если вы при тестировании устанавливаете filesystem версии 3 на более ранней ревизии сизифа, по-прежнему потребуется удалить vim-common.
- Прислать получившийся файл /tmp/3install.log на почту тому, кто будет это читать, делать выводы и отлаживать процедуру. :)
После этого, если миграция прошла успешно и файл не заканчивается сообщением об ошибке, попробовать получившуюся систему на прочность: сможет ли она успешно перезагрузиться? запускаются ли программы (в уже запущенных шеллах надо дать команду hash -r)? корректно ли работают make-initrd, update-kernel? Вообще проверьте всё, что придёт в голову и касается перемещённых файлов.
Всем, кто откликнется, заранее большое спасибо!