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.
Rdzeń jest dojrzały i na parytecie z działającym instalatorem Gentoo. Pełny zestaw: 17 plików testowych (blisko 700 asercji) + shellcheck (65 plików czystych) — wszystko zielone.
- ✅ Instalacja na czystym dysku (
scheme=auto, x86_64) — bezpieczna. - ✅ Dual-boot / shrink — dodano twardą bramkę bezpieczeństwa (odmowa zmniejszenia poniżej zajętego miejsca + margines 1 GiB, dry-run NTFS) oraz odporne liczenie numeru partycji. Standardowe zalecenie kopii zapasowej przed dual-bootem nadal obowiązuje.
- ✅ Guard architektury — na nie-x86_64 instalator przerywa od razu, przed dotknięciem dysku.
- ✅ Bezpieczeństwo pobierania — wymuszony HTTPS dla mirrora, kontrole integralności shima.
- ✅
--resume— nie maskuje błędów montowania; chroot zawsze z aktualną kopią instalatora i podmontowanym ESP; checkpoint kernela respektuje zmianę typu jądra. - ✅
--resumenie formatuje dysku, na którym już jest system — brak checkpointudisksnie znaczy „pusty dysk"; sonda read-only (_resume_target_has_system) blokuje destrukcyjny plan. - ✅ Konta zakładane PRZED kernelem i desktopem — awaria długiej fazy nie zostawia już systemu, do którego nie da się zalogować.
- ✅ Wi-Fi w instalatorze (ekran 4) — wpa_supplicant/dhcpcd albo NetworkManager, zależnie od tego, co jest na live medium. Sieć trafia też do zainstalowanego systemu.
- ✅ Flatpak skonfigurowany, nie tylko zainstalowany — remote Flathub, portal pod wybrane środowisko i
XDG_DATA_DIRS(bez tego aplikacje nie pojawiały się w menu). - ✅ Snapshoty btrfs — snapper + grub-btrfs: godzinny timeline, sprzątanie, snapshoty widoczne w menu GRUB,
xbps-snapshot -Suopakowuje aktualizację w parę snapshotów. - ✅ Naprawione zamrożone menu GRUB przy Secure Boot — podpisany standalone dostaje stub przekierowujący zamiast wkompilowanego menu (wcześniej nowe kernele znikały z listy startowej).
- ✅ Tryb Wayland-only — instalacja bez
xorg-server(zostaje Xwayland dla apek X11). Na KDE greeter SDDM przełączany na Wayland; na GNOME GDM zastępowany przez greetd+tuigreet, bo sam GDM ciągnie Xorg. - ✅ Szyfrowanie dysku (LUKS) — kontener LUKS1 na partycji root, GRUB z
cryptodisk, keyfile w initramfs (jedno pytanie o hasło zamiast dwóch). Hasło nigdy nie trafia do configu, logu ani dops. - ✅ TRIM na SSD — runit nie ma
fstrim.timer, więc instalator zakłada cotygodniowe zadaniefstrim -av(i otwiera bramkę anacrona „na baterii", inaczej na laptopie nigdy by nie ruszyło). Na zaszyfrowanym roocie TRIM jest opt-in — patrz sekcja o LUKS-ie. - ✅ Czytelna czcionka konsoli — na panelu HiDPI instalator proponuje
terminus-fontdobrany do rozdzielczości. Konsola tekstowa to dokładnie ten ekran, na którym lądujesz, gdy sesja graficzna nie wstaje. - ✅ Intel Maki (pre-T2) — GRUB na ścieżce removable, applespi w initramfs, wykrywanie macOS/APFS. T2 (2018+) jawnie niewspierane.
Szczegóły napraw w CLAUDE.md → „Readiness status".
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.orgNajprościej: nie rób nic. Installer ma własny ekran Wi-Fi (ekran 4) — pokazuje się automatycznie, gdy sieci nie ma. Skanuje, pyta o hasło i podnosi link (NetworkManagerem, jeśli live go ma; inaczej wpa_supplicant + dhcpcd). Wybrana sieć jest zapisywana do instalowanego systemu, więc pierwszy boot wstaje online.
Hasło nigdy nie trafia do argumentów procesu (ps) — wpa_passphrase czyta je ze
stdin, a zapisywany jest wyłącznie wyliczony 64-znakowy PSK.
Jeśli wolisz zrobić to ręcznie przed uruchomieniem installera:
Opcja 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 desktopowych wariantach live (xfce, gnome, kde):
nmcli device wifi list
nmcli device wifi connect 'NazwaTwojejSieci' password 'TwojeHaslo'Na tych wariantach jest też aplet w tacce — Wi-Fi klika się myszką, bez terminala.
Laptop bez portu Ethernet (MacBook 12", ultrabook z samym USB-C): weź wariant xfce zamiast
base— dostajesz aplet Wi-Fi i przeglądarkę. Firmware sieciowe (w tym Broadcom) jest na każdym wariancie:linux-baseciągnielinux-firmware-network.
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 (osiemnasty to już sama instalacja), 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 -SuReszta środowiska (motywy, ekosystem niri/Waybar, narzędzia CLI) idzie z repo dotfiles:
git clone https://github.com/szoniu/dotfiles.git ~/dotfiles
bash ~/dotfiles/wizard.sh --install-allLogi instalacji zostają na dysku: /var/log/void-installer.log (faza chroot),
-outer.log (dyski/ROOTFS) i -skipped.log (kroki pominięte po błędzie).
# 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- Architektura x86_64 (instalator i bundlowany gum/ROOTFS są wyłącznie x86_64; na innych architekturach instalator bezpiecznie przerywa przed dotknięciem dysku)
- 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 — installer ma ekran konfiguracji Wi-Fi)
- Bootowalny pendrive z Void Live ISO (lub dowolne live z
bashigit)
18 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 | WiFi | Pomijany, gdy sieć działa. Skan SSID + hasło; profil trafia też do instalowanego systemu |
| 5 | Dysk | Wybór dysku + schemat (auto/dual-boot/manual) + shrink wizard |
| 6 | Filesystem | ext4 / btrfs (ze subvolumes) / XFS + szyfrowanie LUKS (a przy nim pytanie o TRIM) |
| 7 | Swap | zram (domyślnie) / partycja / plik / brak |
| 8 | Sieć | Hostname + mirror Void |
| 9 | Locale | Timezone, język, keymap + czcionka konsoli (propozycja pod rozdzielczość panelu) |
| 10 | Kernel | mainline (rolling) / LTS (stabilny) / surface-patched (kompilowany ze źródeł, na Surface) |
| 11 | Secure Boot | Opcjonalne podpisanie kernela i GRUB-a (MOK/shim). Tylko na EFI. |
| 12 | GPU | Auto-wykryty sterownik + hybrid GPU (PRIME offload) + NVIDIA open |
| 13 | Desktop | KDE/GNOME + tryb Wayland-only (bez xorg-server) + wybór aplikacji |
| 14 | Użytkownicy | Hasło root, konto użytkownika, grupy |
| 15 | Pakiety | Dodatkowe pakiety + wykryte peryferiale (Bluetooth, fingerprint, Thunderbolt, IIO sensors, webcam, WWAN) + ASUS ROG/TUF tools + Surface tools (iptsd) + niri + Hyprland + Noctalia Shell |
| 16 | Preset save | Opcjonalny eksport konfiguracji na przyszłość |
| 17 | Podsumowanie | Pełny przegląd + potwierdzenie "YES" + countdown |
| 18 | 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. - Intel Mac (MacBook/iMac, pre-T2) — wykrywanie po DMI. GRUB ląduje także na ścieżce removable (
EFI/BOOT/BOOTX64.EFI), bo firmware Apple gubi wpisy NVRAM; moduły SPI (applespi) trafiają do initramfs, inaczej po pierwszym boocie nie ma klawiatury; dokładany jestbroadcom-bt-firmware. Partycje macOS (APFS/HFS+) są rozpoznawane po GPT GUID, więc trybautożąda wpisaniaERASEzamiast po cichu wyczyścić dysk. Maki z T2 (2018+) są jawnie niewspierane. Szczegóły:docs/macbook-apple.md. - Zasilanie laptopa — po wykryciu baterii instalowany jest
power-profiles-daemon(bez niego aplet zasilania w GNOME/KDE nie ma żadnych profili) orazthermaldna Intelu. - 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.
- Panel HiDPI — instalator czyta rozdzielczość wbudowanego ekranu i proponuje czcionkę konsoli z
terminus-font(ter-v20n/ter-v28n/ter-v32n, dobrane po dłuższej krawędzi panelu — UMPC bywają natywnie portretowe). Poniżej 1920 px nie proponuje nic: fabryczna czcionka VGA jest wtedy w porządku, a zbędny pakiet to nie ulepszenie. Nazwa jest weryfikowana już w chroocie —FONT=wskazujące na nieistniejącą czcionkę zostawiłoby popsutą konsolę, czyli dokładnie tę awarię, przed którą ta opcja ma chronić. - Dysk SSD — runit nie ma
fstrim.timer, więc na dysku nierotacyjnym instalator zakłada/etc/cron.weekly/fstrim. Anacron na Voidzie domyślnie pomija zadania na baterii, więc instalator otwiera też tę bramkę — inaczej na laptopie zadanie nie odpaliłoby się nigdy.
Oprócz KDE Plasma i GNOME, installer oferuje opcjonalne środowiska Wayland (ekran 15 — Pakiety):
- niri ecosystem — scrollable-tiling compositor:
niri+xwayland-satellite(bez tego apki X11 nie ruszą — niri nie ma wbudowanego Xwaylanda),Waybar,fuzzel,mako,swaylock/swayidle/swaybg,grim,slurp,wl-clipboard,brightnessctl. Wszystko z oficjalnego repo Void. Instalator pisze też minimalnyconfig.kdl(na sprzęcie Apple zescale 1.5) iniri-portals.conf— bez tego okna wyboru pliku w GTK/Electronach nie pojawiają się w ogóle. Sesja niri wyświetla się w GDM/SDDM obok GNOME/KDE. - Hyprland ecosystem — Hyprland + hyprpaper, hypridle, hyprlock,
Waybar, wofi, mako, grim, slurp, wl-clipboard, brightnessctl. Uwaga: Hyprlanda nie ma w oficjalnym repo Void — instalator dodaje repo third-party, ale tylko po sprawdzeniu, że odpowiada (martwy wpis w/etc/xbps.d/psuje każdexbps-install -S, a osierocony pakiet potrafi zablokować aktualizację całego systemu). - Noctalia Shell — Wayland shell oparty na Quickshell, z wyborem kompozytora: Hyprland, niri lub sway. Sam shell nie jest pakietowany dla Void (dawne
noctalia-void-repojest martwe) — instalator kładzie kompozytor iquickshell, a instrukcję dokończenia zostawia w/root/POST-INSTALL-NOCTALIA.txt.
Opcje są niezależne od siebie i od KDE/GNOME.
Pytanie pojawia się na ekranie 6, gdy wybierzesz btrfs z układem zawierającym
subwolumin @snapshots.
| Co | Jak |
|---|---|
| Snapshot co godzinę | cron.hourly → snapper timeline |
| Sprzątanie starych | cron.daily → snapper cleanup |
| Snapshoty w menu GRUB | grub-btrfsd — watcher inotify na /.snapshots (serwis runit) |
| Snapshot przed aktualizacją | xbps-snapshot -Su |
Retencja: 5 godzinnych, 7 dziennych, 2 tygodniowe, 1 miesięczny (do zmiany
w /etc/snapper/configs/root). Domyślne ustawienia snappera to 10 z każdej
kategorii, co na małym SSD kończy się szybko.
Dlaczego xbps-snapshot, a nie automat: XBPS nie ma hooków transakcyjnych —
odpowiednika snap-pac z Archa po prostu nie ma. Zamiast udawać automatykę,
instalator daje jawne polecenie, które robi snapshot, uruchamia xbps-install
z Twoimi argumentami i robi snapshot po. Ściągawka ląduje w
/root/POST-INSTALL-SNAPSHOTS.txt.
Rollback: z menu GRUB (podmenu snapshotów) albo snapper rollback <numer>.
Użytkownicy z grupy wheel używają snappera bez sudo.
Pytanie pojawia się na ekranie 13, po wyborze środowiska. Chodzi o to, żeby na
dysku nie było xorg-server — aplikacje X11 nadal działają, przez Xwayland.
Co się realnie dzieje, zależy od środowiska:
| Bez trybu | Wayland-only | |
|---|---|---|
| KDE | xorg-minimal + SDDM na X11 |
xorg-server-xwayland + SDDM na Wayland (kwin_wayland) |
| GNOME | xorg-minimal + GDM |
xorg-server-xwayland + greetd + tuigreet |
GDM znika nie z kaprysu: w Void gdm ma twardą zależność od xorg-server, więc
przy nim tryb byłby fikcją. Sama Plasma i sam GNOME potrzebują wyłącznie Xwaylanda.
Po instalacji installer sprawdza, czy xorg-server faktycznie nie wszedł — jeśli
wciągnął go jakiś wybrany pakiet, powie o tym i podpowie xbps-query -X xorg-server.
Instrukcja powrotu do X11 ląduje w /root/POST-INSTALL-WAYLAND.txt.
Powiedz „nie", jeśli korzystasz z narzędzi działających tylko na X11 — części rozwiązań do zdalnego pulpitu, automatyzacji (
xdotool) czy starszych aplikacji do udostępniania ekranu.
Pytanie pojawia się na ekranie 6 (Filesystem), zaraz po wyborze systemu plików — szyfrowany jest root, ESP zostaje jawny (tak wymaga UEFI).
- Kontener to LUKS1, bo GRUB musi go otworzyć, żeby w ogóle odczytać kernel
z
/boot(LUKS2 obsługuje tylko z PBKDF2, nie z domyślnym Argon2i). - Instalator dokłada keyfile do initramfs, więc hasło podajesz raz — przy
starcie GRUB-a. Bez tego pytanie pojawiłoby się dwa razy. Keyfile jest bezpieczny,
bo initramfs leży na zaszyfrowanym roocie; przy osobnym
/bootinstalator go nie założy. - Hasło nie jest zapisywane nigdzie — ani w pliku konfiguracji, ani w logu, ani
w argumentach procesu. Dlatego
--resumezapyta o nie ponownie. - Nie ma odzyskiwania. Zapomniane hasło = utracone dane.
- Tryb partycjonowania
manualnie jest wspierany — tam kontener zakładasz sam.
Po pytaniu o szyfrowanie instalator pyta o TRIM, z kursorem na „No" — i tylko wtedy, gdy dysk docelowy nie jest talerzowy. Powód, dla którego to osobna decyzja:
- dm-crypt nie przepuszcza discardu, dopóki mapping nie zostanie otwarty
z
allow-discards. Bez tego cotygodniowyfstrimnie przycina na tym dysku niczego poza ESP — a SSD z czasem zwalnia przy zapisie; - włączenie kosztuje: discard ujawnia mapę zajętych bloków przez warstwę szyfrowania, więc widać, ile miejsca jest zajęte i mniej więcej gdzie (same dane zostają zaszyfrowane). Dlatego cryptsetup ma to domyślnie wyłączone.
Praktycznie: laptop, który wozisz ze sobą — włącz; sprzęt, który może trafić w obce ręce — zostaw wyłączony. Wybór widać w podsumowaniu przed fazą destrukcyjną, a po instalacji sprawdzisz go poleceniem:
dmsetup table cryptroot | grep allow_discardsGdyby czegoś zabrakło, instalator zostawia gotowy przepis
w /root/POST-INSTALL-LUKS-TRIM.txt.
Laptop z klawiaturą na SPI (MacBook 8,1/9,1/10,1, MacBook Pro 13/14): pytanie o hasło leci z initramfs, więc klawiatura musi tam działać. Instalator wrzuca
applespido initramfs automatycznie — ale miej pod ręką klawiaturę USB na wypadek, gdyby coś poszło nie tak przy pierwszym starcie.
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"Najpierw sieć, potem SSH. Na maszynie bez portu Ethernet (MacBook 12", ultrabook z samym USB-C) link trzeba podnieść ręcznie na live ISO — ekran Wi-Fi instalatora jeszcze nie działa, bo instalatora jeszcze nie uruchomiłeś. Na wariancie
xfce:nmcli device wifi connect 'SSID' password 'haslo'(albo aplet w tacce). Dopiero potem ma sens reszta tej sekcji.
Czego SSH nie załatwi: przy szyfrowanym roocie hasło do LUKS-a wpisujesz fizycznie na maszynie przy pierwszym starcie — prompt GRUB-a leci na długo przed jakąkolwiek siecią. Na MacBooku dochodzi do tego klawiatura na SPI, więc miej pod ręką hub USB-C i klawiaturę USB.
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 (albo w zellij, jeśli wolisz — xbps-install -Sy zellij, potem zellij attach install):
# 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