ReadySet: что ломалось
Разбор двух проблем мастера первой настройки: мастер возвращался при каждом входе, а выбранные в нём приложения не ставились. Как работает мастер для пользователя, написано на странице ReadySet.
Мастер возвращался при каждом входе#
Симптом. После каждого входа мастер просил создать пользователя. Пользователей в системе было несколько.
Как ReadySet выбирает режим. Режим зависит от того, состоит ли процесс в группе ready-set (проверка getgroups): в группе значит режим initial-setup (создание пользователя), иначе existing-user (настройка существующего). Группы ready-set и gnome-initial-setup служебные: у них права polkit без пароля, они принадлежат временному пользователю мастера. Менеджер входа добавляет _greeter в ready-set.
Причина. Всех обычных пользователей (UID от 1000) добавляли в группу gnome-initial-setup, потому что шаги мастера ещё не поддерживали режим existing-user. В этом режиме ReadySet показывает только шаги, которые реализуют ReadySet.ExistingUser, и финализатор existing-user не вызывает apply(): он только записывает выполненные шаги в GSettings org.altlinux.ReadySet. Группа выдавала всем права initial-setup и ломала режим мастера.
Исправление.
- Все шаги реализуют
ExistingUserи применяют настройки вBasePage.try_continue(continue_from, затемapply.begin). Шаги AMD, голосового ввода и источников приложений применяются один раз за запуск. - Шаг «Добро пожаловать» ставит метку
readyset-first-run-doneпри нажатии «Далее». - В образе скрипт
ensure-groups.shснимает пользователей с группready-setиgnome-initial-setup, а группы_greeterзадаётgrpconf.d/atomic-niri-plafon.yml(группы оборудования для обычных пользователей уже в базе APM). - Тесты:
tests/unit/test_readyset_groups.py, проверка первой загрузки в контейнере,tests/test_existing_user.pyв плагинах,tests/test_first_run.vala.
Правило. Не добавляйте пользователей в группы ready-set и gnome-initial-setup. Новый шаг мастера обязан реализовать ExistingUser и применять настройки в try_continue.
Группы настраиваются конфигом /usr/share/apm/grpconf.d/*.yml и командой apm s i sync-groups (при загрузке её выполняет sync-users.service).
Выбранные в мастере приложения не ставились#
Симптом (issue #30). В мастере выбрали приложения, а после установки не поставилось ни одно из выбранных. Базовый набор поставился.
Причина. Remote flathub был только в системной области (его добавляет flatpak-setup на шаге «Источники»). А выбранные приложения каталог ставит через Booster в пользовательскую область: flatpak --user install flathub <id>. Без пользовательского remote команда отвечает: «Для 'flathub' не найдено удалённых ссылок». Базовый набор ставит системный flatpak-setup, поэтому он и проходил. На машине автора пользовательский remote был создан вручную, поэтому не воспроизводилось.
Первое исправление оказалось недостаточным. Добавили flatpak --user remote-add. На актуальной сборке ALT (gnupg2 2.5.20, libostree 2026.4, flatpak 1.18.4) эта команда падала у любого пользователя: «GPG: fchown: Операция не позволена». Под strace проходила, то есть дело в гонке или окружении, причину в gnupg не искали.
Рабочий путь (проверен реальной установкой на чистой виртуальной машине):
flatpak --user remote-add --if-not-exists --no-gpg-verify flathub <адрес системного remote>;- скопировать
/var/lib/flatpak/repo/flathub.trustedkeys.gpgв<пользователь>/repo/; flatpak --user remote-modifyс включением проверки подписи.
Зеркало берётся из системного remote. Исправление в Booster (FlatpakService.ensure_user_flathub) и в readyset_apply_flatpaks.py. Побочная находка: в тестовом файле run_all() стоял посреди файла, и часть тестов в CI не выполнялась. Теперь он в конце.
Установка из Live ISO на машине с малым объёмом памяти#
Симптом. При установке из live-образа на компьютере с 8 ГБ ОЗУ установка падала: «no space left on device». С 16 ГБ проходила.
Причина. В live-сессии верхний слой оверлея это tmpfs, его размер равен половине ОЗУ. Служба flatpak-setup скачивала в него 3,4 ГБ Flatpak-приложений, и для слоя образа в /var/tmp не оставалось места.
Исправление. В рецепте live-сессии (10-live-session.yml) маскируются flatpak-setup и lactd. Проверка на виртуальной машине с 8 ГБ: Flatpak в live занимает 20 КБ, занято 1,2 ГБ ОЗУ, установка проходит.
Метод проверки без GPU. Графическое приложение в QEMU без ускорения запускается через cage с рендерером pixman (systemd-run с PAMName=login), снимки экрана берутся через screendump монитора QEMU, клики через input-send-event.
Замечание. Live ISO всегда встраивает образ latest, даже в варианте nightly. Чтобы проверить другой образ, после установки переключитесь на нужный канал командой bootc switch.
См. также: находки по образу, установка.