#!/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