Builder: Техническая документация
Builder — это интеллектуальная система автоматической установки и настройки дистрибутива meowrch, написанная на Python. Система проводит интерактивный опрос пользователя и выполняет полную настройку системы согласно выбранным параметрам.
Архитектура системы
Заголовок раздела «Архитектура системы»Основные компоненты
Заголовок раздела «Основные компоненты»Builder состоит из нескольких ключевых модулей:
install.py— главный модуль, координирующий весь процессquestion.py— система интерактивного опроса пользователяpackages.py— определения пакетов и их категорийmanagers/— специализированные менеджеры для различных аспектов установкиutils/— утилиты и схемы данных
Менеджеры установки
Заголовок раздела «Менеджеры установки»- PackageManager — управление установкой пакетов через pacman и AUR
- FileSystemManager — работа с файловой системой и dotfiles
- DriversManager — автоматическое определение и установка драйверов
- AppsManager — настройка специфичных приложений
- ChaoticAurManager — управление репозиторием Chaotic AUR
- PostInstallManager — финальные настройки после установки
Этапы установки
Заголовок раздела «Этапы установки»1. Инициализация и опрос
Заголовок раздела «1. Инициализация и опрос»Интерактивный опрос пользователя:
self.build_options: BuildOptions = Question.get_answers()Система задает следующие вопросы:
- Создание резервной копии — сохранение существующих конфигураций
- Выбор оконных менеджеров — Hyprland и/или BSPWM
- AUR Helper — выбор между yay, paru и их -bin версиями
- Chaotic AUR — использование предкомпилированных AUR пакетов
- Драйверы — автоопределение и установка NVIDIA/Intel/AMD
- Firefox расширения — Dark Reader, uBlock Origin, TWP, Unpaywall, Tampermonkey
- Командная оболочка — fish или zsh
- Пользовательские пакеты — интерактивный выбор по категориям
2. Резервное копирование
Заголовок раздела «2. Резервное копирование»if self.build_options.make_backup: FileSystemManager.make_backup()Сохраняются следующие конфигурации:
~/.config/— пользовательские конфигурации~/.local/bin/— пользовательские скрипты~/.local/share/nemo/— настройки файлового менеджера- Dotfiles:
.bashrc,.env,.Xresources,.xinitrc ~/.icons/default/index.theme— тема курсора
3. Подготовка файловой системы
Заголовок раздела «3. Подготовка файловой системы»FileSystemManager.create_default_folders()FileSystemManager.copy_dotfiles( exclude_bspwm=not self.build_options.install_bspwm, exclude_hyprland=not self.build_options.install_hyprland,)Создание стандартных директорий:
mkdir -p ~/.config ~/.themes Desktop Downloads Templates Public Documents Music Pictures VideosКопирование dotfiles с условными исключениями:
- Если не устанавливается BSPWM — исключаются
bspwm,polybar - Если не устанавливается Hyprland — исключаются
hypr,waybar - Установка прав
chmod -R 700для~/.configи~/.local/bin
4. Настройка пакетного менеджера
Заголовок раздела «4. Настройка пакетного менеджера»PackageManager.update_pacman_conf(enable_multilib=True)PackageManager.update_database()Модификация /etc/pacman.conf:
# Включение опций производительностиParallelDownloads = 5VerbosePkgListsILoveCandyColor
# Включение multilib репозитория[multilib]Include = /etc/pacman.d/mirrorlistОбновление базы данных пакетов:
sudo pacman -Sy5. Установка Chaotic AUR (опционально)
Заголовок раздела «5. Установка Chaotic AUR (опционально)»if self.build_options.use_chaotic_aur: ChaoticAurManager.install()Если выбран Chaotic AUR, устанавливается репозиторий с предкомпилированными AUR пакетами для ускорения установки.
6. Установка AUR Helper
Заголовок раздела «6. Установка AUR Helper»PackageManager.install_aur_helper(self.build_options.aur_helper)Процесс установки:
- Установка зависимостей:
git,base-devel - Клонирование соответствующего репозитория из AUR
- Сборка и установка через
makepkg -si --noconfirm
Поддерживаемые AUR Helpers:
yay— классический helperparu— современная альтернатива на Rustyay-bin— предкомпилированная версия yayparu-bin— предкомпилированная версия paru
7. Установка пакетов
Заголовок раздела «7. Установка пакетов»self.packages_installation()Пример системы классификации пакетов:
Базовые пакеты (BASE)
Заголовок раздела «Базовые пакеты (BASE)»# Общие пакеты для всех конфигурацийBASE.pacman.common = [ # Базовые инструменты "base-devel", "git", "networkmanager", "libnotify", # Звуковая подсистема "pipewire", "pipewire-pulse", "pipewire-alsa", "wireplumber", # CLI инструменты "jq", "fastfetch", "lsd", "bat", "micro", "btop", "yazi", # GUI приложения "sddm", "plymouth", "firefox", "kitty", "nemo", "vlc", # Шрифты "ttf-hack-nerd", "noto-fonts", "ttf-jetbrains-mono-nerd"]
# Пакеты для BSPWMBASE.pacman.bspwm_packages = [ "xorg", "bspwm", "sxhkd", "polybar", "dunst", "feh"]
# Пакеты для HyprlandBASE.pacman.hyprland_packages = [ "hyprland", "waybar", "hyprlock", "swww", "swaync", "uwsm"]Пользовательские пакеты (CUSTOM)
Заголовок раздела «Пользовательские пакеты (CUSTOM)»CUSTOM = { "useful": {"timeshift": PackageInfo("Утилита восстановления системы")}, "development": {"obsidian": PackageInfo("База знаний", recommended=True)}, "social_media": {"telegram-desktop": PackageInfo("Мессенджер", selected=True)}, "games": {"steam": PackageInfo("Игровая платформа", selected=True)}, "entertainment": {"yandex-music": PackageInfo("Музыкальный сервис", aur=True)}, "office": {"onlyoffice-bin": PackageInfo("Офисный пакет", aur=True)}}Алгоритм установки пакетов:
- Формирование списков pacman и AUR пакетов
- Добавление пакетов в зависимости от выбранных WM
- Установка в батчах по 5 пакетов для оптимизации
- При неудаче батча — индивидуальная установка с повторными попытками
- Ведение списка неустановленных пакетов для финального отчета
8. Установка драйверов
Заголовок раздела «8. Установка драйверов»self.drivers_installation()Автоматическое определение оборудования:
@staticmethoddef auto_detection() -> List[str]: drivers = []
# Определение по PCI ID и другим методам if "intel" in lspci_output.lower(): drivers.append("Intel") if "nvidia" in lspci_output.lower(): drivers.append("Nvidia") if "amd" in lspci_output.lower() or "ati" in lspci_output.lower(): drivers.append("AMD")
return driversДрайверные пакеты по производителям:
"intel": [ "lib32-mesa", "vulkan-intel", "lib32-vulkan-intel", "intel-media-driver", "libva-intel-driver", "xf86-video-intel"]"amd": [ "lib32-mesa", "vulkan-radeon", "lib32-vulkan-radeon"]NVIDIA:
Заголовок раздела «NVIDIA:»"nvidia": [ "nvidia-dkms", "nvidia-utils", "lib32-nvidia-utils", "nvidia-settings", "libva-nvidia-driver"]Настройка модулей GPU для ранней загрузки:
DriversManager.setup_gpu_modules_for_early_boot()Обновление /etc/mkinitcpio.conf для корректной работы Plymouth с графическими драйверами.
9. Настройка приложений
Заголовок раздела «9. Настройка приложений»GRUB Bootloader
Заголовок раздела «GRUB Bootloader»AppsManager.configure_grub()Установка кастомной темы meowrch и обновление конфигурации.
SDDM Display Manager
Заголовок раздела «SDDM Display Manager»AppsManager.configure_sddm()Настройка темы Sugar-Dark и конфигурации автозапуска.
Plymouth Boot Screen
Заголовок раздела «Plymouth Boot Screen»AppsManager.configure_plymouth()Установка анимированного загрузочного экрана.
Firefox
Заголовок раздела «Firefox»AppsManager.configure_firefox( darkreader=self.build_options.ff_darkreader, ublock=self.build_options.ff_ublock, # ... другие расширения)Автоматическая установка выбранных расширений и настроек.
VS Code
Заголовок раздела «VS Code»AppsManager.configure_code()Установка тем и базовых расширений для разработки.
Pawlette
Заголовок раздела «Pawlette»AppsManager.configure_pawlette()Интеграция системы управления темами.
Mewline (только для Hyprland)
Заголовок раздела «Mewline (только для Hyprland)»if self.build_options.install_hyprland: AppsManager.configure_mewline()Настройка кастомного статус-бара для Hyprland.
10. Настройка системных служб
Заголовок раздела «10. Настройка системных служб»self.daemons_setting()Управление systemd службами:
daemons = { "disable": ["sddm.service"], # Отключение для ручного управления "enable": ["NetworkManager", "bluetooth.service"], "start": ["bluetooth.service"]}11. Финальные настройки
Заголовок раздела «11. Финальные настройки»PostInstallation.apply(self.build_options.terminal_shell)Конфигурация командной оболочки:
- Fish: Установка кастомных функций и алиасов
- Zsh: Настройка Oh My Zsh с темой Powerlevel10k
Финальные операции:
- Обновление базы данных шрифтов
- Настройка XDG директорий
- Применение пользовательских настроек
- Генерация финального отчета
Система логирования
Заголовок раздела «Система логирования»logger.add( sink="build_debug.log", format="{time} | {level} | {message}", level="DEBUG", encoding="utf-8",)Весь процесс установки логируется с детальной информацией в файл build_debug.log.
Обработка ошибок
Заголовок раздела «Обработка ошибок»Стратегии восстановления
Заголовок раздела «Стратегии восстановления»- Установка пакетов: При неудаче батча — индивидуальная установка
- Повторные попытки: До 3 попыток для критичных операций
- Продолжение работы: Система продолжает работу при некритичных ошибках
- Детальное логирование: Сохранение информации об ошибках для диагностики
Финальный отчет
Заголовок раздела «Финальный отчет»logger.warning("Pacman: " + ", ".join(self.not_installed_packages.pacman))logger.warning("Aur: " + ", ".join(self.not_installed_packages.aur))В конце установки Builder предоставляет отчет о пакетах, которые не удалось установить автоматически.
Завершение установки
Заголовок раздела «Завершение установки»is_reboot = inquirer.confirm("Do you want to reboot?")if is_reboot: subprocess.run("sudo reboot", shell=True)После успешной установки система предлагает перезагрузку для применения всех изменений.
Технические особенности
Заголовок раздела «Технические особенности»Производительность
Заголовок раздела «Производительность»- Параллельная загрузка:
ParallelDownloads = 5в pacman - Батчевая установка: Установка пакетов группами по 5 штук
- Chaotic AUR: Использование предкомпилированных пакетов
- Кэширование: Повторное использование загруженных пакетов
Безопасность
Заголовок раздела «Безопасность»- Резервное копирование: Автоматическое сохранение существующих настроек
- Валидация: Проверка целостности пакетов через pacman
- Логирование: Детальное ведение журнала всех операций
- Права доступа: Корректная установка прав на пользовательские файлы
Гибкость
Заголовок раздела «Гибкость»- Модульность: Независимые менеджеры для различных компонентов
- Конфигурируемость: Широкие возможности кастомизации через опросы
- Расширяемость: Простое добавление новых пакетов и функций
- Совместимость: Поддержка различных конфигураций оборудования
Примечание: Для информации о том, как запустить установку, см. Полное руководство по установке.