Interaktywny installer Void Linux z interfejsem TUI (gum/dialog). Przeprowadza za rękę przez cały proces instalacji — od partycjonowania dysku po działający desktop KDE Plasma. Po awarii: ./install.sh --resume skanuje dyski i wznawia od ostatniego checkpointu.
Pobierz Void Linux Live ISO (wariant base lub xfce):
- https://voidlinux.org/download/ → x86_64 → Live ISO (base lub xfce)
Nagraj na pendrive (Linux/macOS):
# UWAGA: /dev/sdX to twój pendrive, nie dysk systemowy!
sudo dd if=void-live-x86_64-*.iso of=/dev/sdX bs=4M status=progress
syncNa Windows użyj Rufus lub balenaEtcher.
- Wejdź do BIOS/UEFI (zwykle F2, F12, Del przy starcie)
- Secure Boot — możesz zostawić włączony (installer obsługuje MOK signing) lub wyłączyć
- Ustaw boot z USB
- Wybierz opcję UEFI (nie Legacy/CSM!)
Surface: Vol+ przy starcie → UEFI. Vol- przy starcie → boot menu (wybierz USB).
Void Live ISO loguje automatycznie jako root (hasło: voidlinux).
Powinno działać od razu. Sprawdź:
ping -c 3 voidlinux.orgOpcja A: wpa_supplicant — dostępny na Void Live ISO:
# Znajdź interfejs WiFi
ip link show
# Włącz interfejs
ip link set wlan0 up
# Połącz
wpa_supplicant -B -i wlan0 -c <(wpa_passphrase "NazwaTwojejSieci" "TwojeHaslo")
dhcpcd wlan0Opcja B: nmcli (NetworkManager) — na xfce live:
nmcli device wifi list
nmcli device wifi connect 'NazwaTwojejSieci' password 'TwojeHaslo'Sprawdź połączenie:
ping -c 3 voidlinux.orgxbps-install -Sy git
git clone https://github.com/szoniu/void.git
cd void
./install.shBłąd SSL przy
git clone? Zegar systemowy może być przestarzały. Ustaw datę:date -s "2026-03-05 12:00:00"(wstaw aktualną).
Permission denied (publickey)? Użyj adresu HTTPS (jak wyżej), nie SSH (git@github.com:...). Live ISO nie ma Twoich kluczy SSH.
Installer poprowadzi Cię przez 17 ekranów konfiguracji, a potem zainstaluje wszystko automatycznie.
Po zakończeniu installer zapyta czy chcesz rebootować. Wyjmij pendrive i uruchom komputer — powinieneś zobaczyć GRUB, a potem ekran logowania SDDM z KDE Plasma.
Po zalogowaniu — aktualizacja systemu i pakietów:
sudo xbps-install -Su# Tylko konfiguracja (generuje plik .conf, nic nie instaluje)
./install.sh --configure
# Instalacja z gotowego configa (bez wizarda)
./install.sh --config moj-config.conf --install
# Wznów po awarii (skanuje dyski w poszukiwaniu checkpointów)
./install.sh --resume
# Dry-run — przechodzi cały flow BEZ dotykania dysków
./install.sh --dry-run- Komputer z UEFI (nie Legacy BIOS)
- Secure Boot — obsługiwany (MOK/shim) lub wyłączony
- Minimum 10 GiB wolnego miejsca na dysku docelowym
- Połączenie z internetem (LAN lub WiFi)
- Bootowalny pendrive z Void Live ISO (lub dowolne live z
bashigit)
17 ekranów TUI prowadzi przez:
| # | Ekran | Co konfigurujesz |
|---|---|---|
| 1 | Welcome | Sprawdzenie wymagań (root, UEFI, sieć) |
| 2 | Preset | Opcjonalne załadowanie gotowej konfiguracji |
| 3 | Hardware | Podgląd wykrytego CPU, GPU, dysków, peryferiali, zainstalowanych OS-ów (w tym Microsoft Surface i Secure Boot) |
| 4 | Dysk | Wybór dysku + schemat (auto/dual-boot/manual) + shrink wizard |
| 5 | Filesystem | ext4 / btrfs (ze subvolumes) / XFS |
| 6 | Swap | zram (domyślnie) / partycja / plik / brak |
| 7 | Sieć | Hostname + mirror Void |
| 8 | Locale | Timezone, język, keymap |
| 9 | Kernel | mainline (rolling) / LTS (stabilny) / surface-patched (kompilowany ze źródeł, na Surface) |
| 10 | Secure Boot | Opcjonalne podpisanie kernela i GRUB-a (MOK/shim). Tylko na EFI. |
| 11 | GPU | Auto-wykryty sterownik + hybrid GPU (PRIME offload) + NVIDIA open |
| 12 | Desktop | KDE/GNOME + wybór aplikacji (Firefox, Thunderbird, Kate...) |
| 13 | Użytkownicy | Hasło root, konto użytkownika, grupy |
| 14 | Pakiety | Dodatkowe pakiety + wykryte peryferiale (Bluetooth, fingerprint, Thunderbolt, IIO sensors, webcam, WWAN) + ASUS ROG/TUF tools + Surface tools (iptsd) + Hyprland + Noctalia Shell |
| 15 | Preset save | Opcjonalny eksport konfiguracji na przyszłość |
| 16 | Podsumowanie | Pełny przegląd + potwierdzenie "YES" + countdown |
| 17 | Instalacja | Progress bar + live output z chroot |
Installer automatycznie wykrywa i konfiguruje:
- GPU — NVIDIA, AMD, Intel. W laptopach z dwoma kartami (np. Intel iGPU + NVIDIA dGPU) wykrywa hybrid GPU i konfiguruje PRIME render offload. Obsługuje NVIDIA open kernel module (Turing+).
- Microsoft Surface — wykrywanie przez DMI (sys_vendor + product_name). Oferuje kernel surface-patched (kompilacja ze źródeł z patchami linux-surface) i iptsd (touchscreen daemon dla urządzeń z IPTS). Surface Laptop Go nie wymaga iptsd — touchscreen działa na standardowym kernelu.
- ASUS ROG/TUF — wykrywanie przez DMI sysfs. Gdy wykryty, oferuje instalację
asusctl(sterowanie wentylatorami, RGB, profile wydajności) z serwisemasusd. - Secure Boot — wykrywanie stanu EFI. Opcjonalne podpisywanie kernela i GRUB-a kluczem MOK, shim z Fedory (podpisany przez Microsoft UEFI CA). Przy pierwszym restarcie MokManager pyta o enrollment klucza (hasło:
void). Hook w/etc/kernel.d/automatycznie podpisuje kernel przy aktualizacjach XBPS. - Peryferiale — 6 automatycznych detekcji: Bluetooth, czytnik linii papilarnych (fprintd + PAM config dla SDDM/KDE), Thunderbolt (bolt), czujniki IIO (iio-sensor-proxy), kamera, WWAN/LTE (ModemManager). Wykryte urządzenia pojawiają się jako opcje w ekranie pakietów.
Oprócz KDE Plasma, installer oferuje dwa opcjonalne środowiska Wayland (ekran 13 — Pakiety):
- Hyprland ecosystem — standalone ekosystem tiling Wayland compositor: Hyprland + hyprpaper, hypridle, hyprlock, waybar, wofi, mako, grim, slurp, wl-clipboard, brightnessctl. Niezależny od Noctalia i KDE.
- Noctalia Shell — nowoczesny Wayland shell (oparty na Quickshell) z wyborem kompozytora: Hyprland, niri lub sway. Instalowany z repozytorium third-party (
noctalia-void-repo). Generuje gotową konfigurację kompozytora z autostartowaniem Noctalia Shell i keybindami IPC.
Obie opcje można wybrać niezależnie od siebie i od KDE Plasma.
Installer automatycznie:
- Wykrywa zainstalowane OS-y (Windows, Ubuntu, Fedora, openSUSE, Arch, etc.)
- Wykrywa istniejący ESP z Windows Boot Manager i innymi bootloaderami
- Reuse'uje ESP (nigdy go nie formatuje!)
- GRUB instaluje się do
EFI/void/obokEFI/Microsoft/i innych os-proberdodaje wszystkie wykryte OS-y do menu GRUB- Partycje z istniejącymi OS-ami są oznaczone w menu — przypadkowe nadpisanie wymaga potwierdzenia
ERASE - Po instalacji weryfikuje czy GRUB i wpisy EFI zawierają wszystkie OS-y
Gdy brakuje miejsca na dysku, installer oferuje shrink wizard — zmniejszenie istniejącej partycji (NTFS/ext4/btrfs) z marginesem bezpieczeństwa 1 GiB.
Przykładowy preset w presets/example.conf.
Presety są przenośne między maszynami — wartości sprzętowe (CPU, GPU, dysk, peryferiale) są automatycznie re-wykrywane przy imporcie. Konfigurujesz raz, instalujesz na wielu komputerach.
Możesz wyeksportować własny preset w ekranie 14 wizarda.
Gdy komenda się nie powiedzie, installer wyświetli menu recovery:
- (r)etry — ponów komendę (np. po naprawieniu problemu w shellu)
- (s)hell — wejdź do shella, napraw ręcznie, wpisz
exitżeby wrócić - (c)ontinue — pomiń ten krok i kontynuuj (ostrożnie!)
- (l)og — pokaż log błędu
- (a)bort — przerwij instalację
Jeśli instalacja została przerwana (OOM kill, zawieszenie, utrata SSH, przerwa w prądzie), możesz wznowić jedną komendą:
./install.sh --resume--resume automatycznie:
- Skanuje wszystkie partycje (ext4/btrfs/xfs) w poszukiwaniu danych z poprzedniej instalacji
- Odzyskuje checkpointy (informacje o ukończonych fazach) i plik konfiguracji
- Jeśli config nie przetrwał — próbuje go odtworzyć z zainstalowanego systemu (fstab, xbps.d, rc.conf, hostname, locale...)
- Pomija już ukończone fazy i kontynuuje od miejsca przerwania
Co przetrwało na dysku docelowym:
- Checkpointy — pliki w
/tmp/void-installer-checkpoints/na partycji docelowej - Config —
/tmp/void-installer.confna partycji docelowej (zapisywany po fazie partycjonowania)
Ręczna alternatywa (jeśli --resume nie zadziała):
# 1. Zamontuj dysk docelowy
mount /dev/sdX2 /mnt/void
# 2. Skopiuj checkpointy
cp -a /mnt/void/tmp/void-installer-checkpoints/* /tmp/void-installer-checkpoints/
# 3. Skopiuj config (jeśli istnieje)
cp /mnt/void/tmp/void-installer.conf /tmp/void-installer.conf
# 4. Odmontuj i uruchom normalnie
umount /mnt/void
./install.shPodczas instalacji masz dostęp do wielu konsol. Przełączaj się przez Ctrl+Alt+F1...F6:
- TTY1 — installer
- TTY2-6 — wolne konsole do debugowania
Na drugim TTY możesz:
# Podgląd co się dzieje
top
# Log installera
tail -f /tmp/void-installer.log # przed chroot
tail -f /mnt/void/tmp/void-installer.log # w chroot
# Sprawdź czy coś nie zawiesiło się
ps aux | grep -E "tee|xbps"Na maszynie docelowej (bootowanej z Live ISO):
# 1. Ustaw hasło root
passwd root
# 2. Zainstaluj openssh
xbps-install -Sy openssh
# 3. Wygeneruj klucze hosta (bez tego sshd nie wystartuje!)
ssh-keygen -A
# 4. Zezwól na logowanie root z hasłem
# Void domyślnie blokuje root login — trzeba to włączyć ręcznie:
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
# 5. Uruchom sshd
ln -sf /etc/sv/sshd /var/service/sshd
# 6. Sprawdź czy działa
sv status sshd # powinno: run
ss -tlnp | grep 22 # powinno: LISTEN
# 7. Sprawdź IP
ip -4 addr show | grep inetUwaga: Void Live ISO nie ma domyślnie zainstalowanego
nanoanivim. Jeśli potrzebujesz edytora:xbps-install -Sy nano.
Z innego komputera:
ssh root@<IP-live-ISO>
xbps-install -Sy git
git clone https://github.com/szoniu/void.git
cd void
./install.shRozwiązywanie problemów z SSH:
Connection reset by peer— sshd nie działa. Sprawdź:sv status sshd. Jeśli brak — upewnij się żessh-keygen -Awygenerowało klucze hosta w/etc/ssh/.Permission denied (publickey)— Void domyślnie nie pozwala na logowanie root z hasłem. DodajPermitRootLogin yesdo/etc/ssh/sshd_configisv restart sshd.Permission denied, please try again— hasło jest złe lub nie zostało ustawione. Uruchompasswd rootponownie na maszynie docelowej.
Ważne: Jeśli połączenie SSH się zerwie, instalacja w zwykłej sesji zostanie przerwana. Zawsze uruchamiaj installer w tmux:
# Na Live ISO (po połączeniu SSH):
xbps-install -Sy tmux
tmux new -s install
# Sklonuj repo i uruchom installer wewnątrz tmux
git clone https://github.com/szoniu/void.git
cd void
./install.shJeśli połączenie SSH się zerwie:
# Połącz się ponownie i wróć do sesji
ssh root@<IP-live-ISO>
tmux attach -t installInstalacja będzie nadal działać w tle — nic nie stracisz.
Otwórz drugie okno terminala (lub drugi panel tmux — Ctrl+B potem "):
ssh root@<IP-live-ISO>
# Logi w czasie rzeczywistym
tail -f /tmp/void-installer.log # przed chroot
tail -f /mnt/void/tmp/void-installer.log # w chroot
# Co się instaluje
topgit clone— SSL certificate not yet valid — zegar systemowy jest przestarzały. Ustaw datę:date -s "2026-03-05 12:00:00"(wstaw aktualną).git clone— Permission denied (publickey) — użyj HTTPS:git clone https://github.com/szoniu/void.git, nie SSH (git@github.com:...).- Preflight: "Network connectivity required" — installer pinguje
voidlinux.orgigoogle.com. Jeśli sieć działa ale DNS nie, dodaj ręcznie:echo "nameserver 8.8.8.8" >> /etc/resolv.conf. Installer próbuje to naprawić automatycznie (ensure_dns).
- xbps-install — "Name or service not known" — DNS przestał działać. Na innym TTY (
Ctrl+Alt+F2) wpisz:echo "nameserver 8.8.8.8" >> /etc/resolv.conf, wróć na TTY1 i wybierzr(retry). - Installer zawisł, nic się nie dzieje — sprawdź na TTY2 (
Ctrl+Alt+F2) czyxbps-installdziała wtop. Jeśli tak — pobieranie/instalacja trwa, po prostu czekaj. - Przerwa w prądzie / reboot — uruchom
./install.sh --resume, automatycznie wznowi od ostatniego checkpointu. - Menu "retry / shell / continue / abort" — installer napotkał błąd.
r= spróbuj ponownie,s= otwórz shell i napraw ręcznie (potemexit),c= pomiń ten krok,a= przerwij instalację.
- Log — pełny log instalacji:
/tmp/void-installer.log(przed chroot) i/mnt/void/tmp/void-installer.log(w chroot) - Coś jest nie tak z konfiguracją — użyj
./install.sh --configureżeby przejść wizarda ponownie
Installer ma trzy backendy TUI (w kolejności priorytetu):
- gum (domyślny) — nowoczesny, zaszyty w repo jako
data/gum.tar.gz(~4.5 MB). Ekstrahowany automatycznie do/tmpna starcie. Zero dodatkowych zależności. - dialog — klasyczny TUI, dostępny na większości live ISO
- whiptail — fallback gdy brak
dialog
Backend jest wybierany automatycznie. Żeby wymusić fallback na dialog/whiptail:
GUM_BACKEND=0 ./install.shŻeby zaktualizować bundlowaną wersję gum:
# 1. Pobierz nowy tarball (podmień wersję)
curl -fSL -o data/gum.tar.gz \
"https://github.com/charmbracelet/gum/releases/download/v0.18.0/gum_0.18.0_Linux_x86_64.tar.gz"
# 2. Zaktualizuj GUM_VERSION w lib/constants.sh (musi pasować)
# : "${GUM_VERSION:=0.18.0}"Własne skrypty uruchamiane przed/po fazach instalacji:
cp hooks/before_install.sh.example hooks/before_install.sh
chmod +x hooks/before_install.sh
# Edytuj hook...Dostępne hooki: before_install, after_install, before_preflight, after_preflight, before_disks, after_disks, before_rootfs, after_rootfs, before_xbps_preconfig, after_xbps_preconfig, before_xbps_update, after_xbps_update, before_system_config, after_system_config, before_kernel, after_kernel, before_fstab, after_fstab, before_networking, after_networking, before_bootloader, after_bootloader, before_secureboot, after_secureboot, before_swap, after_swap, before_desktop, after_desktop, before_users, after_users, before_extras, after_extras, before_finalize, after_finalize.
./install.sh [OPCJE] [POLECENIE]
Polecenia:
(domyślnie) Pełna instalacja (wizard + install)
--configure Tylko wizard konfiguracyjny
--install Tylko instalacja (wymaga configa)
--resume Wznów po awarii (skanuje dyski)
Opcje:
--config PLIK Użyj podanego pliku konfiguracji
--dry-run Symulacja bez destrukcyjnych operacji
--force Kontynuuj mimo nieudanych prereq
--non-interactive Przerwij na każdym błędzie (bez recovery menu)
--help Pokaż pomoc
Zmienne środowiskowe:
GUM_BACKEND=0 Wymuś fallback na dialog/whiptail (pomiń gum)
bash tests/test_config.sh # Config round-trip
bash tests/test_hardware.sh # GPU database
bash tests/test_disk.sh # Disk planning dry-run z sfdisk
bash tests/test_checkpoint.sh # Checkpoint validate + migrate
bash tests/test_resume.sh # Resume from disk scanning + recovery
bash tests/test_multiboot.sh # Multi-boot OS detection + serialization
bash tests/test_infer_config.sh # Config inference from installed systemWszystkie testy są standalone — nie wymagają root ani hardware. Używają DRY_RUN=1 i NON_INTERACTIVE=1.
install.sh — Główny entry point
configure.sh — Wrapper: tylko wizard TUI
lib/ — Moduły biblioteczne (sourcowane, nie uruchamiane)
tui/ — Ekrany TUI (każdy = funkcja, return 0/1/2)
data/ — GPU database, mirrors, motyw TUI, bundled gum binary
presets/ — Gotowe presety
hooks/ — Hooki (*.sh.example)
tests/ — Testy
TODO.md — Planowane ulepszenia
P: Jak długo trwa instalacja?
Void instaluje pakiety binarne (XBPS), więc 15-30 minut w zależności od łącza. Wyjątek: kernel surface-patched kompiluje kernel ze źródeł (~30-60 min) i iptsd ze źródeł (~2 min). Standardowy kernel mainline/lts nie kompiluje niczego.
P: Mogę zainstalować na VM?
Tak, ale upewnij się że VM jest w trybie UEFI. W VirtualBox: Settings → System → Enable EFI. W QEMU: dodaj -bios /usr/share/ovmf/OVMF.fd.
P: Co jeśli mam Secure Boot?
Installer obsługuje Secure Boot! Na ekranie 10 wybierz "Yes" — installer wygeneruje klucze MOK, podpisze kernel i GRUB, pobierze shim z Fedory. Przy pierwszym restarcie MokManager poprosi o enrollment klucza (hasło: void). Przyszłe aktualizacje kernela są podpisywane automatycznie. Jeśli używasz NVIDIA proprietary drivers, wyłącz Secure Boot — moduły NVIDIA nie są podpisane.
P: Mogę zainstalować na Microsoft Surface? Tak. Installer wykrywa Surface przez DMI i oferuje dodatkowe opcje: kernel surface-patched (kompilacja ze źródeł z patchami linux-surface, ~30-60 min) i iptsd (touchscreen daemon). Surface Laptop Go nie wymaga ani surface-patched ani iptsd — standardowy kernel mainline obsługuje cały hardware (touchscreen HID, WiFi, GPU, fingerprint). Secure Boot działa przez MOK/shim.
P: Mogę użyć innego live ISO niż Void?
Tak, dowolne live ISO z Linuxem zadziała, pod warunkiem że ma bash, git, sfdisk, wget, tar, sha256sum, chroot. Installer ma zaszyty gum jako backend TUI, więc dialog/whiptail nie jest wymagany.
P: Co jeśli gum nie działa?
Installer automatycznie użyje dialog lub whiptail jako fallback. Możesz też wymusić fallback: GUM_BACKEND=0 ./install.sh.
P: Dlaczego runit, a nie systemd?
Void Linux używa runit jako domyślnego systemu init. Installer jest w pełni dostosowany do runit (serwisy przez symlinki w /var/service/, elogind zamiast systemd-logind, zramen zamiast zram-generator).
P: Co to jest base-voidstrap → base-system?
ROOTFS tarball zawiera minimalny pakiet base-voidstrap. Installer automatycznie zamienia go na pełny base-system podczas pierwszej aktualizacji XBPS. To standardowa procedura Void Linux.
P: Mam multi-boot (kilka Linuxów). Po aktualizacji kernela inne systemy zniknęły z GRUB. Ostatni zainstalowany GRUB jest master bootloaderem. Po aktualizacji kernela w dowolnym systemie trzeba odświeżyć GRUB:
sudo grub-mkconfig -o /boot/grub/grub.cfgWystarczy uruchomić z dowolnego systemu, który ma GRUB + os-prober. Jeśli używasz ~/dotfiles aktualizatora, robi to automatycznie.
P: Zapomniałem odświeżyć GRUB i po restarcie nie widzę innych systemów. Systemy dalej są na dysku — nic nie zostało usunięte. Wystarczy:
- Uruchom dowolny z widocznych systemów
- Upewnij się że
os-proberjest zainstalowany (xbps-install -S os-prober) - Uruchom
sudo grub-mkconfig -o /boot/grub/grub.cfg - Restart — wszystkie systemy powinny być widoczne
Jeśli żaden system nie startuje (uszkodzony GRUB), boot z Live USB i napraw z chroot:
mount /dev/<root-partycja> /mnt
mount /dev/<esp> /mnt/boot/efi
mount --rbind /dev /mnt/dev && mount --rbind /sys /mnt/sys && mount -t proc /proc /mnt/proc
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg