Skip to content

About

CleanLinux — experimental from-scratch Linux base for x86_64 and arm64 (like Arch): system, drivers and hardware-tuned source builds, Rolling+++ updates. Desktops and WMs (KDE, Labwc, ...) come as spins on top.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

CleanLinux

База для Linux-сборок, как Arch — собранная с нуля и под твоё железо

live status arch boot init libc kernel gcc desktop license

Установить · Идея · Железо · Собрать · Документация · 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.

Содержание

Установить с флешки

Шаг Что сделать
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. Установить окно установщика на рабочем столе: язык → раскладка → часовой пояс → диск → пользователь → система → «Стереть и установить»

Живая система CleanLinux: рабочий стол labwc и окно установщика Установщик CleanLinux: экран «Система»

Сеть для установки не нужна: установщик копирует систему прямо с флешки. Компьютер — любой 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/>на диске")]
Loading
Экран установщика Что там
Язык · 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
Loading

CleanLinux отвечает за три нижних слоя. Сборка — это репозиторий со своими рецептами, набором пакетов, features и настройками; она ставится и обновляется тем же burn (burn spin add) и не меняет базу — docs/SPINS.md.

Rolling release+++

Обычный rolling — «обновил всё и надейся». В CleanLinux у обновления есть страховка:

  1. План — burn plan показывает, что обновится, риск (core / major) и какие пакеты придётся пересобрать.
  2. Сначала сборка, потом установка — всё собирается в кеш; если хоть что-то не собралось, система не тронута.
  3. Снимок — read-only снимок btrfs перед применением (burn делает его сам, без btrfs-progs) и pre-update хуки.
  4. ABI-aware — сменилась soname библиотеки → старая сохраняется (preserved libs), зависимые пакеты пересобираются автоматически.
  5. Проверка — burn doctor ищет пропавшие и устаревшие библиотеки.
  6. Откат и заморозка — burn rollback <pkg>, burn hold <pkg>, журнал burn history.
  7. Каналы — 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
Loading
Стадия Что получается 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. Пакеты распространяются под своими лицензиями (указаны в рецептах).

English

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 burn package 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 the edge channel.
  • 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 live builds a cross toolchain, glibc, the base system, base-devel (built by the system itself) and the live image from any Linux host; --spin URL adds a desktop as a layer of its own; disk makes 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.sh runs locally (CONTRIBUTING.md).

About

CleanLinux — experimental from-scratch Linux base for x86_64 and arm64 (like Arch): system, drivers and hardware-tuned source builds, Rolling+++ updates. Desktops and WMs (KDE, Labwc, ...) come as spins on top.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages