Skip to content

Instantly share code, notes, and snippets.

@denoww
Created May 21, 2026 16:42
Show Gist options
  • Select an option

  • Save denoww/c8aefc63cb2c1eee99867c3e4a05fbc2 to your computer and use it in GitHub Desktop.

Select an option

Save denoww/c8aefc63cb2c1eee99867c3e4a05fbc2 to your computer and use it in GitHub Desktop.
turbgate — Android TV / Box installer

🤖 Instalador turbgate — Android TV / Box

Tem Orange Pi ou PC na portaria? Use o outro guia: https://gist.github.com/denoww/704d4edc52fb84212317c632a0aa27e5

Funciona em qualquer Android 7+ (SDK 24+) — testado em Pro Eletronic PROSB-3000 e modelos similares de TV Box. Quando o condomínio já tem TV de signage (corpflix), ela pode acumular o papel do turbgate sem hardware adicional.

Tempo total: ~5 min por TV.

⚡ TL;DR — mantenedor no laptop, TV ligada na rede

# 1. baixa o script (mantenedor faz isso 1 vez)
curl -fsSL https://turbgate.botbox.info/turbgate-android-setup.sh -o ~/turbgate-android-setup.sh
chmod +x ~/turbgate-android-setup.sh

# 2. provisiona a TV (1 comando por TV)
bash ~/turbgate-android-setup.sh <ip-da-tv> <token>

O script faz tudo: emite o certificado mTLS no ERP, baixa o APK mais recente, instala via ADB, injeta as credenciais via Intent e sobe o serviço. Em ~10s aparece no modal Tunnels Ativos do ERP.

⚠️ Pré-condição na TV: ADB sobre rede habilitado (porta 5555). Veja passo 3 se ainda não tiver ativado.


O que você precisa em mãos

No laptop do mantenedor (Linux ou macOS):

  • adb instalado — Android SDK Platform Tools (descompacta o .zip e adiciona no PATH, ou rode com path completo)
  • curl, jq, bash (vêm padrão)
  • Acesso à rede do cliente (cabo ou WiFi na mesma LAN da TV)

Na TV:

  • Android 7+ (qualquer marca: Pro Eletronic, Xiaomi Mi Box, Chromecast Google TV, etc)
  • Cabo de rede ou WiFi configurado
  • ADB sobre rede ativado (passos abaixo) — só precisa fazer 1x

Do gestor:

Onde achar o token (gestor)

  1. Logado no ERP, vai em Equipamentos do cliente
  2. Menu "Ver Tunnels Ativos"
  3. Modal abre com seção "Token de instalação"
  4. Clica em Copiar — token de 32 caracteres tipo cc2d85d7a1...
  5. Manda esse token pro mantenedor via WhatsApp/email

O token é único por cliente e automaticamente reutilizável (1 token serve pra TODOS os equipamentos daquele cliente, independente da plataforma). Nunca expira sozinho — só se você clicar "Regenerar" no modal (que invalida instalações antigas).

⚠️ Cuidado: regenerar token derruba todos os turbgates existentes do cliente. Eles param de comunicar com o ERP em ~1min e precisam ser reinstalados com o token novo. Só regenere em caso de vazamento confirmado.

Passos

1. Habilita Modo Desenvolvedor na TV (1x — pula se já fez):

  • Settings (Configurações) → Sobre / Sobre o dispositivo
  • Procura Número da versão / Build number e toca 7 vezes seguidas
  • Aparece toast "Você é agora um desenvolvedor"

2. Habilita ADB sobre rede:

  • Volta em Settings → procura Opções do desenvolvedor (apareceu agora)
  • Ativa o switch "Depuração por USB" (ou "USB debugging")
  • Ativa o switch "Depuração por rede" ou "ADB sobre rede / Wireless debugging" (o nome muda por modelo)
  • Anota o IP da TV que aparece nessa tela (ex: 192.168.1.50). Se não aparecer, veja como achar o IP abaixo.

Em algumas TVs Pro Eletronic / Allwinner, a opção pode estar em Settings → Sistema → Sobre → Build ou Settings → Aplicativos → Sistema → Opções de rede ADB. Se não encontrar pelo D-pad, peça print da tela de Settings ao zelador via WhatsApp.

3. No laptop do mantenedor, baixa o script (só na 1ª vez):

curl -fsSL https://turbgate.botbox.info/turbgate-android-setup.sh -o ~/turbgate-android-setup.sh
chmod +x ~/turbgate-android-setup.sh

4. Roda o setup passando o IP da TV e o token:

bash ~/turbgate-android-setup.sh <ip-da-tv> <token>

Exemplo real:

bash ~/turbgate-android-setup.sh 192.168.1.50 cc2d85d7a1b9...

