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

PaganLinux/fix-xorg-libs.sh main

70 linii Raw ← Powrót
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
#!/bin/bash
# =============================================================================
# fix-xorg-libs.sh – doinstaluj brakujące biblioteki runtime Xorg do rootfs
# -----------------------------------------------------------------------------
# Problem: /usr/bin/X w live nie startuje:
#   error while loading shared libraries: libtirpc.so.3: cannot open ...
# Przyczyna: Xorg budował się na hoście i linkował przeciw libkom HOSTA,
# których w rootfs nie ma (host Arch == target glibc 2.44 → ABI zgodne).
#
# Skrypt: ldd w chroot → lista "not found" → kopia z hosta /usr/lib do
# $PAGAN_ROOT/usr/lib (pętla 3x, bo skopiowana libka też może mieć braki).
#
# Użycie:
#   sudo ./fix-xorg-libs.sh
# a potem odśwież ISO:  sudo ./respin-iso.sh none
# =============================================================================
set -euo pipefail

R="${PAGAN_ROOT:-/mnt/pagan}"
[ "$(id -u)" = "0" ] || { echo "❌ Uruchom jako root: sudo ./fix-xorg-libs.sh"; exit 1; }
[ -d "$R/usr/lib" ] || { echo "❌ Brak rootfs w $R"; exit 1; }

# Binarki, których braki nas interesują (X + startx/xinit)
BINS=(/usr/bin/X /usr/bin/Xorg /usr/bin/xinit /usr/bin/Xvfb)

fetch_missing() {
    chroot "$R" /bin/sh -c "ldd ${BINS[*]} 2>/dev/null" 2>/dev/null \
        | awk '/not found/{print $1}' | sort -u
}

echo "=== Brakujące biblioteki (przed): ==="
miss=$(fetch_missing) || true
if [ -z "$miss" ]; then
    echo "  (brak – Xorg ma komplet zależności)"
    exit 0
fi
echo "  $miss"

for i in 1 2 3; do
    miss=$(fetch_missing) || true
    [ -z "$miss" ] && break
    for name in $miss; do
        src=""
        for cand in "$R/usr/lib/$name" "/usr/lib/$name" "/usr/lib64/$name" "/lib/$name"; do
            [ -e "$cand" ] && { src="$cand"; break; }
        done
        if [ -z "$src" ]; then
            src=$(find /usr/lib /lib /usr/lib64 -maxdepth 3 -name "$name" 2>/dev/null | head -1 || true)
        fi
        if [ -z "$src" ] || [ ! -e "$src" ]; then
            echo "  ❌ brak '$name' także na hoście – do ręki"
            continue
        fi
        real=$(readlink -f "$src")
        install -Dm755 "$real" "$R/usr/lib/$(basename "$real")"
        ln -sf "$(basename "$real")" "$R/usr/lib/$name"
        echo "  ✓ $name$(basename "$real")"
    done
    # po kopii może brakować zależności samej libki – pętla to domknie
done

echo ""
echo "=== Brakujące biblioteki (po): ==="
miss=$(fetch_missing) || true
if [ -z "$miss" ]; then
    echo "  OK – Xorg ma komplet zależności. Teraz:  sudo ./respin-iso.sh none"
else
    echo "  Nadal brak: $miss"
    echo "  Wklej mi tę listę – poszukamy źródła (może trzeba dobudować w rootfs)."
fi