124 lines
3.8 KiB
Bash
Executable File
124 lines
3.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# fix-livetraffic.sh — naprawia LiveTraffic na X-Plane 12 (Steam, Linux)
|
|
#
|
|
# Problem:
|
|
# Steam Linux Runtime "przypina" (pinuje) stary libcurl.so.4 (4.2.0), który
|
|
# eksportuje tylko symbol CURL_OPENSSL_3. LiveTraffic jest zbudowany przeciw
|
|
# nowemu libcurl (CURL_OPENSSL_4) i wymaga też libssl.so.3 / libcrypto.so.3.
|
|
# Efekt: w Log.txt pojawia się:
|
|
# dlerror: .../pinned_libs_64/libcurl.so.4: version `CURL_OPENSSL_4' not found
|
|
# (required by .../LiveTraffic/lin_x64/LiveTraffic.xpl)
|
|
# i plugin nie jest ładowany (nie widać go w menu Plugins).
|
|
#
|
|
# Rozwiązanie:
|
|
# Kopiujemy systemowy libcurl + wszystkie jego zależności do katalogu wtyczki
|
|
# (LiveTraffic/lin_x64/lib) i ustawiamy RPATH=$ORIGIN/lib na pliku .xpl oraz
|
|
# na każdej skopiowanej bibliotece. Wtedy wtyczka ładuje własne, nowe
|
|
# biblioteki niezależnie od Steam Runtime.
|
|
#
|
|
# Użycie:
|
|
# ./fix-livetraffic.sh [/ścieżka/do/X-Plane 12]
|
|
#
|
|
# Wymagania:
|
|
# - patchelf (pacman -S patchelf)
|
|
# - systemowy libcurl 4.8+ z libssl.so.3 (Arch / nowoczesny Linux)
|
|
#
|
|
|
|
set -euo pipefail
|
|
|
|
# Domyślna ścieżka — podmień lub podaj jako argument
|
|
XP_ROOT="${1:-/mnt/nvme_data/SteamLibrary/steamapps/common/X-Plane 12}"
|
|
|
|
XPL_DIR="$XP_ROOT/Resources/plugins/LiveTraffic/lin_x64"
|
|
LIB_DIR="$XPL_DIR/lib"
|
|
XPL="$XPL_DIR/LiveTraffic.xpl"
|
|
|
|
if [ ! -f "$XPL" ]; then
|
|
echo "BŁĄD: nie znaleziono $XPL" >&2
|
|
echo "Podaj ścieżkę do X-Plane 12 jako argument:" >&2
|
|
echo " $0 /sciezka/do/X-Plane 12" >&2
|
|
exit 1
|
|
fi
|
|
|
|
command -v patchelf >/dev/null 2>&1 || {
|
|
echo "BŁĄD: brak patchelf. Zainstaluj: pacman -S patchelf" >&2
|
|
exit 1
|
|
}
|
|
|
|
SYSLIBCURL="$(readlink -f /usr/lib/libcurl.so.4 2>/dev/null || echo "")"
|
|
if [ -z "$SYSLIBCURL" ] || [ ! -f "$SYSLIBCURL" ]; then
|
|
echo "BŁĄD: nie znaleziono systemowego libcurl.so.4 w /usr/lib" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "== X-Plane: $XP_ROOT"
|
|
echo "== systemowy libcurl: $SYSLIBCURL"
|
|
|
|
# 1. Backup oryginalnego .xpl (raz)
|
|
if [ ! -f "$XPL.bak" ]; then
|
|
cp -a "$XPL" "$XPL.bak"
|
|
echo "== backup: $XPL.bak"
|
|
fi
|
|
|
|
# 2. Katalog na biblioteki
|
|
mkdir -p "$LIB_DIR"
|
|
|
|
# 3. Lista bibliotek do skopiowania (libcurl + pełne zależności, bez glibc)
|
|
SONAMES=(
|
|
libcurl.so.4
|
|
libssl.so.3
|
|
libcrypto.so.3
|
|
libnghttp2.so.14
|
|
libnghttp3.so.9
|
|
libngtcp2_crypto_ossl.so.0
|
|
libngtcp2.so.16
|
|
libidn2.so.0
|
|
libssh2.so.1
|
|
libpsl.so.5
|
|
libzstd.so.1
|
|
libbrotlidec.so.1
|
|
libbrotlienc.so.1
|
|
libbrotlicommon.so.1
|
|
libunistring.so.5
|
|
libkrb5.so.3
|
|
libgssapi_krb5.so.2
|
|
libk5crypto.so.3
|
|
libkrb5support.so.0
|
|
libkeyutils.so.1
|
|
libcom_err.so.2
|
|
libz.so.1
|
|
)
|
|
|
|
echo "== kopiuję biblioteki do $LIB_DIR"
|
|
for soname in "${SONAMES[@]}"; do
|
|
real="$(readlink -f "/usr/lib/$soname" 2>/dev/null || echo "")"
|
|
if [ -z "$real" ] || [ ! -f "$real" ]; then
|
|
echo " POMINIĘTO (brak): $soname"
|
|
continue
|
|
fi
|
|
cp -L "$real" "$LIB_DIR/$(basename "$real")"
|
|
# realne pliki (libssl.so.3/libcrypto.so.3 to pliki, nie symlinki) — nie rób symlinka do siebie
|
|
if [ "$(basename "$real")" != "$soname" ]; then
|
|
ln -sfn "$(basename "$real")" "$LIB_DIR/$soname"
|
|
fi
|
|
echo " OK $soname -> $(basename "$real")"
|
|
done
|
|
|
|
# 4. RPATH=$ORIGIN na wszystkich skopiowanych bibliotekach
|
|
echo "== ustawiam RPATH=\$ORIGIN na bibliotekach"
|
|
for f in "$LIB_DIR"/*.so.* "$LIB_DIR"/*.so.3 "$LIB_DIR"/*.so.5; do
|
|
[ -f "$f" ] && patchelf --set-rpath '$ORIGIN' --force-rpath "$f" 2>/dev/null || true
|
|
done
|
|
|
|
# 5. RPATH=$ORIGIN/lib na wtyczce
|
|
echo "== ustawiam RPATH=\$ORIGIN/lib na LiveTraffic.xpl"
|
|
patchelf --set-rpath '$ORIGIN/lib' --force-rpath "$XPL"
|
|
|
|
echo
|
|
echo "== GOTOWE. Weryfikacja:"
|
|
ldd "$XPL" | grep -E "libcurl|libssl|libcrypto" || true
|
|
echo
|
|
echo "== Teraz uruchom X-Plane i sprawdź w Log.txt linię:"
|
|
echo " Loaded: .../LiveTraffic/lin_x64/LiveTraffic.xpl"
|