O script vai:

  • Conectar via ADB na TV (porta 5555)
  • Emitir certificado mTLS no ERP usando seu token
  • Instalar o APK turbgate.apk (baixa de https://turbgate.botbox.info/turbgate.apk)
  • Passar as credenciais via Intent (sem mexer em /sdcard — usa Binder do Android)
  • Iniciar o TurbgateService (ForegroundService permanente)

Output esperado nas últimas linhas:

✓ pronto. APK instalado e provisionado.
  cliente_id: 6353   server: turbgate.botbox.info:7000

5. Na 1ª execução, a TV pode mostrar popup "Permitir Depuração USB?" com o fingerprint do seu laptop:

  • Marca "Sempre permitir deste computador"
  • Clica OK no controle da TV

Se o popup não aparecer, é porque a TV já tinha autorizado seu laptop em sessão anterior — segue direto.

6. Confirma que o tunnel subiu (no laptop, monitor o logcat):

adb -s <ip-da-tv>:5555 logcat -d | grep -E "TurbgateService|welcome|self-tunnel"

Deve aparecer:

TurbgateService: spawn .../libturbgate.so run --config .../turbgate.yaml
TurbgateService: welcome session_id=c<cliente_id>-...
TurbgateService: self-tunnel up — adb connect turbgate1.botbox.info:<PORTA>

Em ~10s a TV aparece no modal Tunnels Ativos do ERP com o ID do tunnel = MAC da interface ativa.

7. Confirma o acesso remoto à TV (a partir do seu laptop, fora da rede do cliente):

adb connect turbgate1.botbox.info:<porta-do-self-tunnel>
adb -s turbgate1.botbox.info:<porta> shell logcat | grep turbgate

A porta exata aparece na coluna "SSH no equipamento" do modal Tunnels Ativos no ERP (em Android, o comando exibido é adb connect ..., não ssh -p ...).

Se conectar, pronto — entrega pro cliente.

Como achar o IP da TV

Se a tela de ADB não mostrou o IP, ou se você está descobrindo as TVs do cliente:

Linux / macOS:

nmap -p 5555 --open -T4 -n 192.168.1.0/24

Lista hosts com porta 5555 aberta (= ADB sobre rede ativo).

Painel do roteador: procura por hostname com android, tv, box, ou o modelo (prosb, mibox).

Direto na TV: Settings → Rede → Wi-Fi/Ethernet → Endereço IP (mostra na própria UI).

Múltiplas TVs no mesmo cliente

Sim, suporta. Cada TV vira um device tunelado dentro do mesmo cliente_id. Repita os passos 1-5 em cada TV usando o mesmo token. Cada uma vai ter um MAC diferente e aparecer separadamente no modal Tunnels Ativos.

Importante: 1 só cliente_id por máquina turbgate. Se você instalar com o mesmo token em 2 TVs do mesmo cliente, a segunda derruba a primeira (registerSession 1-por-cliente_id). Use o token só pra rodar o setup — pra ter 2 TVs ativas simultâneas, cada uma precisa de um cliente real cadastrado no ERP.

Auto-update

A TV consulta https://turbgate.botbox.info/manifest.json a cada 30 min e se aplica via PackageInstaller quando há versão nova. Mesma estratégia do Linux/Windows.

⚠️ Em devices sem Device Owner (Pro Eletronic PROSB-3000, etc), o install do APK exige tap "Instalar" no controle da TV. Não é totalmente silencioso. Em Mi Box / Chromecast Google TV com conta Google, o update é silencioso.

Deu problema?

Sintoma O que checar
failed to connect to '<ip>:5555' ADB sobre rede não tá ativo na TV (passo 2) ou IP errado. Confirma na própria TV em Settings → Sobre.
unauthorized no adb devices Popup de autorização na TV — clica Permitir no controle
install: Failure [INSTALL_FAILED_*] Versão antiga do APK instalada com assinatura diferente. Rode adb -s <ip>:5555 uninstall info.botbox.turbgate e tente de novo
cliente desconectado em loop nos logs Outro turbgate (Orange Pi, PC) tem o mesmo cliente_id brigando pela sessão. Pare o outro ou use outro cliente_id
ADB connection refused mas TV liga Algumas TVs perdem ADB sobre rede após reboot. Habilite de novo no passo 2. Em produção, considere se TV é o equipamento certo pro turbgate desse cliente
TV não aparece no modal Tunnels Ativos Internet do cliente bloqueando porta 7000? Testa de outro lugar: nc -zv turbgate.botbox.info 7000

Manda print do erro no grupo do suporte que a gente resolve junto.


Por que ADB e não SSH?

Android Box/TV não vem com servidor SSH. O equivalente nativo de "shell remoto" no Android é o ADB — protocolo Google que já gerencia auth (chave RSA), push/pull de arquivos, shell, logcat, am start, pm install, tudo. O self-tunnel do turbgate aponta pra porta ADB local (5555) do device, e o mantenedor remoto se conecta via:

adb connect turbgate1.botbox.info:<porta-pública>
adb shell logcat | grep turbgate
adb shell pm dump info.botbox.turbgate

Risco: se a chave RSA do seu laptop vazar, qualquer um pode conectar nessa porta pública. Mantenha ~/.android/adbkey com permissão 600 e nunca commite num repo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment