Expand local_machine docs and automation for connectivity, games, and ops.

Add proxy/VPN/telegram launchd and emergency runbooks; reorganize apps docs;
document JA3 CrossOver runbook and Wine troubleshooting; add GOG/HoMM game
scripts, disk cleanup guides, and gitea push-via-proxy helper. Ignore temp/.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
ahauimix
2026-06-01 08:12:19 +03:00
parent a39ef89125
commit 1938b7c743
135 changed files with 9933 additions and 388 deletions

View File

@@ -0,0 +1,117 @@
#!/usr/bin/env bash
# Запуск GalaxySetup.exe (JA3 и др.) без родительского GalaxyInstaller — обход «Galaxy already running» + gdi32.
set -euo pipefail
GOG_DIR="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=config.sh
source "${GOG_DIR}/config.sh"
PRODUCT_ID="${1:-1556263729}"
GAME_NAME="${2:-Jagged Alliance 3}"
LOG="/tmp/gog-galaxy-setup-${BOTTLE_NAME}.log"
gog_kill_all_galaxy() {
pkill -f 'GOG_Galaxy_' 2>/dev/null || true
pkill -f 'GalaxyWebInstaller' 2>/dev/null || true
pkill -f 'GalaxyInstaller' 2>/dev/null || true
pkill -f 'GalaxySetup' 2>/dev/null || true
pkill -f "${BOTTLE_ID}.*Galaxy" 2>/dev/null || true
sleep 2
}
find_galaxy_setup() {
local d
for d in "${BOTTLE_DIR}/drive_c/users/"*/AppData/Local/Temp/GalaxyInstaller_*; do
[[ -f "${d}/GalaxySetup.exe" ]] || continue
echo "${d}/GalaxySetup.exe"
return 0
done
return 1
}
export_wine_env_gog_setup() {
export WINEPREFIX="${BOTTLE_DIR}"
export WINEMSYNC=1
export WINEESYNC=1
export DYLD_LIBRARY_PATH="${WINE_LIB}:${DYLD_LIBRARY_PATH:-}"
# Inno/botva2: native gdiplus ломает gdi32 в MsgBox; stub/.NET — gdiplus=n,b
export WINEDLLOVERRIDES="gdiplus=b"
export WINEDEBUG="${WINEDEBUG:--all}"
unset DXVK_ASYNC DXVK_HUD 2>/dev/null || true
}
main() {
gog_wine_check
if [[ ! -f "${BOTTLE_DIR}/.gog_galaxy_extract_installed" ]] \
&& ! find "${BOTTLE_DIR}/drive_c/Program Files"* -name 'GalaxyClient.exe' -print -quit 2>/dev/null | grep -q .; then
echo "Сначала: bash ${GOG_DIR}/install-galaxy-extract.sh"
exit 1
fi
local setup
setup="$(find_galaxy_setup || true)"
if [[ -z "${setup}" ]]; then
echo "Нет GalaxySetup.exe в Temp. Сначала web-stub:"
echo " bash ${GOG_DIR}/run-web-installer.sh /path/GOG_Galaxy_*.exe"
echo "Дождитесь скачивания ~277 MB, затем снова этот скрипт."
exit 1
fi
gog_kill_all_galaxy
export_wine_env_gog_setup
local win="Z:${setup#${BOTTLE_DIR}}"
win="${win//\//\\\\}"
# Wine path: C:\users\...
local cpath
cpath="$("${WINEPATH_BIN}" -w "${setup}" 2>/dev/null || true)"
if [[ -z "${cpath}" ]]; then
cpath="C:\\users\\eternal\\AppData\\Local\\Temp\\$(basename "$(dirname "${setup}")")\\GalaxySetup.exe"
fi
echo "Setup: ${setup}"
echo "Лог: ${LOG}"
: >"${LOG}"
"${WINE64}" "${cpath}" \
/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /FORCECLOSEAPPLICATIONS /SP- \
/lang=en_US /webinstaller "/product_id=${PRODUCT_ID}" "/game_name=${GAME_NAME}" \
>>"${LOG}" 2>&1 &
local pid=$!
local i
for i in $(seq 1 120); do
sleep 5
if ! kill -0 "${pid}" 2>/dev/null; then
break
fi
if grep -qi 'Install successful\|Successfully installed' "${LOG}" 2>/dev/null; then
break
fi
done
gog_kill_all_galaxy
local setup_log
setup_log="$(find "${BOTTLE_DIR}/drive_c/users" -name 'Setup Log*.txt' -print 2>/dev/null | sort | tail -1)"
if [[ -n "${setup_log}" ]]; then
echo "--- Inno Setup log (tail) ---"
tail -30 "${setup_log}"
fi
if grep -qi 'Install successful\|Successfully installed' "${setup_log:-/dev/null}" 2>/dev/null; then
echo "OK: установка завершена."
exit 0
fi
if grep -q 'Deinitializing Setup' "${setup_log:-/dev/null}" 2>/dev/null \
&& ! grep -q 'Access violation' "${setup_log:-/dev/null}" 2>/dev/null; then
echo "OK: Setup завершился без AV (проверьте игру в Galaxy)."
exit 0
fi
echo "Лог Wine:"
tail -25 "${LOG}"
exit 1
}
main "$@"