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