#!/bin/bash # ============================================================================= # respin-iso.sh – szybki respin ISO/IMG po zmianach w rootfs/konfiguracji # ----------------------------------------------------------------------------- # Od nowa pakuje TYLKO obrazy (squashfs + xorriso) bez przebudowy pakietów, # kernela itd. Odświeża też /usr/bin/pag i tłumaczenia (pag/pag-lang). # # Instalatorem jest Calamares (z repo PAG albo z builda KDE) – nie ma tu już # kodu instalatora Pythona do wgrywania. # # Użycie: # sudo ./respin-iso.sh # DE zgadnięty z ostatniego ISO w ISO/ # sudo ./respin-iso.sh xfce # wymuś DE (none|xfce|kde|gnome|...) # sudo ./respin-iso.sh xfce both # dodatkowo przebuduj IMG (obraz dysku) # # Uwaga: rootfs musi istnieć (poprzedni pełny build); skrypt NIE uruchamia # main() buildera – tylko funkcje create_iso/create_image po source'owaniu. # # UWAGA: dodatków z repo PAG (xrdb/upower/xfce4-notifyd/udisks2 oraz naprawa ABI # libgsf/ffmpeg) ten skrypt NIE instaluje – respin ma działać bez sieci. Jeśli # w rootfsie brakuje czegoś z tej listy, uruchom pełny build: sudo ./build-pagan.sh # ============================================================================= set -euo pipefail cd "$(dirname "$0")" if [[ $EUID -ne 0 ]]; then echo "Wymagane uprawnienia root (sudo)." >&2 exit 1 fi # ── ustal DE ── DE="${1:-}" ARTIFACT="${2:-iso}" if [[ -z "$DE" ]]; then DE=$(ls -1t ISO/Pagan-Linux-*.iso 2>/dev/null | head -1 | sed 's/.*-\([a-z0-9]*\)\.iso$/\1/') DE="${DE:-xfce}" fi case "$DE" in none|base|cli|xfce|deepin|budgie|pagande|pagan) ;; *) echo "Nieznane DE: '$DE' (użyj np. none|xfce|deepin)" >&2; exit 1 ;; esac case "$ARTIFACT" in iso|img|both) ;; *) echo "Nieznany artefakt: '$ARTIFACT' (iso|img|both)" >&2; exit 1 ;; esac export PAGAN_DE="$DE" export BUILD_IMG=0 export BUILD_ISO=0 case "$ARTIFACT" in iso) BUILD_ISO=1 ;; img) BUILD_IMG=1 ;; both) BUILD_IMG=1; BUILD_ISO=1 ;; esac # ── załaduj funkcje buildera (main NIE wykona się, bo plik tylko source'ujemy) ── # Czyścimy pozycyjne argumenty: top-level build-pagan.sh parsuje "$@" jako CLI. set -- source ./build-pagan.sh [[ -d "$PAGAN_ROOT/usr/lib" ]] || { echo "Brak rootfs w $PAGAN_ROOT (zrób najpierw pełny build)." >&2; exit 1; } # ── 1) pag – menedżer pakietów (jak install_pag: pag/pag → /usr/bin/pag) ── if [[ -f "$SCRIPT_DIR/pag/pag" ]]; then install -Dm755 "$SCRIPT_DIR/pag/pag" "$PAGAN_ROOT/usr/bin/pag" echo " ✓ /usr/bin/pag odświeżony" else echo " ⚠ brak $SCRIPT_DIR/pag/pag – pominąłem aktualizację paga" fi if [[ -d "$SCRIPT_DIR/pag/pag-lang" ]]; then mkdir -p "$PAGAN_ROOT/usr/share/pag/lang" cp -a "$SCRIPT_DIR/pag/pag-lang/." "$PAGAN_ROOT/usr/share/pag/lang/" echo " ✓ /usr/share/pag/lang odświeżony" fi # ── 2) naprawy idempotentne PRZED pakowaniem ── # Respin nie przebudowuje pakietów, więc musi sam zadbać o to, żeby obraz był # sprawny. Bez _ensure_network_manager live nie ma sieci: NM instaluje jednostki # systemd i politykę D-Bus do ścieżek z sysrootem, meson dokłada DESTDIR → # pliki lądują w $PAGAN_ROOT/mnt/pagan/... i w systemie ich nie ma. _merge_nested_rootfs _ensure_network_manager _ensure_desktop_units # ── 3) obrazy ── if [[ "$BUILD_ISO" -eq 1 ]]; then create_iso fi if [[ "$BUILD_IMG" -eq 1 ]]; then create_image fi echo "" echo "✅ Gotowe. ISO/IMG leży w: $OUTPUT_DIR"