Files
local_machine/scripts/games/install-gog-galaxy.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

110 lines
4.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# GOG Galaxy 2.0: скачать официальный установщик и поставить в bottle HoMM-OldenEra.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=config.sh
source "${SCRIPT_DIR}/config.sh"
SILENT="${GOG_INSTALL_SILENT:-0}"
if [[ ! -d "${BOTTLE_DIR}/drive_c" ]]; then
echo "Bottle ещё не инициализирован."
echo "1) open -a Whisky"
echo "2) Откройте bottle «${BOTTLE_NAME}»"
echo "3) Запустите этот скрипт снова"
open -a Whisky
exit 1
fi
if exe="$(homm_gog_exe)"; [[ -n "${exe}" ]]; then
echo "GOG Galaxy уже установлен: ${exe}"
echo "Запуск: bash ${SCRIPT_DIR}/start.sh gog"
exit 0
fi
mkdir -p "${GAMES_CACHE_DIR}"
homm_gog_setup_url() {
if [[ -n "${GOG_SETUP_URL:-}" ]]; then
echo "${GOG_SETUP_URL}"
return 0
fi
local json url
json="$(curl -fsSL "https://remote-config.gog.com/components/webinstaller?component_version=2.0.0")"
url="$(python3 -c 'import json,sys; d=json.load(sys.stdin); print(d["content"]["windows"]["downloadLink"])' <<<"${json}" 2>/dev/null)" || true
if [[ -z "${url}" ]]; then
url="https://content-system.gog.com/open_link/download?path=/open/galaxy/client/setup_galaxy_2.0.100.1.exe"
fi
echo "${url}"
}
if [[ ! -f "${GOG_SETUP}" ]]; then
dl_url="$(homm_gog_setup_url)"
echo "Скачиваю полный установщик GOG Galaxy (~290 MB)…"
echo " ${dl_url}"
curl -L --fail --retry 3 -C - -o "${GOG_SETUP}" "${dl_url}"
fi
echo "Размер установщика: $(du -sh "${GOG_SETUP}" | awk '{print $1}')"
min_gb="${HOMM_DISK_MIN_GB:-3}"
min_kb=$((min_gb * 1024 * 1024))
if [[ "$(homm_disk_free_kb)" -lt "${min_kb}" ]]; then
echo "❌ Мало места на диске (<${min_gb} GB). GOG Galaxy ~300+ MB."
exit 1
fi
homm_gog_install_from_extract() {
local extract_dir="${GAMES_CACHE_DIR}/gog-galaxy-extract"
local gog_pf="${BOTTLE_DIR}/drive_c/Program Files (x86)/GOG Galaxy"
local gog_pd="${BOTTLE_DIR}/drive_c/ProgramData/GOG.com/Galaxy"
if ! command -v innoextract >/dev/null 2>&1; then
echo "Нужен innoextract: brew install innoextract"
return 1
fi
echo "Распаковка установщика (innoextract) — обход gdi32 в Wine-инсталляторе…"
rm -rf "${extract_dir}"
mkdir -p "${extract_dir}"
innoextract -e -d "${extract_dir}" "${GOG_SETUP}"
mkdir -p "${gog_pf}" "${gog_pd}"
cp -R "${extract_dir}/app/." "${gog_pf}/"
local pd_src
pd_src="$(find "${extract_dir}" -type d -path '*/GOG.com/Galaxy' 2>/dev/null | head -1)"
if [[ -n "${pd_src}" ]]; then
cp -R "${pd_src}/." "${gog_pd}/"
fi
homm_gog_exe >/dev/null
}
export_wine_env_steam
# Wine Inno Setup часто падает на gdi32 в /VERYSILENT; по умолчанию — распаковка.
if [[ "${GOG_INSTALL_WINE:-0}" == "1" && "${SILENT}" == "1" ]]; then
echo "Тихая установка через Wine (эксперимент)…"
cp -f "${GOG_SETUP}" "${BOTTLE_DIR}/drive_c/setup_galaxy.exe" 2>/dev/null || true
"${WINE64}" 'C:\\setup_galaxy.exe' /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /FORCECLOSEAPPLICATIONS /SP- || true
sleep 10
elif [[ "${SILENT}" == "1" ]]; then
homm_gog_install_from_extract || exit 1
else
echo "Запуск GUI-установщика GOG Galaxy в bottle «${BOTTLE_NAME}»…"
echo "Дождитесь завершения мастера установки, затем:"
echo " bash ${SCRIPT_DIR}/start.sh gog"
if command -v whisky >/dev/null 2>&1; then
whisky run "${BOTTLE_NAME}" "${GOG_SETUP}"
else
"${WINE64}" "${GOG_SETUP}"
fi
exit 0
fi
if exe="$(homm_gog_exe)"; [[ -n "${exe}" ]]; then
echo "OK: GOG Galaxy → ${exe}"
bash "${SCRIPT_DIR}/pin-gog-whisky.sh" 2>/dev/null || true
echo "Запуск: bash ${SCRIPT_DIR}/start.sh gog"
else
echo "GalaxyClient.exe не найден."
echo " GUI: GOG_INSTALL_SILENT=0 bash ${SCRIPT_DIR}/install-gog-galaxy.sh"
echo " Wine silent (часто ломается): GOG_INSTALL_WINE=1 GOG_INSTALL_SILENT=1 …"
exit 1
fi