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,70 @@
#!/usr/bin/env bash
# Собрать GOG/Whisky логи за N часов (по умолчанию 7) + timeline событий.
set -euo pipefail
GOG_DIR="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=config.sh
source "${GOG_DIR}/config.sh"
HOURS="${1:-7}"
OUT="${2:-${HOME}/code/local_machine/temp/gog-logs-${HOURS}h-$(date +%Y%m%d-%H%M%S)}"
GALOG="${BOTTLE_DIR}/drive_c/ProgramData/GOG.com/Galaxy/logs"
mkdir -p "${OUT}"
cp -R "${GALOG}" "${OUT}/galaxy-logs" 2>/dev/null || true
mkdir -p "${OUT}/whisky-logs"
cp "${HOME}/Library/Logs/com.franke.Whisky"/*.log "${OUT}/whisky-logs/" 2>/dev/null || true
[[ -f "/tmp/gog-galaxy-client-${BOTTLE_NAME}.log" ]] && cp "/tmp/gog-galaxy-client-${BOTTLE_NAME}.log" "${OUT}/" || true
df -h "$(gog_data_volume_path)" >"${OUT}/disk.txt"
pgrep -fl 'Galaxy|GOG|explorer.*GOG' >"${OUT}/processes-now.txt" 2>/dev/null || echo "(none)" >"${OUT}/processes-now.txt"
plutil -p "${BOTTLE_DIR}/Metadata.plist" >"${OUT}/metadata.plist.txt" 2>/dev/null || true
[[ -f "${BOTTLE_DIR}/Program Settings/GalaxyClient.exe.plist" ]] && \
plutil -p "${BOTTLE_DIR}/Program Settings/GalaxyClient.exe.plist" >"${OUT}/GalaxyClient.exe.plist.txt"
python3 <<PY
import re
from datetime import datetime, timedelta
from pathlib import Path
hours = int("${HOURS}")
out = Path("${OUT}")
cutoff = datetime.now() - timedelta(hours=hours)
pat = re.compile(r"^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3})")
keys = (
"will continue", "will exit", "Second client", "Showing login", "foreground",
"Deelevate", "Fatal", "deelevated", "Reloaded without", "Command-line parameters",
"parent window", "eglInitialize",
)
logdir = Path("${GALOG}")
lines = [f"# GOG Galaxy timeline (last {hours}h)\n", f"cutoff_local={cutoff.isoformat()}\n", f"bottle={Path('${BOTTLE_DIR}').name}\n\n"]
for fn in sorted(logdir.glob("*.log")):
lines.append(f"## {fn.name}\n")
for line in fn.read_text(errors="replace").splitlines():
m = pat.match(line)
if not m:
continue
try:
ts = datetime.strptime(m.group(1), "%Y-%m-%d %H:%M:%S.%f")
except ValueError:
continue
if ts < cutoff:
continue
if any(k.lower() in line.lower() for k in keys):
lines.append(line[:600] + "\n")
lines.append("\n")
(out / "timeline.md").write_text("".join(lines), encoding="utf-8")
PY
cat >"${OUT}/README.txt" <<EOF
GOG log bundle (${HOURS}h)
Generated: $(date)
Bottle: ${BOTTLE_NAME} (${BOTTLE_ID})
Read first: timeline.md
Galaxy logs: galaxy-logs/
Whisky: whisky-logs/
EOF
echo "OK: ${OUT}"
echo " timeline.md — события за ${HOURS}ч"
ls -la "${OUT}"