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:
152
scripts/games/gog/install-ja3-multipart.sh
Executable file
152
scripts/games/gog/install-ja3-multipart.sh
Executable file
@@ -0,0 +1,152 @@
|
||||
#!/usr/bin/env bash
|
||||
# JA3 из GOG offline backup: setup_*.exe + setup_*-1.bin … -4.bin в одной папке.
|
||||
# Galaxy не нужен. Установщик читает .bin рядом с .exe (не копируем 15 GB в bottle).
|
||||
set -euo pipefail
|
||||
GOG_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
# shellcheck source=config.sh
|
||||
source "${GOG_DIR}/config.sh"
|
||||
|
||||
JA3_GAMES_DIR="${JA3_GAMES_DIR:-${HOME}/Games}"
|
||||
JA3_SETUP_EXE="${JA3_SETUP_EXE:-}"
|
||||
LOG="/tmp/ja3-multipart-install-${BOTTLE_NAME}.log"
|
||||
|
||||
# Имена GOG v1.5.2 (80730); при другой версии задайте JA3_SETUP_EXE.
|
||||
JA3_EXE_DEFAULT="${JA3_GAMES_DIR}/setup_jagged_alliance_3_1.5.2_(80730).exe"
|
||||
JA3_BINS=(
|
||||
"${JA3_GAMES_DIR}/setup_jagged_alliance_3_1.5.2_(80730)-1.bin"
|
||||
"${JA3_GAMES_DIR}/setup_jagged_alliance_3_1.5.2_(80730)-2.bin"
|
||||
"${JA3_GAMES_DIR}/setup_jagged_alliance_3_1.5.2_(80730)-3.bin"
|
||||
"${JA3_GAMES_DIR}/setup_jagged_alliance_3_1.5.2_(80730)-4.bin"
|
||||
)
|
||||
|
||||
gog_unix_to_win() {
|
||||
local u="$1"
|
||||
if [[ -x "${WINEPATH_BIN}" ]]; then
|
||||
"${WINEPATH_BIN}" -w "${u}"
|
||||
else
|
||||
# fallback: Z: = /
|
||||
local rest="${u#/}"
|
||||
echo "Z:\\\\${rest//\//\\\\}"
|
||||
fi
|
||||
}
|
||||
|
||||
find_setup_exe() {
|
||||
if [[ -n "${JA3_SETUP_EXE}" && -f "${JA3_SETUP_EXE}" ]]; then
|
||||
echo "${JA3_SETUP_EXE}"
|
||||
return 0
|
||||
fi
|
||||
if [[ -f "${JA3_EXE_DEFAULT}" ]]; then
|
||||
echo "${JA3_EXE_DEFAULT}"
|
||||
return 0
|
||||
fi
|
||||
local f
|
||||
f="$(find "${JA3_GAMES_DIR}" -maxdepth 1 -iname 'setup*jagged*alliance*3*.exe' -print -quit 2>/dev/null || true)"
|
||||
[[ -n "${f}" && -f "${f}" ]] && echo "${f}" && return 0
|
||||
return 1
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
Использование: bash $0
|
||||
|
||||
Папка с архивами (по умолчанию): ${JA3_GAMES_DIR}
|
||||
|
||||
Нужны 5 файлов в одной папке:
|
||||
setup_jagged_alliance_3_1.5.2_(80730).exe (~1 MB, лаунчер Inno)
|
||||
setup_jagged_alliance_3_1.5.2_(80730)-1.bin … -4.bin
|
||||
|
||||
Скачать недостающий .exe: https://www.gog.com/account → JA3 → offline backup (первая, ~1 MB часть).
|
||||
|
||||
Или:
|
||||
lgogdownloader --login
|
||||
bash ${GOG_DIR}/fetch-ja3-setup-exe.sh
|
||||
|
||||
Переменные: JA3_GAMES_DIR, JA3_SETUP_EXE
|
||||
EOF
|
||||
}
|
||||
|
||||
verify_parts() {
|
||||
local exe="$1"
|
||||
local missing=0
|
||||
local b
|
||||
|
||||
if [[ ! -d "${JA3_GAMES_DIR}" ]]; then
|
||||
echo "❌ Нет каталога: ${JA3_GAMES_DIR}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
for b in "${JA3_BINS[@]}"; do
|
||||
if [[ ! -f "${b}" ]]; then
|
||||
echo "❌ Нет: ${b}"
|
||||
missing=1
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ! -f "${exe}" ]]; then
|
||||
echo "❌ Нет лаунчера .exe (~1 MB) в ${JA3_GAMES_DIR}"
|
||||
echo " У вас есть 4× .bin — без .exe установка GOG не стартует."
|
||||
echo " Скачайте с account.gog.com первую часть offline backup (installer0, ~1 MB)."
|
||||
echo " Или: bash ${GOG_DIR}/fetch-ja3-setup-exe.sh"
|
||||
missing=1
|
||||
fi
|
||||
|
||||
[[ "${missing}" -eq 0 ]]
|
||||
}
|
||||
|
||||
main() {
|
||||
local exe win_exe
|
||||
exe="$(find_setup_exe)" || exe=""
|
||||
|
||||
if ! verify_parts "${exe}"; then
|
||||
echo ""
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
bash "${GOG_DIR}/emergency-stop.sh" || true
|
||||
gog_swap_guard "${GOG_SWAP_MAX_MB:-400}" || exit 1
|
||||
# bins (~15 GB) + распаковка в bottle (~16 GB) — пик ~25–30 GB на Data
|
||||
gog_disk_guard "${JA3_MIN_DISK_GB:-25}" || {
|
||||
echo "❌ Мало места: нужно ≥25 GB свободно на Data (архивы + игра в bottle)."
|
||||
echo " Сейчас: $(df -h "$(gog_data_volume_path)" | awk 'NR==2 {print $4 " свободно, " $5 " занято"}')"
|
||||
exit 1
|
||||
}
|
||||
|
||||
export_wine_env_gog
|
||||
gog_wine_check
|
||||
|
||||
win_exe="$(gog_unix_to_win "${exe}")"
|
||||
SILENT=(/VERYSILENT /SUPPRESSMSGBOXES /NORESTART)
|
||||
|
||||
echo "Установка JA3 из multipart (без Galaxy)"
|
||||
echo " Папка: ${JA3_GAMES_DIR}"
|
||||
echo " Wine: ${win_exe}"
|
||||
echo " Лог: ${LOG}"
|
||||
: >"${LOG}"
|
||||
|
||||
# Inno ищет .bin в каталоге установщика — запуск из JA3_GAMES_DIR
|
||||
cd "${JA3_GAMES_DIR}"
|
||||
if ! "${WINE64}" "${win_exe}" "${SILENT[@]}" >>"${LOG}" 2>&1; then
|
||||
echo "⚠️ Wine-Inno не прошёл — пробуем innoextract (без botva2/gdi32)…"
|
||||
if command -v innoextract >/dev/null 2>&1; then
|
||||
exec bash "${GOG_DIR}/install-ja3-innoextract.sh"
|
||||
fi
|
||||
echo "❌ Установщик завершился с ошибкой:"
|
||||
strings "${LOG}" 2>/dev/null | tail -20 || tail -20 "${LOG}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -f "${BOTTLE_DIR}/drive_c/GOG Games/Jagged Alliance 3/JA3.exe" ]]; then
|
||||
date -u +"%Y-%m-%dT%H:%M:%SZ" >"${BOTTLE_DIR}/.ja3_installed"
|
||||
echo ""
|
||||
echo "OK: JA3 установлен."
|
||||
echo " Запуск: bash ${GOG_DIR}/run-ja3.sh"
|
||||
echo " После проверки игры можно удалить .bin в ${JA3_GAMES_DIR} (~15 GB)."
|
||||
else
|
||||
echo "⚠️ JA3.exe не найден в bottle — tail лога:"
|
||||
tail -40 "${LOG}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user