Fix LiveTraffic CURL_OPENSSL_4 na Steam Linux (X-Plane 12)

This commit is contained in:
pali112 committed 2026-10-20 16:28:25 +02:00
commit 73e51f897e
3 files changed
+190

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
# Nie wrzucamy binarek .so (zależne od wersji systemu)
*.so
*.so.*
*.xpl
*.xpl.bak
+62
View File
@@ -0,0 +1,62 @@
# LiveTraffic Steam Fix (X-Plane 12, Linux)
Naprawia problem z ładowaniem wtyczki **LiveTraffic** w wersji X-Plane 12 ze **Steam** na Linuxie.
## Problem
Steam Linux Runtime „przypina" (pinuje) własny, stary `libcurl.so.4` (wersja 4.2.0), który eksportuje tylko symbol `CURL_OPENSSL_3`. LiveTraffic jest zbudowany przeciw nowszemu libcurl (`CURL_OPENSSL_4`) i wymaga też `libssl.so.3` / `libcrypto.so.3`.
Efekt w `Log.txt`:
```
dlerror: .../SteamLinuxRuntime/var/steam-runtime/pinned_libs_64/libcurl.so.4:
version `CURL_OPENSSL_4' not found
(required by .../LiveTraffic/lin_x64/LiveTraffic.xpl)
```
i wtyczka **nie** jest ładowana (nie pojawia się w menu `Plugins`).
To samo dotyczy innych wtyczek zbudowanych przeciw nowemu libcurl (np. plugin **REP** dla Cessny — SimCoders).
## Dlaczego to się dzieje
Steam Runtime v1 („scout") jest zgodny z Ubuntu 12.04, więc musi używać starego ABI `libcurl`. To potwierdzone przez Valve — nie da się tego obejść opcjami uruchamiania (`STEAM_RUNTIME_USE_LIBCURL_SHIM` ani przełączeniem runtime'u na soldier).
## Rozwiązanie
Kopiujemy **systemowy** `libcurl` + wszystkie jego zależności do katalogu wtyczki i ustawiamy `RPATH=$ORIGIN/lib`, dzięki czemu wtyczka ładuje własne, nowe biblioteki niezależnie od Steam Runtime.
## Użycie
```bash
./fix-livetraffic.sh [/ścieżka/do/X-Plane 12]
```
Domyślnie skrypt zakłada ścieżkę `/mnt/nvme_data/SteamLibrary/steamapps/common/X-Plane 12`. Możesz podać własną jako argument.
Wymagania:
- `patchelf` (`pacman -S patchelf`)
- systemowy `libcurl` 4.8+ z `libssl.so.3` (Arch Linux / nowoczesny Linux)
## Co robi skrypt
1. Backup `LiveTraffic.xpl` → `LiveTraffic.xpl.bak`.
2. Kopiuje `libcurl.so.4` + 21 zależności z `/usr/lib` do `LiveTraffic/lin_x64/lib/`.
3. Ustawia `RPATH=$ORIGIN` na wszystkich skopiowanych bibliotekach.
4. Ustawia `RPATH=$ORIGIN/lib` na `LiveTraffic.xpl`.
## Weryfikacja
Po uruchomieniu X-Plane w `Log.txt` szukaj:
```
Loaded: .../LiveTraffic/lin_x64/LiveTraffic.xpl
```
(zamiast `dlerror`).
## Uwagi
- Skrypt jest **idempotentny** — można go uruchomić wielokrotnie (backup robi tylko raz).
- Po aktualizacji systemu (nowszy libcurl) uruchom skrypt ponownie, żeby odświeżyć biblioteki.
- Nie wrzucamy binarek `.so` do tego repo — są zależne od wersji systemu.
+123
View File
@@ -0,0 +1,123 @@
#!/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"