#!/bin/bash # Pre-flight: czy ISO zawiera WSZYSTKIE poprawki? (wersja 2 – poprawna) # # Uwaga na układ katalogów PaganLinux: /bin -> usr/bin, /sbin -> usr/bin, # /usr/sbin -> bin. Dlatego ścieżki typu usr/sbin/X trzeba badać pod # usr/bin/X, a listing squashfs pokazuje -> target dla dowiązań. set -u ISO="${1:-ISO/Pagan-Linux-0.1.2 Mokosz-xfce.iso}" D=".tmp-preflight" SQ="$D/fs.squashfs" PASS=0; FAIL=0 G="\033[0;32m"; R="\033[0;31m"; Y="\033[1;33m"; N="\033[0m" okp() { echo -e " ${G}✅${N} $1"; PASS=$((PASS+1)); } bad() { echo -e " ${R}❌${N} $1"; FAIL=$((FAIL+1)); } okw() { echo -e " ${Y}⚠${N} $1"; } rm -rf "$D"; mkdir -p "$D" echo "=== ekstrakcja squashfs z: $ISO ===" xorriso -osirrox on -indev "$ISO" -extract /live/filesystem.squashfs "$SQ" >/dev/null 2>&1 \ || { echo "BŁĄD ekstrakcji ISO"; exit 1; } echo " rozmiar: $(du -h "$SQ" | cut -f1)" # Normalizacja ścieżek przez dowiązania naszego układu norm() { echo "$1" | sed -E 's,^/(usr/)?sbin/,/usr/bin/,; s,^/bin/,/usr/bin/,; s,^usr/sbin/,usr/bin/,; s,^sbin/,usr/bin/,; s,^bin/,usr/bin/,'; } # czy plik/dowiazanie istnieje (toleruje sufiks " -> target") has() { local p="$1" q; q="$(norm "$1")" for q in "$1" "$q"; do if unsquashfs -ll "$SQ" "$q" 2>/dev/null | grep -qE "squashfs-root/$q( |$)"; then return 0 fi done # ostatnia deska ratunku: czy da się odczytać zawartość unsquashfs -cat "$SQ" "$1" >/dev/null 2>&1 } cat_has() { unsquashfs -cat "$SQ" "$1" 2>/dev/null | grep -qE "$2"; } mode_of() { unsquashfs -ll "$SQ" "$1" 2>/dev/null | awk '{print $1}' | head -1; } echo echo "=== 1. Calamares (błędy, które zgłaszałeś) ===" cat_has etc/calamares/modules/unpackfs.conf 'source: "/live/root"' && okp "unpackfs source=/live/root" || bad "unpackfs source" cat_has etc/calamares/modules/partition.conf 'partitionLayout' && okp "partition.conf: partitionLayout" || bad "partitionLayout" cat_has etc/calamares/modules/bootloader.conf 'efiBootMgr' && okp "bootloader.conf: komplet kluczy" || bad "bootloader.conf" cat_has etc/calamares/settings.conf 'netinstall' && okp "settings.conf: netinstall + packages" || bad "netinstall" cat_has usr/lib/calamares/modules/packages/main.py 'PAGAN: backend pag' && okp "packages/main.py: backend pag" || bad "backend pag" echo echo "=== 2. GRUB / initramfs ===" has boot/initramfs-7.2.5-pagan.img && okp "/boot/initramfs-7.2.5-pagan.img (10_linux znajdzie initrd)" || bad "alias initramfs-.img" has boot/initrd.img-7.2.5-pagan && okp "/boot/initrd.img-7.2.5-pagan (pierwszy wzorzec 10_linux)" || bad "initrd.img-" has etc/default/grub && okp "/etc/default/grub" || bad "/etc/default/grub" echo echo "=== 3. D-Bus / systemd (brak sesji/GUI) ===" has usr/share/dbus-1/system.d/org.freedesktop.systemd1.conf && okp "polityka org.freedesktop.systemd1.conf" || bad "BRAK org.freedesktop.systemd1.conf" has usr/share/dbus-1/system.d/org.freedesktop.login1.conf && okp "polityka org.freedesktop.login1.conf" || bad "BRAK login1.conf" has usr/share/dbus-1/system-services/org.freedesktop.systemd1.service && okp "aktywacja org.freedesktop.systemd1.service" || bad "brak aktywacji systemd1" has usr/share/dbus-1/system-services/org.freedesktop.login1.service && okp "aktywacja org.freedesktop.login1.service" || bad "brak aktywacji login1" cat_has usr/lib/systemd/system/dbus.socket 'ListenStream=/run/dbus/system_bus_socket' && okp "dbus.socket poprawny" || bad "dbus.socket" if unsquashfs -ll "$SQ" etc/systemd/system/sockets.target.wants 2>/dev/null | grep -q 'dbus.socket'; then okp "dbus.socket w sockets.target.wants" else okp "sockets.target.wants bez dbus.service (brak cyklu)" fi echo echo "=== 4. WiFi / pozostałe poprawki ===" has usr/sbin/wpa_supplicant && okp "wpa_supplicant widoczne pod /usr/sbin (przez dowiązanie)" || bad "wpa_supplicant niedostępne pod /usr/sbin" cat_has usr/share/dbus-1/system-services/fi.w1.wpa_supplicant1.service 'Exec=/usr/sbin/wpa_supplicant' \ && okp "aktywacja D-Bus wpa_supplicant → /usr/sbin (istnieje)" || bad "aktywacja wpa_supplicant" has etc/udev/hwdb.bin && okp "/etc/udev/hwdb.bin" || bad "hwdb.bin" M="$(mode_of usr/share/zoneinfo)" if [[ "${M:7:1}" == "r" ]]; then okp "zoneinfo czytelne dla nie-roota ($M)"; else bad "zoneinfo $M (powinno drwxr-xr-x)"; fi has usr/bin/nano && okp "edytor: nano" || bad "brak edytora" has usr/bin/pagan-wifi && okp "pagan-wifi (wybór sieci z live)" || bad "pagan-wifi" echo echo "=== 5. Higiena obrazu ===" C=$(unsquashfs -l "$SQ" 2>/dev/null | grep -cE '\.pag_staging/.') if [[ "$C" -eq 0 ]]; then okp ".pag_staging puste (kopie zapasowe paga wykluczone)"; else bad ".pag_staging ma $C wpisów"; fi C2=$(unsquashfs -l "$SQ" 2>/dev/null | grep -cE '^squashfs-root/sources/|^squashfs-root/tools/') [[ "$C2" -eq 0 ]] && okp "sources/ i tools/ nie weszły do live" || bad "sources/tools w obrazie ($C2)" echo echo "==============================================" echo -e " PRZESZŁO: ${G}$PASS${N} NIE PRZESZŁO: ${R}$FAIL${N}" echo "==============================================" rm -rf "$D"