Skip to content

Latest commit

 

History

83 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Void Linux TUI Installer

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.

Status (audyt 2026-05-17; sync z instalatorem Gentoo 2026-09-06)

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.
  • --resume nie formatuje dysku, na którym już jest system — brak checkpointu disks nie 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 -Su opakowuje 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 do ps.
  • TRIM na SSD — runit nie ma fstrim.timer, więc instalator zakłada cotygodniowe zadanie fstrim -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-font dobrany 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".

Krok po kroku (od zera do działającego systemu)

1. Przygotuj bootowalny pendrive

Pobierz Void Linux Live ISO (wariant 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
sync

Na Windows użyj Rufus lub balenaEtcher.

2. Bootuj z pendrive

  • 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).

3. Połącz się z internetem

Kabel LAN (ethernet)

Powinno działać od razu. Sprawdź:

ping -c 3 voidlinux.org

WiFi (bezprzewodowo)

Najproś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 wlan0

Opcja 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-base ciągnie linux-firmware-network.

Sprawdź połączenie:

ping -c 3 voidlinux.org

4. Sklonuj repo i uruchom installer

xbps-install -Sy git
git clone https://github.com/szoniu/void.git
cd void
./install.sh

Błą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.

5. Po instalacji

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

Reszta ś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-all

Logi instalacji zostają na dysku: /var/log/void-installer.log (faza chroot), -outer.log (dyski/ROOTFS) i -skipped.log (kroki pominięte po błędzie).

Alternatywne sposoby uruchomienia

# 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

Wymagania

  • 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 bash i git)

Co robi installer

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

Wykrywanie hardware

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 serwisem asusd.
  • 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 jest broadcom-bt-firmware. Partycje macOS (APFS/HFS+) są rozpoznawane po GPT GUID, więc tryb auto żąda wpisania ERASE zamiast 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) oraz thermald na 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.

Opcjonalne środowiska Wayland

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ż minimalny config.kdl (na sprzęcie Apple ze scale 1.5) i niri-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żde xbps-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-repo jest martwe) — instalator kładzie kompozytor i quickshell, a instrukcję dokończenia zostawia w /root/POST-INSTALL-NOCTALIA.txt.

Opcje są niezależne od siebie i od KDE/GNOME.

Snapshoty btrfs (snapper + grub-btrfs)

Pytanie pojawia się na ekranie 6, gdy wybierzesz btrfs z układem zawierającym subwolumin @snapshots.

Co Jak
Snapshot co godzinę cron.hourlysnapper timeline
Sprzątanie starych cron.dailysnapper 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ądu­je 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.

Tryb Wayland-only

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.

Szyfrowanie dysku (LUKS)

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 /boot instalator go nie założy.
  • Hasło nie jest zapisywane nigdzie — ani w pliku konfiguracji, ani w logu, ani w argumentach procesu. Dlatego --resume zapyta o nie ponownie.
  • Nie ma odzyskiwania. Zapomniane hasło = utracone dane.
  • Tryb partycjonowania manual nie jest wspierany — tam kontener zakładasz sam.

TRIM na zaszyfrowanym dysku (opt-in)

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 cotygodniowy fstrim nie 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_discards

Gdyby 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 applespi do initramfs automatycznie — ale miej pod ręką klawiaturę USB na wypadek, gdyby coś poszło nie tak przy pierwszym starcie.

Dual-boot (Windows, Linux, multi-boot)

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/ obok EFI/Microsoft/ i innych
  • os-prober dodaje 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.

Presety (konfiguracja wielokrotnego użytku)

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.

Co jeśli coś pójdzie nie tak

Recovery menu

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ę

Wznowienie po awarii (--resume)

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:

  1. Skanuje wszystkie partycje (ext4/btrfs/xfs) w poszukiwaniu danych z poprzedniej instalacji
  2. Odzyskuje checkpointy (informacje o ukończonych fazach) i plik konfiguracji
  3. Jeśli config nie przetrwał — próbuje go odtworzyć z zainstalowanego systemu (fstab, xbps.d, rc.conf, hostname, locale...)
  4. 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.conf na 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.sh

Drugie TTY — twój najlepszy przyjaciel

Podczas 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"

Zdalna instalacja przez SSH

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 inet

Uwaga: Void Live ISO nie ma domyślnie zainstalowanego nano ani vim. 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.sh

Rozwiązywanie problemów z SSH:

  • Connection reset by peer — sshd nie działa. Sprawdź: sv status sshd. Jeśli brak — upewnij się że ssh-keygen -A wygenerowało klucze hosta w /etc/ssh/.
  • Permission denied (publickey) — Void domyślnie nie pozwala na logowanie root z hasłem. Dodaj PermitRootLogin yes do /etc/ssh/sshd_config i sv restart sshd.
  • Permission denied, please try again — hasło jest złe lub nie zostało ustawione. Uruchom passwd root ponownie na maszynie docelowej.

Użyj multipleksera — ochrona przed zerwaniem sesji SSH

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.sh

Jeśli połączenie SSH się zerwie:

# Połącz się ponownie i wróć do sesji
ssh root@<IP-live-ISO>
tmux attach -t install

Instalacja będzie nadal działać w tle — nic nie stracisz.

Monitorowanie z drugiego połączenia

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
top

Typowe problemy

Przed instalacją

  • git 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.org i google.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).

W trakcie instalacji

  • 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 wybierz r (retry).
  • Installer zawisł, nic się nie dzieje — sprawdź na TTY2 (Ctrl+Alt+F2) czy xbps-install działa w top. 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 (potem exit), c = pomiń ten krok, a = przerwij instalację.

Ogólne

  • 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

Interfejs TUI

Installer ma trzy backendy TUI (w kolejności priorytetu):

  1. gum (domyślny) — nowoczesny, zaszyty w repo jako data/gum.tar.gz (~4.5 MB). Ekstrahowany automatycznie do /tmp na starcie. Zero dodatkowych zależności.
  2. dialog — klasyczny TUI, dostępny na większości live ISO
  3. whiptail — fallback gdy brak dialog

Backend jest wybierany automatycznie. Żeby wymusić fallback na dialog/whiptail:

GUM_BACKEND=0 ./install.sh

Aktualizacja gum

Ż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}"

Hooki (zaawansowane)

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.

Opcje CLI

./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)

Uruchamianie testów

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 system

Wszystkie testy są standalone — nie wymagają root ani hardware. Używają DRY_RUN=1 i NON_INTERACTIVE=1.

Struktura projektu

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

FAQ

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.cfg

Wystarczy 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:

  1. Uruchom dowolny z widocznych systemów
  2. Upewnij się że os-prober jest zainstalowany (xbps-install -S os-prober)
  3. Uruchom sudo grub-mkconfig -o /boot/grub/grub.cfg
  4. 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages