На этой странице

Сборка Lycoris разделяет общий фундамент base и дельты редакций. Все шаги идут внутри отдельного контейнера, поэтому окружение хоста на результат не влияет.

Схема сборки и установки

Схема сборки и установки LycorisКомпозиция профилей в Docker-контейнере и установка на Btrfs через Calamares.

Правила композиции

Пакеты только добавляются

Список редакции дополняет base, дубликаты схлопываются с сохранением первого вхождения. Удалить пакет из base редакция не может.

Оверлеи заменяют файлы целиком

Файл из airootfs заменяет базовый по тому же пути. Построчного слияния конфигураций нет, как и rsync --delete.

Удаление через remove.list

Пути проверяются до первого удаления: абсолютные пути, компоненты . и .., дубликаты, вложенные записи и выход за пределы файловой системы запрещены.

Метаданные в overrides

Параметры образа переопределяет profiledef.overrides.sh, который подключается из profiledef.sh. Править profiledef.sh через sed нельзя.

Службы символическими ссылками

Включение юнитов systemd задаётся ссылками в airootfs/, например display-manager.service. Preset-файлы в этом пайплайне не применяются.

Почему не сделано иначе
  • Отдельные полные профили для каждой редакции пришлось бы править трижды, а различия между копиями быстро накапливаются.
  • sed по profiledef.sh во время сборки прячет реальные значения от того, кто читает репозиторий.
  • Скомпонованные профили в Git устаревают при каждом изменении дельты, поэтому они лежат в work/ и не коммитятся.

Разметка диска: Btrfs и Snapper

Установщик создаёт подтома Btrfs:

  • @: корень системы (/), снимки делаются только для него.
  • @home: домашние каталоги (/home), откат системы не трогает пользовательские файлы.
  • @snapshots: каталог снимков Snapper (/.snapshots).
  • @var_log: системный журнал (/var/log). Остаётся на месте при откате, чтобы можно было разобраться в причине сбоя.
  • @var_cache: кэш пакетов (/var/cache).

Обновления и откат

Хук snap-pac снимает состояние корня до и после каждой операции pacman. Если после обновления система не стартует, grub-btrfs добавляет в меню GRUB пункт с прошлыми снимками, и можно загрузиться в рабочий.

Оптимизация под процессор

При установке утилита lycoris-detect-cpu смотрит на флаги процессора в /proc/cpuinfo и определяет уровень инструкций:

  • x86-64-v2: SSE4.2 и POPCNT
  • x86-64-v3: AVX2, FMA, BMI1 и BMI2
  • x86-64-v4: AVX-512

Для процессоров уровня v3 и выше подключаются репозитории ALHP x86-64-v3, для v2 подключается x86-64-v2. На остальных остаются стандартные репозитории Arch. Пакеты ALHP подписываются ключами Ed25519, которые добавляются в связку ключей pacman.