🔒 Repository is read-only – file editing is disabled.

PaganLinux/respin-iso.sh main

94 linii Raw ← Powrót
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
#!/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"