Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
M
mkimage-profiles
  • Project
    • Project
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 1
    • Merge Requests 1
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Registry
    • Registry
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Ximper Linux
  • mkimage-profiles
  • Merge Requests
  • !7

Open
Opened Feb 06, 2026 by Жора Змейкин@katze 6 of 6 tasks completed6/6 tasks
  • Report abuse
Report abuse

cleanup и LibreOffice: исправить очистку пакетов из Live при установке и удалить LibreOffice-still

Исправление выбора софта в установщике после перехода с live-installer-pkg на live-installer. Данный MR решает проблему с очисткой LIVE пакетов и удаляет LibreOffice-still, которого уже давно нет в Сизифе (если он вообще был).

BUG 18827

Что делает этот MR?

Проблема: Прежняя переменная CLEANUP_AUTO_PACKAGES работала только с LIVE_PACKAGES, но приложения для Live-образа (Telegram, LibreOffice, браузер и т.д.) указываются через LIVE_LISTS. В результате эти пакеты оставались в установленной системе, даже если пользователь снимал галочки в установщике.

Решение: Были добавлены две переменные: CLEANUP_AUTOMARK_PACKAGES и CLEANUP_AUTOMARK_LISTS. В первом указывается список пакетов (LIVE_PACKAGES), во втором список листов (LIVE_LISTS).

Что происходит в features.in/cleanup?

Этап 1 — сборка образа:

generate.mk читает файлы списков из CLEANUP_AUTOMARK_LISTS (например, etersoft/base/office/libreoffice-latest), извлекает имена пакетов и дописывает их в CLEANUP_AUTOMARK_PACKAGES в distcfg.mk. Таким образом, к моменту создания Live-образа все пакеты из LIVE_PACKAGES и LIVE_LISTS собраны в одной переменной.

Этап 2 — создание Live-образа (image-scripts.d):

89-cleanup-live-preinstall создаёт preinstall хук (pkg-preinstall.d/01-mark-live-packages-auto), который выполняется перед pkg-install. Хук вызывает apt-mark auto для всех пакетов из CLEANUP_AUTOMARK_PACKAGES. Виртуальные пакеты (например, LibreOffice) игнорируются apt-mark — это, к сожалению, баг самого apt-mark. Из-за этого бага мы должны обрабатывать отдельно и виртуальные пакеты:

90-cleanup-live-install-pkgs создаёт postinstall скрипт (postinstall.d/01-remove-pkgs), который:

  1. Читает выбранные пользователем группы из /var/lib/installer-alterator-pkg/pkg-list
  2. Резолвит выбранные пакеты в реальные имена (через rpmquery/rpmquery --whatprovides)
  3. Фильтрует из CLEANUP_AUTOMARK только виртуальные пакеты (реальные пропускаются — они уже обработаны в 89-cleanup-live-preinstall)
  4. Резолвит виртуальные в реальные имена и сравнивает с выбранными пользователем — невыбранные помечает как auto
  5. Вызывает apt-get autoremove

Используется именно apt-mark auto + autoremove, а не apt-get remove, потому что autoremove безопаснее: он удалит пакет только если от него не зависит ни один manual-пакет. При прямом apt-get remove можно случайно сломать зависимости, если пакет нужен чему-то ещё.

Итого на этапе установки:

  1. pkg-preinstall.d/01-mark-live-packages-auto — помечает реальные LIVE-пакеты как auto
  2. Установщик (installer-alterator-pkg) — помечает .base и выбранные пользователем пакеты как manual
  3. postinstall.d/00-remove-installer-pkgs.sh — удаляет installer-пакеты, вызывает autoremove (удаляются невыбранные реальные auto-пакеты)
  4. postinstall.d/01-remove-pkgs — обрабатывает виртуальные пакеты, удаляет CLEANUP_PACKAGES, финальный autoremove

Именование: Переменная названа CLEANUP_AUTOMARK_* (вместо прежней CLEANUP_AUTO_*), потому что механизм использует apt-mark auto для пометки пакетов. Название отражает суть: пакеты помечаются (mark) как автоматически установленные (auto).

Код слишком сложный!!

Этот код мог быть очень простым, если бы не наличие виртуальных пакетов. Вся трудность в том, что apt-mark не умеет работать с виртуальными пакетами — apt-mark auto LibreOffice-still говорит "can not be marked as it is not installed", хотя apt-get install LibreOffice-still работает нормально. Установщик при вызове apt-mark manual тоже передаёт виртуальные имена — и они также игнорируются.

Была и другая проблема с виртуальными пакетами. На Live стоял libreoffice (виртуальный LibreOffice). Пользователь выбирал LibreOffice-still (тоже виртуальный libreoffice). Оба резолвятся в один реальный пакет libreoffice. Но скрипт сравнивал виртуальные имена: LibreOffice-still ≠ LibreOffice → помечал libreoffice как auto → удалялся. Пришлось резолвить оба множества (automark и selected) в реальные имена перед сравнением.

