#!/bin/sh # ============================================================================ # Flipix — bootstrap do instalador de máquina. RODE NA MÁQUINA BATOCERA: # # curl -L instalador.flipix.com.br | sh # # Isto aqui só baixa o instalador de verdade (installer.py, servido pelo # servidor Flipix) e o executa. A URL curta é estática de propósito: o # instalador evolui a cada deploy do servidor, sem tocar nesta página. # ============================================================================ set -eu # Servido pelo server: __SETUP_BASE__ vira a base do request. Na cópia estática # (instalador.flipix.com.br) o marcador fica intacto → usa a base fixa abaixo. BASE="${FLIPIX_BASE:-__SETUP_BASE__}" case "$BASE" in *__SETUP_BASE__*) BASE="https://mini-manager-server-production.up.railway.app" ;; esac [ -d /userdata ] || { echo "ERRO: /userdata nao existe — rode no Batocera."; exit 1; } command -v python3 >/dev/null 2>&1 || { echo "ERRO: python3 nao encontrado."; exit 1; } DIR=/userdata/flipix-setup mkdir -p "$DIR" # Batocera ZERADO acorda com o relógio no passado e o TLS recusa o certificado # ("certificate is not yet valid"). Acerta pela hora HTTP (sem TLS) da própria # página do instalador antes de qualquer https — e de novo se o download falhar. acerta_relogio() { D=$(curl -sI --max-time 10 http://instalador.flipix.com.br 2>/dev/null | tr -d '\r' | sed -n 's/^[Dd]ate: //p') [ -n "$D" ] || return 1 echo "==> Flipix: acertando o relógio da máquina ($D)" date -u -D "%a, %d %b %Y %H:%M:%S GMT" -s "$D" >/dev/null 2>&1 \ || date -u -s "$D" >/dev/null 2>&1 || return 1 hwclock -w >/dev/null 2>&1 || true } case "$(date +%Y)" in 19*|200*|201*|2020|2021|2022|2023|2024|2025) acerta_relogio || true ;; esac baixa() { if command -v curl >/dev/null 2>&1; then curl -fsSL --retry 3 --retry-delay 2 "$BASE/api/agent/setup-app" -o "$DIR/installer.py.new" else wget -qO "$DIR/installer.py.new" "$BASE/api/agent/setup-app" fi } echo "==> Flipix: baixando o instalador de $BASE" if ! baixa; then echo "==> Flipix: download falhou — tentando acertar o relógio e repetir" acerta_relogio || true baixa fi [ -s "$DIR/installer.py.new" ] || { echo "ERRO: download do instalador veio vazio."; exit 1; } mv "$DIR/installer.py.new" "$DIR/installer.py" # Rodando via pipe (curl | sh), o stdin do python seria o pipe já consumido — # religa no terminal para o instalador poder perguntar (código, WiFi, menu). if [ -e /dev/tty ]; then exec python3 "$DIR/installer.py" --base "$BASE" "$@" < /dev/tty fi exec python3 "$DIR/installer.py" --base "$BASE" --auto "$@"