🔒 Repository is read-only – file editing is disabled.
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"