Răsfoiți Sursa

fix(steamcmd): add libtinfo.so.5 symlink fix for readline warning (#4899)

* fix(steamcmd): add libtinfo.so.5 symlink fix for readline warning

On distros shipping libtinfo.so.6 but not libtinfo.so.5 (Ubuntu 22.04+,
Debian 12+), SteamCMD prints:

  WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5.
  Please install (lib32tinfo5 / ncurses-libs.i686 / equivalent) to
  enable readline.

lib32tinfo5 does not exist on Ubuntu 24.04. Creating a user-space
symlink inside the steamcmd directory resolves the warning without
requiring root or a missing package.

* fix(steamcmd): address Copilot review feedback on libtinfo symlink fix

- Iterate over all candidate steamcmd dirs (HOME/.steam/steamcmd,
  steamcmddir, HOME/.local/share/Steam/steamcmd) matching the pattern
  used for steamclient.so fixes elsewhere in the module
- Replace '! -f && ! -L' guard with '! -e' so broken/dangling symlinks
  are also repaired rather than silently skipped
- Add mkdir -p before ln in case the directory does not exist yet
- Capture exitcode=$? after ln so fn_fix_msg_end reports failures

---------

Co-authored-by: LinuxGSM <dev@linuxgsm.com>
Daniel Gibbs 1 lună în urmă
părinte
comite
445dddbd21
1 a modificat fișierele cu 25 adăugiri și 0 ștergeri
  1. 25 0
      lgsm/modules/fix_steamcmd.sh

+ 25 - 0
lgsm/modules/fix_steamcmd.sh

@@ -113,6 +113,31 @@ if [ ! -f "${steamclientsdk32}" ]; then
 	fn_fix_msg_end
 	fn_fix_msg_end
 fi
 fi
 
 
+# Helps fix: WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5.
+# On distros that ship libtinfo.so.6 (e.g. Ubuntu 22.04+, Debian 12+) but not
+# libtinfo.so.5, SteamCMD prints this warning and loses readline support.
+# Creating a symlink from .so.5 -> .so.6 resolves the warning without root.
+for libtinfo32dir in "${HOME}/.steam/steamcmd" "${steamcmddir}" "${HOME}/.local/share/Steam/steamcmd"; do
+	if [ -d "${libtinfo32dir}" ]; then
+		libtinfo32so="${libtinfo32dir}/libtinfo.so.5"
+		# Also repair broken symlinks (! -e catches missing target, -L catches dangling link)
+		if [ ! -e "${libtinfo32so}" ]; then
+			# Find the .so.6 in the system 32-bit lib paths
+			for libtinfo32so6 in /lib/i386-linux-gnu/libtinfo.so.6 /usr/lib/i386-linux-gnu/libtinfo.so.6 /lib32/libtinfo.so.6; do
+				if [ -f "${libtinfo32so6}" ]; then
+					fixname="libtinfo.so.5 32-bit symlink"
+					fn_fix_msg_start
+					mkdir -p "${libtinfo32dir}"
+					ln -sf "${libtinfo32so6}" "${libtinfo32so}"
+					exitcode=$?
+					fn_fix_msg_end
+					break
+				fi
+			done
+		fi
+	fi
+done
+
 # steamclient.so fixes
 # steamclient.so fixes
 if [ "${shortname}" == "bo" ]; then
 if [ "${shortname}" == "bo" ]; then
 	fn_fix_steamclient_so "32" "${serverfiles}/BODS_Data/Plugins/x86"
 	fn_fix_steamclient_so "32" "${serverfiles}/BODS_Data/Plugins/x86"