Files
local_machine/scripts/games/gog/install-ja3-multipart.sh
ahauimix 1938b7c743 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>
2026-06-01 08:12:19 +03:00

153 lines
4.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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) — пик ~2530 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 "$@"