🔒 Repository is read-only – file editing is disabled.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
#!/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-<wersja>.img"
has boot/initrd.img-7.2.5-pagan && okp "/boot/initrd.img-7.2.5-pagan (pierwszy wzorzec 10_linux)" || bad "initrd.img-<wersja>"
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"