В LIVE_LISTS попадают и системно важные пакеты (grub, su и прочие). Если бы мы их обрабатывали в postinstall, то они бы удалялись у нас. А так они помечаются альтератором в момент установки, поэтому apt-mark auto мы делаем в preinstall, то есть перед установкой.

Другая проблема была в том, что в postinstall срабатывает 00-remove-installer-pkgs.sh, вызывая autoremove раньше нашего 01-remove-pkgs. Это одна из причин, почему я не резолвил виртуальные пакеты в 89-cleanup-live-preinstall.

В будущем от большого пласта кода в 90-cleanup-live-install-pkgs можно будет избавиться, если:

  1. В apt-mark появится поддержка виртуальных пакетов (я завёл соответствующий баг-репорт: BZ#57789)
  2. Мы добавим какую-то проверку на наличие виртуальных пакетов в pkg.in/lists.

Это точно надёжно?

Я много тестировал, проверял и да, это должно быть надёжно. Все пакеты, которые должны быть в целевой системе, помечаются самим альтератором как manual:

  • installer-alterator-pkg/alterator-pkg/backend3/pkg-install:154: xargs apt-mark manual < "$base_tmpfile" — помечает .base как manual
  • installer-alterator-pkg/alterator-pkg/backend3/pkg-install:165: xargs apt-mark manual < "$rest_tmpfile" — помечает выбранные пользователем группы

Если что, .base формируется в features.in/metadata/lib/50-metadata.mk из:

  • Пакеты: SYSTEM_PACKAGES, COMMON_PACKAGES, THE_PACKAGES, BASE_PACKAGES
  • Содержимое списков: COMMON_LISTS, THE_LISTS, BASE_LISTS

Таким образом, альтератор помечает как manual всё, что должно остаться в системе. Наш preinstall хук (apt-mark auto) срабатывает до альтератора, а альтератор перезаписывает auto на manual для нужных пакетов.

Какие идеи были до этого?

Было предложено несколько решений проблемы:

  • lav/mkimage-profiles@fae95ee8b4bf16af3810181022fcb59735ab26f7 — данное решение отлично работало с пакетами, но не учитывало LIVE_LISTS, вследствие чего все приложения из Live оставались.
  • lav/mkimage-profiles@bf07e5127c34e768ad2245d4ff15ce5e7cbada2c — это решение не сработало, так как файл .base формируется внутри pkg-install (installer-alterator-pkg). А preinstall хук выполняется до pkg-install. Но сам по себе код выглядит довольно трудным для понимания.

Удаление LibreOffice-still

Этот пакет есть только в P11, в Сизифе его нет, и он является виртуальным с провайдом на libreoffice. Поэтому я:

  • Удалил из LIVE_LISTS, pkg.in/lists/ и pkg.in/groups
  • В установщике изменил название на «Офисный пакет LibreOffice», сделал его активным по умолчанию и удалил конфликт
  • В листе libreoffice-latest виртуальные пакеты заменил на реальные
    • LibreOffice → libreoffice
    • LibreOffice-langpack-ru → libreoffice-langpack-ru
    • LibreOffice-gtk3 → libreoffice-gtk3
    • Удалён LibreOffice-common (провайдится в libreoffice)

Тестирование

  • Отсутствие программ и пакетов, специфичных для Live, при установке системы со всеми снятыми галочками в сборке (GNOME)
  • Отсутствие программ и пакетов, специфичных для Live, при установке системы со всеми снятыми галочками в сборке (Hyprland)
  • Корректная установка программ, в том числе тех, которые присутствуют или отсутствуют в Live в сборке с GNOME
  • Корректная установка программ, в том числе тех, которые присутствуют или отсутствуют в Live в сборке с Hyprland
  • Проверка, не помечены ли как auto системно-важные пакеты в сборке с GNOME
  • Проверка, не помечены ли как auto системно-важные пакеты в сборке с Hyprland

Check out, review, and merge locally

Step 1. Fetch and check out the branch for this merge request

git fetch https://gitlab.eterfund.ru/katze/mkimage-profiles.git cleanup-automark-0.9.4
git checkout -b katze/mkimage-profiles-cleanup-automark-0.9.4 FETCH_HEAD

Step 2. Review the changes locally

Step 3. Merge the branch and fix any conflicts that come up

git checkout ximper_0.9.4
git merge --no-ff katze/mkimage-profiles-cleanup-automark-0.9.4

Step 4. Push the result of the merge to GitLab

git push origin ximper_0.9.4

Note that pushing to GitLab requires write access to this repository.

Tip: You can also checkout merge requests locally by following these guidelines.

  • Discussion 0
  • Commits 2
  • Changes 10
{{ resolvedDiscussionCount }}/{{ discussionCount }} {{ resolvedCountText }} resolved
  • Write
  • Preview
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment
Жора Змейкин
Assignee
Жора Змейкин @katze
Assign to
None
Milestone
None
Assign milestone
Time tracking
0
Labels
None
Assign labels
  • View project labels
Reference: ximperlinux/mkimage-profiles!7