База для Linux-сборок, как Arch — собранная с нуля и под твоё железо
Установить · Идея · Железо · Собрать · Документация · English
CleanLinux — система, собранная с нуля (не LFS): свой пакетный менеджер burn, свои рецепты, свой
cross-first bootstrap. Драйверы и оптимизация под конкретное железо — ПК, ноутбуки, портативные консоли и
одноплатники на x86_64 и arm64. burn «прожигает» исходники в пакеты под твой процессор и видеокарту,
а обновляется всё по модели rolling release+++ — с планом, снимком и откатом.
KDE Plasma, labwc, sway и любые другие DE и WM, приложения, Steam — не часть базы: это сборки поверх, в своих репозиториях. База ничего не выбирает за тебя, но даёт всё, чтобы любая сборка хорошо работала на твоём железе. Живой образ приходит со сборкой labwc — рабочим столом, который ставится по желанию.
Note
Статус: pre-alpha. Живой образ загружается с флешки (UEFI, x86_64 и arm64), открывает рабочий стол labwc
и ставит систему на диск через установщик с экранами; это проверяется в QEMU (tests/live.py), на настоящих
устройствах — пока нет (отчёт о железе очень поможет).
Что дальше — docs/ROADMAP.md и доска CleanLinux roadmap.
- Установить с флешки
- Идея
- База и сборки
- Rolling release+++
- Поддерживаемое железо
- Репозитории проекта
- Структура
- Собрать самому
- Тесты
- Документация
- Лицензия
- English
| Шаг | Что сделать |
|---|---|
| 1. Скачать | образ из релиза live-2026.11.6 и его .sha256: cleanlinux-x86_64-generic-x86_64-labwc-20261106.img (x86_64, 1060 МиБ) или cleanlinux-aarch64-generic-aarch64-labwc-20261105.img (arm64, 668 МиБ) |
| 2. Записать | образ целиком на флешку или SD-карту от 2 ГБ (для arm64 хватит 1 ГБ): sudo dd if=cleanlinux-….img of=/dev/sdX bs=4M conv=fsync status=progress, Rufus или balenaEtcher |
| 3. Загрузиться | меню загрузки (F12, F11, F8, Esc…) → «UEFI: флешка»; Secure Boot выключен; через 5 секунд — рабочий стол |
| 4. Установить | окно установщика на рабочем столе: язык → раскладка → часовой пояс → диск → пользователь → система → «Стереть и установить» |
Сеть для установки не нужна: установщик копирует систему прямо с флешки. Компьютер — любой x86_64 с UEFI
примерно с 2010 года (x86-64-v2) или arm64-устройство, которое загружает EFI с флешки; от 2 ГБ памяти и 8 ГБ
диска. Установленная система — база с компилятором и системами сборки (base-devel) и редактором nano, по
желанию — с рабочим столом labwc и проприетарными драйверами: burn update и другие сборки (burn spin add)
ставятся сразу. Подробно, с клавишами меню загрузки по производителям, всеми экранами установщика и решением
проблем, — в docs/INSTALL.md.
flowchart LR
usb["флешка: GPT<br/>ESP + btrfs CL_LIVE_…"] --> sdboot["systemd-boot<br/>labwc · консоль · RAM · …"]
sdboot --> initrd["initramfs<br/>cleanlinux-boot"]
initrd -->|"root=live:LABEL=…"| live["живая система<br/>overlay слоёв + tmpfs"]
live -->|"root входит сам"| desk["рабочий стол labwc<br/>или консоль"]
desk --> setup["cleanlinux-setup<br/>экраны установщика"]
setup --> install["cleanlinux-install<br/>GPT · ESP · btrfs"]
install -->|"копия слоёв<br/>@/ · nonfree/ · spins/labwc/"| disk[("CleanLinux<br/>на диске")]
| Экран установщика | Что там |
|---|---|
| Язык · Language | English или русский — на нём будут все экраны |
| Раскладка, часовой пояс | применяются сразу; в списках работает поиск по буквам |
| Диск | модель, размер, шина, что на нём сейчас; флешку установки выбрать нельзя |
| Компьютер и пользователь | имя компьютера, пользователь (группа wheel), пароль; root получает тот же |
| Система | рабочий стол (labwc или консоль), проприетарные драйверы (включены), профиль устройства, если burn profile detect его узнал (Steam Deck, ROG Ally…), автоматический вход |
| Итог → установка → готово | сводка, «Стереть диск?», копирование с полосой и журналом; «Перезагрузить», «Выключить» или «Выйти в консоль» |
На диске: GPT, раздел EFI 512 МиБ с systemd-boot и btrfs с подтомами @, @home, @snapshots (сжатие zstd).
Управление установщиком: стрелки, Enter, Esc — назад, Ctrl+C — выйти без изменений.
| База, а не витрина | Только система, драйверы и оптимизация под железо. DE, WM, приложения и игры — сборки поверх; правило, что куда относится, — в docs/SCOPE.md. |
| С нуля, но не LFS | Свой пакетный менеджер, свой формат рецептов и свой cross-first bootstrap вместо книги с ручными шагами. |
| Без бинарников | Репозиторий CleanLinux-Recipes — как AUR: только ссылки на исходники upstream, sha256 и рецепты. |
| Под твоё железо | Профиль устройства задаёт -march/-mcpu, драйверы GPU, параметры ядра и аппаратные features (аналог USE-флагов). |
| Минимум ресурсов | dinit вместо systemd, без документации, лишних локалей и статических библиотек, LTO. |
| Совместимость | glibc (не musl), merged /usr — проприетарные драйверы, Flatpak/AppImage и обычные бинарные программы работают. |
| Свежее всё | GCC 16, glibc 2.44, binutils 2.47, Linux 7.3, coreutils 9.12, bash 5.3, … — tools/updates.sh каждый день сверяет рецепты с upstream и публикует проверенные обновления в канал edge. |
| Быстрая сборка | Все исходники скачиваются параллельно и проверяются до начала сборки; CCACHE=1, LINKER=mold, LTO, -O3 для горячего кода (zstd, lz4, zlib-ng). |
| Воспроизводимость | Тот же рецепт + флаги + тулчейн → побайтно тот же пакет (SOURCE_DATE_EPOCH, -ffile-prefix-map, фиксированные времена файлов). |
| Железо | Ядро под класс устройства: zswap/zram на zstd, MGLRU, BFQ для флеша, amd-pstate EPP, PREEMPT_DYNAMIC, BBR + fq; платформенные драйверы и встроенные контроллеры ROG Ally, Legion Go, MSI Claw, AYANEO, OneXPlayer, Steam Deck. |
| x86_64 + arm64 | Обе архитектуры равноправны; любую можно собрать с любой (cross-first). |
flowchart TB
subgraph spins["сборки — отдельные репозитории"]
direction LR
kde["KDE Plasma"] ~~~ labwc["labwc"] ~~~ sway["sway"] ~~~ tui["консольная"] ~~~ own["твоя"]
end
subgraph base["CleanLinux"]
direction TB
platform["<b>platform</b> · Wayland/X11-библиотеки, libinput, seatd/elogind, D-Bus, PipeWire, шрифты"]
hardware["<b>hardware</b> · ядро под профиль, firmware, Mesa/Vulkan, звук, ввод, питание, датчики, quirks"]
core["<b>core</b> · glibc, bash, coreutils, util-linux, dinit, kmod, eudev, burn, … (base)"]
platform --- hardware --- core
end
spins --> base
CleanLinux отвечает за три нижних слоя. Сборка — это репозиторий со своими рецептами, набором пакетов,
features и настройками; она ставится и обновляется тем же burn (burn spin add) и не меняет базу —
docs/SPINS.md.
Обычный rolling — «обновил всё и надейся». В CleanLinux у обновления есть страховка:
- План —
burn planпоказывает, что обновится, риск (core/major) и какие пакеты придётся пересобрать. - Сначала сборка, потом установка — всё собирается в кеш; если хоть что-то не собралось, система не тронута.
- Снимок — read-only снимок btrfs перед применением (burn делает его сам, без btrfs-progs) и pre-update хуки.
- ABI-aware — сменилась soname библиотеки → старая сохраняется (preserved libs), зависимые пакеты пересобираются автоматически.
- Проверка —
burn doctorищет пропавшие и устаревшие библиотеки. - Откат и заморозка —
burn rollback <pkg>,burn hold <pkg>, журналburn history. - Каналы —
main(прошёл проверкиtools/check.sh),edge(новые версии upstream каждый день, ссылки и sha256 проверены автоматически),security(burn update --security: только исправления уязвимостей).
Подробнее: docs/ROLLING.md.
| Профиль | Устройство | CPU | VIDEO_CARDS |
|---|---|---|---|
native |
эта машина (автоопределение) | -march=native / -mcpu=native |
по /sys |
generic-x86_64 |
любой x86_64 ПК с ~2009 г. — профиль live-образа | x86-64-v2 |
amd intel nouveau virgl |
generic-x86_64-v3 |
современные ПК (Haswell+, Zen+) | x86-64-v3 (AVX2, FMA) |
amd intel nouveau virgl |
generic-aarch64 |
любая arm64-плата или устройство — профиль live-образа arm64 | armv8-a |
freedreno panfrost v3d lima etnaviv virgl |
steam-deck |
Valve Steam Deck LCD/OLED | znver2 |
amd |
rog-ally |
ASUS ROG Ally / Ally X | znver4 |
amd |
rog-xbox-ally-x |
ASUS ROG Xbox Ally X, Lenovo Legion Go 2 (Z2 Extreme) | znver5 |
amd |
legion-go |
Lenovo Legion Go (Z1 Extreme) | znver4 |
amd |
legion-go-s |
Lenovo Legion Go S (Z2 Go) | znver3 |
amd |
msi-claw |
MSI Claw A1M (Meteor Lake) | meteorlake |
intel |
msi-claw-ai-plus |
MSI Claw 7/8 AI+ (Lunar Lake) | lunarlake |
intel |
mangmi-air-x |
Mangmi Air X (Snapdragon 662) | cortex-a73.cortex-a53 + обход errata A53 |
freedreno |
retroid-pocket-5 |
Retroid Pocket 5 / Mini (Snapdragon 865) | cortex-a77 |
freedreno |
ayn-odin2 |
AYN Odin 2 / Mini / Portal (Snapdragon 8 Gen 2) | armv8.6-a+fp16fml, tune cortex-a715 |
freedreno |
raspberry-pi-5 |
Raspberry Pi 5 | cortex-a76 |
v3d |
rk3566-handheld |
Anbernic RG353/RG503, PowKiddy (RK3566) | cortex-a55 |
panfrost |
asus-x540ya |
ASUS X540YA (AMD E2-6110, Radeon R2) | btver2 |
amd (GCN 1.1 через amdgpu) |
burn profile list # все профили
burn profile detect # какой профиль подходит этой машине (установщик спрашивает его сам)
burn profile show # итоговые CFLAGS, features, драйверыFirmware в live-образе — не весь linux-firmware, а то, что нужно чаще всего: на x86_64 — видеокарты (AMD, Intel, NVIDIA GSP для nouveau), микрокод AMD, Wi-Fi, Bluetooth и Ethernet ноутбуков и ПК (Intel, Realtek, MediaTek, Qualcomm Atheros, Broadcom, Marvell) и усилители звука, всего 362 МиБ; на arm64 — Adreno и DSP Snapdragon, Mali, Wi-Fi и Bluetooth плат и консолей, 225 МиБ. Проприетарные драйверы (NVIDIA, DSP Steam Deck OLED) — отдельным слоем, включены по умолчанию. Что проверено на настоящих устройствах — docs/HARDWARE.md.
| Репозиторий | Что это |
|---|---|
| CleanLinux (этот) | профили железа, bootstrap, образ диска и live-образ для флешки, тесты в QEMU, документация |
| CleanLinux-Recipes | рецепты базы — только текст: ссылки на upstream, sha256, команды сборки |
| burn | пакетный менеджер на C: рецепты, сборка, установка, rolling+++, burn clone, burn spin |
| cleanlinux-boot | сервисы dinit для загрузки и помощник на C: ранние ФС, udev, getty, автовход, ядра в ESP, initramfs (живая система: overlay слоёв носителя) |
| cleanlinux-install | установщик на C: cleanlinux-install (командная строка: копия слоёв носителя или burn clone) и cleanlinux-setup (экраны) |
| cleanlinux-spin-labwc | сборка labwc — рабочий стол живого образа: панель sfwbar, экранная клавиатура, автоповорот, масштаб по DPI |
| cleanlinux-spin-template | шаблон своей сборки |
CleanLinux/
├── .ai/ плотные заметки для ИИ-агентов: репозитории, сборка, live-образ, установщик, подводные камни
├── .github/ шаблоны issues (баг, идея, отчёт о железе), pull request'а, CODEOWNERS — без Actions
├── bootstrap/
│ ├── bootstrap.sh сборка с нуля: toolchain → base → native → image | disk | live
│ ├── lib.sh шаги стадий: тулчейн, base, образ диска, live-образ
│ ├── layer.py слой live-носителя: разница двух деревьев с whiteout'ами overlayfs
│ └── host-burn.sh burn для хоста — из того же релиза, что ставится в систему
├── profiles/
│ ├── base.profile общие умолчания: флаги, features, ядро
│ ├── generic-*.profile x86_64 (v2, v3) и aarch64 для любых устройств
│ ├── native.profile «эта машина»: -march=native, видеокарта по /sys
│ └── devices/ Steam Deck, ROG Ally, Legion Go, MSI Claw, Retroid, AYN, Raspberry Pi 5, …
├── tests/
│ ├── smoke.sh сборка и установка настоящих рецептов в тестовый корень
│ ├── rolling.sh rolling+++: soname bump, preserved libs, ABI-пересборка, hold, rollback
│ ├── kernel-config.sh параметры ядра профилей разрешаются как задуманы
│ ├── layer.sh слои bootstrap/layer.py через настоящий overlayfs
│ ├── boot.py образ диска загружается в QEMU (UEFI) до входа
│ ├── install.py образ диска ставится на другой диск cleanlinux-install
│ ├── live.py live-образ как флешка в QEMU: экраны установщика → установленная система
│ └── native-repro.sh нативная пересборка даёт те же пакеты
├── tools/
│ ├── check.sh все проверки (--quick перед push, --full с live-образом в QEMU)
│ ├── screenshots.py снимки меню загрузки, рабочего стола и экранов установщика в QEMU — для документации
│ └── … hooks/pre-push, profiles-tarball.sh, dt-kconfig.py
└── docs/ INSTALL, SCOPE, ARCHITECTURE, ROLLING, RECIPES, SPINS, HARDWARE, ROADMAP
└── images/ меню загрузки, рабочий стол, экраны установщика
Попробовать burn без root — пакеты ставятся в отдельный корень:
git clone https://github.com/vovawees/CleanLinux
git clone https://github.com/vovawees/CleanLinux-Recipes
git clone https://github.com/vovawees/burn && make -C burn # компилятор C и libzstd
cd CleanLinux
alias burn="$PWD/../burn/burn -R $PWD/../CleanLinux-Recipes/packages"
export BURN_PROFILE_DIR=$PWD/profiles
burn search
burn info zstd
burn profile detect
tests/smoke.sh # собирает и ставит zstd, zlib-ng, xz, lz4, pkgconf в тестовый корень
tests/rolling.sh # soname bump, preserved libs, ABI-пересборка, hold, rollbackСобрать систему с нуля и live-образ — без root-прав, на любом Linux x86_64 или arm64:
bootstrap/bootstrap.sh --arch x86_64 toolchain base live # live-образ: тулчейн → base → native → образ
bootstrap/bootstrap.sh --arch x86_64 \
--spin https://github.com/vovawees/cleanlinux-spin-labwc live # с рабочим столом labwc
bootstrap/bootstrap.sh --arch x86_64 live # пересобрать только образ, когда base уже есть
bootstrap/bootstrap.sh --arch x86_64 disk # образ диска для QEMU или dd на диск
bootstrap/bootstrap.sh --arch x86_64 all # всё: toolchain base native image disk live
bootstrap/bootstrap.sh --profile mangmi-air-x all # arm64 под устройствоflowchart LR
toolchain["toolchain<br/>binutils · GCC 16 · glibc<br/>(cross)"] --> base["base<br/>rootfs из пакетов burn"]
base --> image["image<br/>rootfs.tar.zst"]
base --> disk["disk<br/>GPT-образ:<br/>ESP + btrfs"]
base --> native["native<br/>самосборка<br/>base-devel"]
native --> live["live<br/>образ флешки:<br/>ESP + btrfs со слоями"]
spin["--spin<br/>сборка labwc"] -.-> live
| Стадия | Что получается | x86_64, 2 ядра (замер) | arm64, 4 ядра (замер) |
|---|---|---|---|
toolchain |
кросс-тулчейн и glibc в rootfs | ~65 мин | ~37 мин |
base |
базовая система из пакетов burn | ~85 мин | ~52 мин |
native |
base-devel, собранный самой системой (perl, python, cmake, meson…) |
~70 мин | ~33 мин |
live |
build/<arch>/cleanlinux-<arch>-<профиль>[-<сборка>]-ДАТА.img + .sha256 |
ядро ~35 мин, сборка labwc с проприетарными драйверами ~30 мин, образ ~3 мин | ядро ~38 мин, сборка labwc ~24 мин, образ ~2 мин |
disk |
build/<arch>/cleanlinux-<arch>-<профиль>.img |
минуты, если ядро уже собрано | минуты |
Собранное кешируется (build/cache/packages): повторная сборка образа после правки одного пакета занимает
минуты.
Хосту нужны gcc/g++, make, bison, flex, gawk, m4, bc, gperf, perl (со всеми модулями ядра Perl: на Fedora,
RHEL, Amazon Linux — perl-core), python3, ninja, cmake, pkg-config, git, curl и заголовки libzstd, libelf и
OpenSSL; для образов — mtools, dosfstools, sfdisk и модули python3 jinja2 и pyelftools (сборка systemd-boot);
mkfs.btrfs для live-образа берётся из собранного rootfs; для чужой архитектуры — qemu-user. burn для хоста
bootstrap собирает сам, meson берёт из рецепта. Каждый шаг пишет лог в build/<arch>/logs/ и отметку в
build/<arch>/stamps/ — прерванный bootstrap продолжается с того же места. Места нужно около 25 ГБ. Переменные
образа (LIVE_FIRMWARE, LIVE_NONFREE, LIVE_FS, LIVE_LABEL, --spin, DISK_PACKAGE_FEATURES) — в
docs/INSTALL.md.
Хостингового CI нет: всё проверяется локально, tools/check.sh — перед каждым push (hook tools/hooks/pre-push).
| Тест | Что проверяет | Нужно |
|---|---|---|
tools/check.sh |
ShellCheck, профили, рецепты, ссылки в документации | — |
tests/smoke.sh |
сборка и установка настоящих рецептов | burn |
tests/rolling.sh |
весь цикл rolling+++ | burn |
tests/kernel-config.sh |
профили дают ядру нужные параметры | исходники ядра |
tests/boot.py IMG |
образ диска грузится в QEMU (UEFI) до входа, без ошибок сервисов | QEMU, OVMF |
tests/install.py IMG |
установка с образа диска на другой диск и загрузка с него | QEMU, OVMF |
tests/layer.sh |
слои live-носителя (bootstrap/layer.py) дают в overlayfs ровно изменённое дерево |
user namespaces |
tests/live.py IMG [--arch aarch64] |
live-образ как USB-флешка: экраны установщика по-русски, живая система (overlay слоёв, без squashfs и кеша пакетов), установленная система | QEMU, OVMF/AAVMF |
tests/native-repro.sh |
нативная пересборка совпадает с cross-сборкой | система после bootstrap native |
| Документ | О чём |
|---|---|
| docs/INSTALL.md | установка с флешки: какой образ взять, запись, загрузка, рабочий стол, экраны установщика, первый запуск, проблемы, размер |
| docs/SCOPE.md | что входит в базу, а что ставится сверху |
| docs/ARCHITECTURE.md | из чего состоит система и почему так |
| docs/ROLLING.md | как устроены обновления rolling release+++ |
| docs/RECIPES.md | как писать рецепты |
| docs/SPINS.md | как сделать сборку поверх базы и что база ей гарантирует |
| docs/HARDWARE.md | профили устройств и что на них проверено |
| docs/ROADMAP.md | что дальше (и доска roadmap) |
| CONTRIBUTING.md | как участвовать: проверки, коммиты, pull request'ы |
| .ai/ | заметки для ИИ-агентов, которые продолжают работу |
MIT — см. LICENSE. Пакеты распространяются под своими лицензиями (указаны в рецептах).
CleanLinux is a base for Linux spins, like Arch: a system built from scratch (not LFS), drivers and hardware-specific tuning for PCs, laptops, handhelds and boards, on x86_64 and arm64. Desktops, window managers, applications and games are not part of the base: they are spins on top (KDE Plasma, labwc, sway, ...), maintained in their own repositories and installed with the same package manager (see docs/SCOPE.md).
- Install from a USB stick: download the live image (
.img, x86_64 or arm64) from the releases, write the whole image to a stick or an SD card (dd, Rufus, balenaEtcher) and boot it on a UEFI machine with Secure Boot off: the labwc desktop opens with the installer (cleanlinux-setup, English or Russian) in a window, or the installer alone with the console entry. It installs CleanLinux to a disk: GPT, a 512 MiB ESP with systemd-boot, btrfs with@,@home,@snapshots, with or without the desktop and the proprietary drivers. No network is needed: the image holds the system as plain trees on btrfs (no squashfs), and the installer copies them. See docs/INSTALL.md. - There are no binary repositories: CleanLinux-Recipes holds only upstream source links, checksums and build recipes (like the AUR, but for the whole system), and the
burnpackage manager builds everything locally, tuned by a hardware profile (CPU flags, GPU drivers, kernel options, hardware features). - glibc (not musl), GCC 16, merged
/usr, dinit; minimal by default (no docs, extra locales or static libraries; LTO). - Rolling release+++: updates are planned, fully built before anything is installed, snapshotted, ABI-aware (preserved libraries + automatic rebuilds after soname changes), verified with
burn doctor, and can be rolled back or held per package. A daily upstream watcher publishes verified version bumps to theedgechannel. - Hardware: kernel defaults per device class (zstd zswap/zram, MGLRU, BFQ for flash, amd-pstate EPP,
PREEMPT_DYNAMIC, BBR + fq), platform and built-in controller drivers for ROG Ally / Legion Go / MSI Claw / AYANEO / OneXPlayer / Steam Deck, profiles for 13 devices. - Cross-first bootstrap without root:
bootstrap/bootstrap.sh --arch x86_64 toolchain base livebuilds a cross toolchain, glibc, the base system, base-devel (built by the system itself) and the live image from any Linux host;--spin URLadds a desktop as a layer of its own;diskmakes a GPT image instead. - Status: pre-alpha. The live image boots and installs in QEMU on x86_64 and arm64 (
tests/live.py: a USB stick, the installer's screens, the installed system), the disk image too (tests/boot.py,tests/install.py); real hardware is not verified yet (docs/HARDWARE.md). Next steps: docs/ROADMAP.md and the roadmap board. No hosted CI:tools/check.shruns locally (CONTRIBUTING.md).

