A tiny glibc distribution built on Void Linux binary packages,
with its own runit-like init (niinit) and XBPS-based package manager (kipki).
KiniNi is a small, opinionated Linux distribution that does not reinvent the package ecosystem. Instead of maintaining its own repositories, it consumes the upstream Void Linux binary repositories directly — a glibc system with access to thousands of ready-to-install packages, no compilation required. Every tool the user touches, however, is KiniNi's own.
The distribution is assembled by tools/mkrootfs.sh: it bootstraps a
base-system rootfs from Void mirrors, layers the KiniNi identity on top
(os-release, hostname, motd-ready skel), and installs the native components.
The result is a minimal, fully supervised system where the init, the package
manager, and even the terminal greeting bird are first-party code.
The name and the mascot come from the kiwi: small, nocturnal, unassuming —
and surprisingly resilient. The ASCII bird greets you on every console via
fastfetch (and works with any fetch tool that accepts a custom file).
| Component | What it is | Language |
|---|---|---|
| niinit | PID 1: three-stage boot (like runit), orphan reaping, reboot/poweroff/halt signaling | C99 |
| niinit-sv | Per-service supervisor: restart on crash, finish scripts, down files, runit-compatible control FIFO (u d o t k p c h a i q 1 2 x), stat/pid files |
C99 |
| niinit-svdir | Watches /etc/niinit/services, spawns/stops supervisors as dirs appear/vanish; honors deps files — a service is spawned only when its dependencies are up (blocked state is visible in stat) |
C99 |
| svctl | status (with uptime) / up / down / start / stop / restart / once / pause / cont / signals / check / enable / disable; doubles as reboot/poweroff/halt |
C99 |
| niinit-parallel | Runs the independent stage-1 tasks concurrently, honoring <task>.deps files (waits, skips on failed deps, reports cycles) |
C99 |
| kipki | Package manager on libxbps: transactions, search, orphans, holds, local log | C + libxbps |
| mkrootfs | Builds a rootfs from Void repositories | POSIX sh |
| mkiso | Builds a bootable live ISO: kernel, initramfs, isolinux + grub-efi (BIOS and UEFI), overlayfs root, disk installer on board | POSIX sh |
| kiwi-install | Disk installer: partitions (msdos/GPT), LUKS2 root encryption, ephemeral encrypted swap, timezone + locale selection, sched_ext scheduler setup, offline extlinux (BIOS) or grub-on-ESP (UEFI) bootloader | POSIX sh |
| kinini-scx | sched_ext scheduler selector: status / list / use <sched> --now (live switch) / on / off / top / log — CachyOS scxctl experience without D-Bus |
POSIX sh |
| kinini-wifi | wifi-menu-style TUI connector over wpa_cli (scan, pick, connect, save) — no NetworkManager |
POSIX sh |
| kinini-power | TLP-lite power profiles (battery / perf): cpufreq governor, EPP, USB autosuspend, wifi power saving, writeback interval, scx scheduler — no daemon |
POSIX sh |
| kinini-session / kinini-audio-start | the desktop glue without systemd: a LightDM session wrapper (XDG_RUNTIME_DIR + locale + xdg-user-dirs) and the per-user PipeWire stack starter | POSIX sh |
| kinini-settings | CachyOS-inspired tuning shipped in the skel: sysctl.d profile, per-device IO-scheduler udev rules, zram swap, watchdog blacklists | conf/sh |
| kinini kernel | Vanilla Linux stable built in CI over allnoconfig + a curated fragment: sched_ext enabled, BTF, KMS (bochs/virtio-gpu built in, i915/amdgpu/xe/nouveau as modules), HDA audio, evdev input — boot-critical drivers built in (no initramfs modules), zram/bfq/BBR onboard |
config + CI |
Building requires gcc, make, pkg-config, and libxbps-devel (Void) or
libarchive + libxbps headers elsewhere:
git clone https://github.com/mel0k1/KiniNi.git
cd KiniNi
makeBuild a rootfs (run on Void Linux or inside voidlinux/voidlinux, as root):
./tools/mkrootfs.sh /mnt/kinini
# custom mirror:
./tools/mkrootfs.sh /mnt/kinini https://mirror.example.org/voidlinux/currentThe script produces a complete tree: base-system packages, niinit as the
init, kipki as the package manager, getty services on tty1–tty6, and the
kiwi mascot in place for fastfetch.
tools/mkiso.sh turns a rootfs into a bootable hybrid ISO — Linux kernel
6.12 (live), a busybox initramfs that finds the medium and mounts an overlayfs root
(all writes go to a tmpfs layer, the medium stays untouched), isolinux for
BIOS and a standalone grub x86_64-efi on an appended FAT ESP for UEFI
(same grub-mkrescue-style image boots CDs and USB sticks on both firmware
types):
# rootfs with the full desktop stack (linux metapackage is skipped,
# the LTS kernel series is pinned explicitly):
IGNORE_PKGS=linux ./tools/mkrootfs.sh /tmp/rootfs \
https://repo-default.voidlinux.org/current base-system linux6.12 fastfetch \
syslinux dhcpcd dosfstools cryptsetup tzdata glibc-locales scx \
sudo opendoas dbus dbus-x11 lightdm lightdm-gtk-greeter seatd \
xfce4 xfce4-pulseaudio-plugin pavucontrol labwc foot fuzzel \
mesa xorg-server xf86-video-fbdev xinit dejavu-fonts-ttf adwaita-icon-theme \
xdg-user-dirs pipewire wireplumber alsa-pipewire pulseaudio-utils \
wpa_supplicant dialog iw polkit
./tools/mkiso.sh /tmp/rootfs kinini-0.5-x86_64.isoTest it in qemu (BIOS or OVMF/UEFI — the same image):
qemu-system-x86_64 -m 2048 -cdrom kinini-0.5-x86_64.iso -boot d
qemu-system-x86_64 -m 2048 -cdrom kinini-0.5-x86_64.iso -bios OVMF.fdThe live session boots straight into the desktop: tty1 autologins the
live user kiwi (password kinini, passwordless sudo — a live-only
convenience the installer removes) and execs startxfce4 — X comes up via
xinit and the Xfce session takes the first console, the way live images
without systemd have always done it (LightDM is shipped and is what the
installer enables on the installed system — a real graphical login there).
The console gettys stay on tty2–tty6 plus root on the serial console. A
labwc Wayland session ships too (kinini-labwc from a console login;
svctl enable seatd first). DHCP is up (dhcpcd), wireless is enabled when
hardware is present, and the PipeWire audio stack starts in the session —
sound with zero configuration. The bird still greets the consoles:
The 0.5 release is desktop-first: graphics, sound, a user and wifi are set up before you touch anything.
- Graphics: an Xfce 4.20 live session (tty1 autologin + startxfce4),
LightDM for installed systems, a labwc Wayland session on the side;
mesais on board. The KiniNi kernel has KMS built in (bochs/virtio-gpu in the kernel; i915, amdgpu, xe and nouveau as modules loaded by udev on the installed system). Modern AMD/NVIDIA cards also need firmware:kipki install linux-firmware. - Sound:
pipewire+wireplumber+pipewire-pulsestart per-user from the session (XDG autostart on Xfce, labwc autostart, orkinini-audio-starton a tty) — ALSA apps route throughalsa-pipewire, Pulse apps through the socket. No config files, no daemon. - User: the installer creates your regular user (in
wheel,video,audio,input) withsudoordoas— see Installing to disk. - Wi-Fi:
wpa_supplicant+kinini-wifi— a wifi-menu-style TUI overwpa_cli: pick a network, type the passphrase, the lease comes from dhcpcd. Networks are saved to/etc/wpa_supplicant/wpa_supplicant.confand carried over from the live session to the installed system by the installer. No NetworkManager. - Power:
kinini-power battery | perf | status— TLP-lite profiles (cpufreq governor + EPP, USB autosuspend, wifi power saving, dirty writeback) that also flip the sched_ext scheduler (battery →scx_lavd, perf →scx_bpfland). The chosen profile persists in/etc/kinini/power.confand is re-applied at every boot by the1.d/85-powerstage-1 task.
kipki speaks to Void repositories through libxbps and adds a compact,
colored CLI on top — transaction preview, repository sync, orphan handling,
holds and a local transaction log:
kipki sync # refresh repository indexes
kipki install vim git # resolve + preview + commit (i, add)
kipki upgrade # update everything (up)
kipki remove vim # remove (rm, del)
kipki autoremove # drop orphans (auto)
kipki search terminal # search name and description (se)
kipki info vim # full package card
kipki list # installed packages (ls)
kipki files vim # file list of an installed package
kipki owns /usr/bin/vim # which package owns this file
kipki deps vim -f # dependencies, -f for the full tree
kipki revdeps glibc # what depends on it
kipki hold linux # pin a package (unhold, held)
kipki clean # clear the package cache
kipki log # local transaction historyOperations on a foreign root: kipki -r /mnt/kinini install vim.
A service is a directory in /etc/niinit/services with an executable run
script. The supervisor restarts it if it dies, svctl talks to it through a
control FIFO:
# /etc/niinit/services/getty-tty1/run
#!/bin/sh
exec agetty --noclear -L tty1 38400 linuxNothing is enabled behind the user's back: services live in
/etc/niinit/services-available until you link them in. sshd, dhcpcd
and scx ship there as optional services — disabled by default in installed
systems unless chosen in the installer (the live ISO turns DHCP on for you):
svctl enable sshd # symlink from services-available, svdir picks it up in <=5s
svctl start sshd # waits until it is actually up
svctl enable dhcpcd # DHCP on wired interfaces (runs dhcpcd -B -M, foreground)
svctl enable scx # sched_ext BPF CPU scheduler (needs: kipki install scx)svctl enable/disable manage those symlinks for you; the supervisor honors
runit conventions: a down file in a service dir prevents auto-start at
boot, and a finish script runs after each service exit with the exit code
and terminating signal as arguments.
Services can also declare dependencies: a deps file inside the service
dir lists service names (whitespace-separated, # comments). niinit-svdir
spawns a service only once every dependency is enabled and up; until
then the service shows blocked (waiting for dep 'x') in svctl status.
Dependencies resolve transitively, a dependency cycle is visible in the
stat files instead of hanging silently, and — runit semantics — a running
service is not stopped when its dependency goes down.
svctl status # overview with pid and uptime
svctl restart sshd # up / down / start / stop / restart / once
svctl pause sshd # SIGSTOP / SIGCONT (cont)
hup, alarm, int, quit, usr1, usr2, term # raw signals to the service
svctl check sshd # exit 0 only if up (waits up to -w SEC)
reboot # svctl in disguise: signals PID 1
poweroff # same story
halt # and even thatThe boot itself is three stages, exactly like runit: /etc/niinit/1 mounts
pseudo-filesystems and brings up udev, stage 2 supervises services until
shutdown, and /etc/niinit/3 unmounts everything back. PID 1 gives every
process a grace period to exit on TERM before the final KILL, then runs
stage 3.
Stage 1 is parallel where it can be: after the critical path (base mounts +
udevd) the independent work — udev event replay, sysctl tuning, module
loading, hugepage policy, bpffs/debugfs, loopback, encrypted swap from
crypttab, zram — runs concurrently from /etc/niinit/1.d/, ordered by
<task>.deps files. niinit-parallel waits for dependencies, skips the
dependents of a failed task and reports cycles; a failed task never stops
the boot.
The live ISO ships a complete installer. Boot the ISO (BIOS or UEFI — the
installer autodetects the firmware via /sys/firmware/efi/efivars) and run
as root:
kiwi-install -D /dev/sda -y # BIOS: msdos + extlinux
kiwi-install -D /dev/nvme0n1 -y # UEFI (autodetected): GPT + ESP + grub
kiwi-install -D /dev/sda -b uefi -y # force UEFI layout on a BIOS boot
kiwi-install -D /dev/sda -s 0 -N -y # no swap partition, no DHCP(since 0.5 the disk is -D; -d selects the desktop)
It partitions the disk, creates a swap partition (default min(2×RAM, 4 GiB),
-s to change) and an ext4 root, copies the live system, un-applies the
live-only tweaks (autologin, the NOPASSWD live sudo, live services), enables
exactly the services you asked for, writes an /etc/fstab and installs a
bootloader — all offline, from binaries shipped inside the ISO:
- BIOS: msdos label, extlinux + syslinux MBR;
- UEFI: GPT with a 512 MiB ESP, and the standalone grub
x86_64-efibinary copied to\EFI\BOOT\BOOTX64.EFI— the removable-drive fallback path that boots on any UEFI machine without touching NVRAM. The loader locates the root filesystem by the/.kinini-livemarker and reads/boot/grub/grub.cfgfrom it.
zram swap is configured in addition to the swap partition (see below). The
root password stays kinini until you change it (passwd). Without -y
the installer walks you through everything with plain pickers: LUKS2
encryption, timezone, locale, the desktop (default: the one
this live session runs — xfce / labwc / none), a regular user (name,
password, sudo/doas/both) and the sched_ext scheduler, then asks for
confirmation and offers to set the root password interactively. After it
finishes, remove the medium and reboot straight into the installed system.
kiwi-install -D /dev/sda -d xfce -y # Xfce + LightDM (default)
kiwi-install -D /dev/sda -d labwc -y # Wayland labwc session
kiwi-install -D /dev/sda -d none -y # console only
kiwi-install -D /dev/sda -u alice -P /root/alicepw -y # user 'alice' + sudo
kiwi-install -D /dev/sda -u alice -P /root/alicepw -A doas -y # doas instead-d enables the matching services: xfce → dbus + seatd + lightdm
(graphical login, X on tty7), labwc → dbus + seatd (log in on a console
and run kinini-labwc), none → console system (the desktop packages stay
installed; enable later with svctl). -u NAME -P FILE creates the user
(first line of the file = password), adds it to wheel,video,audio,input
and writes the wheel rule for the chosen -A admin tool (%wheel ALL= (ALL:ALL) ALL in /etc/sudoers.d/wheel or permit persist :wheel in
/etc/doas.conf). Wireless hardware is detected automatically: the
wpa_supplicant service is enabled and the networks you connected to in
the live session carry over.
Answer y to the encryption question (or pass the flags directly):
kiwi-install -D /dev/sda -e # asks for a passphrase twice
kiwi-install -D /dev/sda -e -p /root/lukskey # scripted installs
kiwi-install -D /dev/sda -e -p /root/lukskey -z Europe/Moscow -l ru_RU.UTF-8 -S scx_lavdThe root partition becomes a LUKS2 container (default argon2id KDF) opened
as /dev/mapper/kinini; the passphrase is asked in the initramfs at every
boot (three attempts, then a rescue shell). The swap partition, when it
exists, is not protected by your passphrase — instead it is re-encrypted
with a fresh random key on every boot via /etc/crypttab (plain dm-crypt,
/dev/urandom key), so no passphrase prompt and nothing sensitive leaks to
disk across reboots. rd.luks.uuid= on the kernel command line ties the
initramfs to the right container.
-z Region/City writes /etc/localtime (interactive continent/city picker
without the flag), -l xx_XX.UTF-8 writes /etc/locale.conf, enables the
locale in /etc/default/libc-locales and regenerates it through
xbps-reconfigure -f glibc-locales. /etc/profile.d/10-locale.sh exports
LANG for login shells. Defaults in -y mode: UTC and en_US.UTF-8.
Both firmware paths — plus a full LUKS2 + Europe/Moscow + ru_RU.UTF-8 +
scx_lavd install — are verified in CI on every push: qemu boots the ISO,
installs it to a virtio disk, reboots from disk and checks login, DHCP
lease, zram, the tuning, the passphrase unlock, the timezone, the locale,
the encrypted swap and the attached scheduler — over the serial console,
for BIOS and OVMF UEFI alike.
KiniNi is not a bare-bones base: the skel ships a tuned profile ported from
CachyOS-Settings, applied at
boot by /etc/niinit/1:
- sysctl (
/usr/lib/sysctl.d/70-kinini-settings.conf): zram-friendlyvm.swappiness=100(150 while zram is active),vfs_cache_pressure=50, absolute dirty-page limits,page-cluster=0, bigmax_map_count, quiet console (printk 3 3 3 3), NMI watchdog off, larger socket/backlog buffers and BBR congestion control with fq pacing; - zram swap (
/usr/bin/zram-swap+/etc/kinini/zram.conf):min(RAM, 32 GiB)of zstd-compressed swap at priority 100 by default, zswap disabled while zram runs — same reasoning as CachyOS; - IO schedulers (
66-kinini-iosched.rules):bfqfor HDDs,mq-deadlinefor SATA/USB SSDs and eMMC,kyberfor NVMe; - watchdog blacklists (
kinini-watchdog.conf): iTCO/sp5100/wdat off — less power, one less module at boot; - amdgpu si/cik support (
kinini-amdgpu.conf) for GCN 1/2 Radeons; - transparent hugepage defrag set to
defer+madviseat boot.
Everything is a plain config file under /etc or /usr/lib — edit
/etc/sysctl.d/*.conf or /etc/kinini/zram.conf to override, no tools
required.
CachyOS's defining feature is the kernel, and KiniNi follows suit: every
installed system boots the KiniNi kernel — a pure vanilla stable (6.18.x,
no patches) built in CI from kernel/kinini-x86_64.config over allnoconfig
with CONFIG_SCHED_CLASS_EXT=y and BTF on. Void's own kernels ship with
sched_ext disabled, so the distro builds its own — everything the installed
system needs (ext4, virtio, AHCI/NVMe, dm-crypt, zram, BFQ/deadline/kyber,
BBR+fq, e1000/virtio-net, USB) is built in, so the boot initramfs carries
no kernel modules at all (only cryptsetup for LUKS unlocking).
The Void scx package (the same upstream
sched-ext/scx tree CachyOS ships)
provides the BPF schedulers themselves. KiniNi integrates them the runit
way, without D-Bus: the scx service runs the configured scheduler in the
foreground under the niinit supervisor, so a crashed scheduler is restarted
automatically and stopping the service falls back to the kernel cleanly.
kipki install scx # scx_lavd, scx_bpfland, scx_flash, ...
kinini-scx on # enable + start the scx service
kinini-scx status # kernel support / configured / running
kinini-scx list # what the scx package ships
kinini-scx use scx_bpfland --now # switch scheduler live, no reboot
kinini-scx top # scxtop, live scheduler/CPU telemetry
kinini-scx log 100 # scheduler log tail
dmesg | grep sched_ext # "BPF scheduler \"scx_bpfland\" enabled"
zcat /proc/config.gz | grep SCHED_CLASS_EXT # the kernel tells its configkinini-scx use validates the scheduler binary, rewrites
SCX_SCHEDULER= in /etc/kinini/scx.conf and — with --now — performs a
supervised restart of the scx service, which is exactly what switching
under CachyOS' scx_loader does, minus D-Bus. Without --now the choice
applies at the next boot or service start.
Scheduler cheat-sheet (same picks as the CachyOS wiki):
| Scheduler | Sweet spot |
|---|---|
scx_lavd |
latency-criticality aware dynamic priority — CachyOS default, desktops and gaming |
scx_bpfland |
interactive-first vruntime scheduler, general desktop |
scx_flash |
lightweight EDF, very low overhead — servers and VMs |
scx_p2dq |
pick-two dispatch queues, simple and modern |
scx_rusty |
load-balancing hierarchical buckets |
scx_layered |
policy-driven hierarchical layers for advanced setups |
The installer offers to enable a scheduler (-S scx_lavd to script it,
-S none to skip; scx_lavd is the default in -y mode) and mounts
bpffs + loads sched_ext at boot in stage 1 regardless, so enabling the
service later takes exactly one svctl command. kinini-power profiles
also drive the scheduler: battery selects scx_lavd, perf selects
scx_bpfland — see Desktop out of the box.
For a manual install, point any Linux kernel and bootloader (GRUB, syslinux,
EFISTUB) at the rootfs — /sbin/init is a symlink to niinit, so pass
root=UUID=... rw and optionally init=/sbin/niinit if you prefer to be
explicit. Or skip the manual assembly entirely and use kiwi-install from
the live ISO above. The installed system boots the KiniNi kernel (see
sched_ext above); the live session keeps running the stock Void kernel.
Every push runs three Void Linux container jobs: one builds both components
and runs the test suite (supervisor up/down/restart/once, down files,
finish scripts, crash restart, start/stop/check, enable/disable, signals,
the svdir spawn/stop cycle, service deps, plus the kinini-wifi and
kinini-power smoke tests), the second builds a full rootfs from live Void
repositories and verifies the resulting tree byte by byte, and the third
builds the complete live ISO — static busybox from source, the KiniNi kernel
(vanilla stable compiled with sched_ext + BTF + KMS; the kernel build is
ccache-cached alongside its source tarball, cutting the rebuild from
~2.5 h to under an hour) and a cryptsetup-enabled disk initramfs — then
boots it in qemu — BIOS and OVMF UEFI — installs it to a virtual disk
(three times: a plain install, a desktop + user install and a LUKS2 +
Europe/Moscow + ru_RU.UTF-8 + scx_lavd install), reboots from the installed
systems and checks everything — login, DHCP, zram, the tuning, the
passphrase unlock, the timezone, the locale, the encrypted swap, the
attached scheduler, the created user with its groups and sudo, the dbus/
seatd/lightdm services, the Xorg process and the live Xfce autologin with
PipeWire — over the serial console before uploading the ISO as a workflow
artifact.
The kiwi. It lives in fetch/kiwi.txt, is installed to
/usr/share/kinini/kiwi.txt, and greets every console through the default
fastfetch config shipped in the skel.
BSD-2-Clause. See LICENSE. KiniNi consumes Void Linux binary packages but contains no Void Linux source code.
KiniNi — небольшой дистрибутив Linux на glibc, который не строит собственную экосистему пакетов, а напрямую использует бинарные репозитории Void Linux: тысячи готовых пакетов без сборки. При этом всё, с чем работает пользователь, — собственный код проекта.
Состав:
niinit— свой init в стиле runit (три стадии, супервизия сервисов, сироты-процессы не остаются); runit-совместимый control-FIFO (u d o t k p c h a i q 1 2 x),finish-скрипты,down-файлы;niinit-sv/niinit-svdir/svctl— супервизоры и управление: рестарт при падении,svctl status|up|down|start|stop|restart|once|pause| cont|hup|usr1|usr2|term|check|enable|disable,statusпоказывает pid и uptime, а такжеreboot/poweroff/halt; PID 1 даёт процессам grace-период на корректный выход перед KILL; сервисы могут объявлять зависимости (deps-файл: сервис стартует, только когда все зависимости включены и подняты;svctl statusпоказываетblocked (...), циклы видны в stat);niinit-parallel— параллельный запуск независимых задач stage-1 (/etc/niinit/1.d/): ожидание зависимостей из<task>.deps, пропуск зависимых при падении, обнаружение циклов; падение задачи не останавливает загрузку;kipki— пакетный менеджер на libxbps: транзакции с предпросмотром, поиск, сироты, hold, локальный журнал операций;tools/mkrootfs.sh— сборка корня из репозиториев Void;tools/mkiso.sh— загрузочный live-ISO: live-ядро Void 6.12, initramfs на busybox, isolinux (BIOS) и grub x86_64-efi на ESP (UEFI) в одном гибридном образе, корень на overlayfs; sshd и dhcpcd лежат вservices-available, на live DHCP включён сразу;tools/kiwi-install— установщик на диск: разметка (msdos/GPT), LUKS2-шифрование корня (пароль запрашивается в initramfs при каждой загрузке) с эфемерно шифруемым swap-разделом через/etc/crypttab, выбор часового пояса, локали и рабочего стола (xfce / labwc / none — по умолчанию тот, что в live-сессии), создание обычного пользователя (wheel + sudo/doas), настройка scx-планировщика, копирование live-системы, fstab и загрузчик без сети — extlinux (BIOS) или grub на ESP (UEFI,\EFI\BOOT\BOOTX64.EFI);- desktop из коробки (0.5) — live-ISO грузится сразу в графику:
tty1 автологинит пользователя
kiwiи запускаетstartxfce4(X через xinit — без display manager в live; LightDM достаётся установленной системе), рядом labwc-сессия (kinini-labwcиз консоли); звук — pipewire + wireplumber + pipewire-pulse в сессии пользователя (без конфигов и демонов); Wi-Fi —kinini-wifi, TUI-коннектор в духе wifi-menu надwpa_cli(без NetworkManager), питание —kinini-power(профили battery/perf: governor+EPP, USB autosuspend, энергосбережение wifi, интервал writeback и переключение scx-планировщика; профиль переживает перезагрузку); - tuning — системные настройки в духе CachyOS: sysctl-профиль
(swappiness, vfs_cache_pressure, BBR+fq и т.д.), zram-подкачка
(
zram-swap, zstd, приоритет 100), udev-правила выбора IO-планировщика (bfq/mq-deadline/kyber), блэклисты watchdog'ов, THPdefer+madvise; - sched_ext — BPF-планировщики CPU как в CachyOS: пакет
scx(scx_lavd, scx_bpfland, scx_flash, scx_p2dq, scx_rusty, scx_layered,...), сервисscxгоняет выбранный планировщик под супервизией niinit (без D-Bus, конфиг/etc/kinini/scx.conf), stage-1 монтирует bpffs и грузит модуль sched_ext;kinini-scx— выбор планировщика на лету:status/list/use <имя> --now(живое переключение без перезагрузки) /on/off/top/log; - kinini-kernel — своё ядро как у CachyOS: чистый vanilla 6.18.x
без патчей, собирается в CI из
kernel/kinini-x86_64.configповерх allnoconfig —CONFIG_SCHED_CLASS_EXT=y+ BTF, все нужные драйверы встроены (ext4, virtio, AHCI/NVMe, dm-crypt, zram, bfq/kyber, BBR+fq, USB, evdev, звук HDA) + KMS: bochs/virtio-gpu встроены, i915/amdgpu/xe/ nouveau — модулями в/usr/lib/modules(udev грузит их на установленной системе); initramfs дисковой загрузки по-прежнему без модулей ядра; live-сессия при этом продолжает грузить стандартное ядро Void; - CI-кеш ядра — сборка ядра через ccache с кешированием тарболла исходников (actions/cache): повторная сборка вместо ~2.5 часов занимает меньше часа, зелёный CI стал заметно быстрее;
- маскот — птичка киви, ASCII-арт устанавливается в
/usr/share/kinini/kiwi.txtи показываетсяfastfetch.
Сборка: make (нужны gcc, make, pkg-config, libxbps-devel).
Rootfs: ./tools/mkrootfs.sh /mnt/kinini (на Void или в контейнере
voidlinux/voidlinux, от root).
Live-ISO: IGNORE_PKGS=linux ./tools/mkrootfs.sh /tmp/rootfs \ https://repo-default.voidlinux.org/current base-system linux6.12 fastfetch syslinux dhcpcd dosfstools cryptsetup tzdata glibc-locales scx \ sudo opendoas dbus dbus-x11 lightdm lightdm-gtk-greeter seatd xfce4 xfce4-pulseaudio-plugin pavucontrol labwc foot fuzzel mesa xorg-server xf86-video-fbdev xinit dejavu-fonts-ttf adwaita-icon-theme xdg-user-dirs pipewire wireplumber alsa-pipewire pulseaudio-utils wpa_supplicant dialog iw polkit,
затем ./tools/mkiso.sh /tmp/rootfs kinini.iso. Live-сессия автологинит
kiwi (пароль kinini, sudo без пароля — только live) на tty1 и запускает
Xfce через startxfce4.
Загрузка: три стадии, как в runit; stage-1 после критического пути
(базовые монтирования + udevd) гоняет независимые задачи параллельно из
/etc/niinit/1.d/ (replay uevent, sysctl, модули, THP, bpffs/debugfs,
loopback, шифрованный swap из crypttab, zram) с упорядочиванием через
<task>.deps.
Установка на диск: загрузите ISO (BIOS или UEFI — установщик определяет прошивку сам) и выполните:
kiwi-install -D /dev/nvme0n1 -y # UEFI: GPT + ESP + grub (с 0.5 диск - -D)
kiwi-install -D /dev/sda -y # BIOS: msdos + extlinux
kiwi-install -D /dev/sda -e # с LUKS2: пароль спросит дважды
kiwi-install -D /dev/sda -d xfce -u alice -P /root/pw -y # desktop + юзер
kiwi-install -D /dev/sda -d labwc -y # Wayland-сессия
kiwi-install -D /dev/sda -e -p /root/lukskey -z Europe/Moscow -l ru_RU.UTF-8 -S scx_lavd— разметка, swap-раздел (по умолчанию min(2×RAM, 4 ГиБ), при LUKS —
эфемерно шифруемый свежим ключом при каждой загрузке), копирование
системы, fstab, DHCP-сервис, часовой пояс и локаль (/etc/locale.conf +
генерация через glibc-locales), выбор DE (-d: xfce — dbus+seatd+
lightdm; labwc — dbus+seatd, вход из консоли через kinini-labwc; none —
консольная система), обычный пользователь (-u имя -P файл-с-паролем,
группы wheel/video/audio/input + правило для -A sudo|doas), Wi-Fi —
при наличии беспроводного железа wpa_supplicant включается автоматически,
сети из live-сессии переезжают, загрузчик — всё без сети. Без -y
установщик проводит по всем пунктам интерактивными меню (шифрование,
пояс, локаль, DE, пользователь, планировщик). Оба пути (BIOS и
OVMF/UEFI), сценарий desktop+пользователь и полный сценарий LUKS2 +
Europe/Moscow + ru_RU.UTF-8 + scx_lavd проверяются в CI на каждый пуш:
QEMU грузит ISO, ставит систему на виртуальный диск и перезагружается с
неё, проверяя вход, DHCP, zram, настройки, разблокировку LUKS, часовой
пояс, локаль, шифрованный swap, планировщик, пользователя с группами и
sudo, сервисы dbus/seatd/lightdm, Xorg и live-автологин с PipeWire по
serial-консоли.
Desktop: в live автологин в Xfce под kiwi; Wi-Fi подключается через
kinini-wifi (меню сетей, ввод пароля, сохранение), звук появляется сам
(pipewire в сессии), питание — kinini-power battery|perf|status.
sched_ext (CachyOS-style): kipki install scx, затем
svctl enable scx && svctl start scx; планировщик выбирается в
/etc/kinini/scx.conf (по умолчанию scx_lavd — дефолт CachyOS), сервис
держит его под супервизией: упал — перезапущен, остановили — ядро
возвращается к EEVDF. Список планировщиков и их профили — как в вики
CachyOS: scx_lavd (десктоп/игры), scx_bpfland (интерактивность),
scx_flash (серверы/ВМ), scx_p2dq, scx_rusty, scx_layered.
Загрузка: /sbin/init — симлинк на niinit, так что достаточно любого
ядра и загрузчика; либо просто установите систему через kiwi-install.
Лицензия: BSD-2-Clause.

