detachbox
PáginasInstale o nó

Instale o nó

Um comando como root transforma um servidor Ubuntu limpo no seu nó. Passe a ele o token do seu contato no detachbox e o disco vazio para o pool:

curl -fsSL https://api.detachbox.com/api/v1/node-host/install \
  | sudo bash -s -- <token> --disk /dev/sdb

Leva de 30 a 60 minutos, a maior parte deles compilando o OpenZFS e a primeira imagem base. Termina com "The node … is live", e os terminais da sua conta abrem em https://my.detachbox.com.

Num servidor em que outras pessoas fazem login, deixe o token de fora: enquanto a instalação roda, qualquer usuário local vê a linha de comando. Sem o token nela, o comando pede o token no seu terminal como detachbox enrollment token: e não mostra o que você digita.

curl -fsSL https://api.detachbox.com/api/v1/node-host/install \
  | sudo bash -s -- --disk /dev/sdb

O que o comando recebe

ArgumentoO que faz
<token>O token de registro: um servidor, uma instalação. Se ficar de fora, o comando pede
--disk /dev/sdbO disco inteiro e vazio para o pool do nó; um nome /dev/disk/by-id/… também funciona
--private-network 10.20.0.0/16Uma rede privada que os terminais podem alcançar; repita para mais redes, ou use none para nenhuma. O que os terminais alcançam explica
--verboseCada linha dos comandos que ele roda aparece também na tela, não só no log
--checkSó as verificações: nada muda no servidor, e o token não é gasto

Rodar de novo sem --private-network mantém as redes passadas na execução anterior. Depois que o nó se registrar, mude as redes com private-networks, não com o comando de instalação.

Primeiro, as verificações

O comando começa com uma tabela de verificações: o sistema, root, systemd, o sistema de arquivos raiz, outros contêineres ou túneis no servidor, CPU e RAM, o disco, as redes privadas, o relógio, o Secure Boot e os headers do kernel quando o ZFS precisa ser compilado, DNS, cada destino de saída, TLS e o token. Cada linha mostra ✓ ou ✗, e embaixo de cada ✗ vem a correção. Nada muda no servidor até todas as linhas mostrarem ✓.

Para ver a tabela antes do dia da instalação, coloque --check depois do token:

curl -fsSL https://api.detachbox.com/api/v1/node-host/install \
  | sudo bash -s -- <token> --check --disk /dev/sdb

Ele roda só as verificações e termina com Nothing on this machine changed and the token is not spent: the same command without --check installs the node. O node-host que ele baixou e verificou fica no servidor para essa próxima execução, como depois de qualquer execução.

Os oito passos

  1. Pacotes: o Incus mais novo do repositório estável da Zabbly (7.6 ou posterior) e o cloudflared mais novo da Cloudflare, dos próprios repositórios apt deles, com as chaves de assinatura embutidas no instalador. A instalação deixa os dois em hold (apt-mark hold): reiniciar qualquer um deles derruba por alguns segundos as conexões abertas com o nó, então eles só mudam num momento que você escolher, ou num dia em que nenhum terminal roda.
  2. O OpenZFS 2.4.4 e o limite do cache do ZFS. O instalador compila o OpenZFS a partir da versão oficial, com o SHA-256 fixado e a assinatura conferida com a chave de versões do OpenZFS, e gera pacotes com um módulo DKMS, então todo kernel com headers recebe o módulo. Ele troca o módulo do Ubuntu pelo novo sem reiniciar.
  3. O pool ZFS boxes no seu disco.
  4. Incus: o armazenamento, duas bridges (uma para os terminais, outra para o edge do nó), as regras de firewall delas, os projetos do Incus e a API do próprio Incus só na bridge do edge.
  5. A primeira imagem base: Ubuntu com Docker, Claude Code, Codex e OpenCode, de 10 a 20 minutos. O nó a reconstrói a cada 6 horas.
  6. Registro em api.detachbox.com: o nó recebe o nome, as chaves, o Cloudflare Tunnel e um domínio próprio em detachbox.dev; o node-host recebe a configuração e as units.
  7. O cloudflared e o node-host sobem.
  8. A ativação pelo servidor: o detachbox alcança o node-host pelo túnel, sobe o edge (o gateway de terminais e o proxy de previews), roda um smoke test e configura o Compute da sua conta. O comando mostra cada etapa conforme o servidor chega nela.

Cada passo mostra a parte em que está, como o configure, a compilação e o empacotamento do build do OpenZFS. Enquanto uma parte longa roda, aparece uma linha a cada 30 segundos.

Rodar de novo continua de onde parou

Se algo parar a instalação, como um host bloqueado, uma conexão que caiu ou uma reinicialização, rode o mesmo comando de novo. Ele continua do passo que parou, e o que já terminou não é refeito. O node-host que ele baixou e verificou fica no servidor, acessível só para root, até a instalação colocá-lo no lugar. Um token baixa o node-host três vezes, depois uma vez a cada 30 minutos; o comando diz quanto tempo esperar.

  • Se o shell remoto de onde você iniciou o comando cair, a instalação para onde está. Iniciada sem terminal, de um script ou de uma ferramenta com limite de tempo, ela continua rodando. Numa conexão instável, rode dentro do tmux.
  • Ctrl-C, ou sudo kill <pid> em outra sessão, para uma execução em segundos, junto com tudo o que o passo dela iniciou.
  • Uma execução por vez. Se você iniciar o comando enquanto uma execução está trabalhando, ele não muda nada: diz desde quando essa execução está trabalhando, o processo dela e como acompanhá-la.
  • Rodar de novo usa o mesmo disco. Para recomeçar em outro disco, desinstale antes.

Quando um passo falha

O comando mostra o que falhou, por quê, e o comando ou a mudança que resolve, com as últimas 30 linhas do comando que falhou. A falha vai para o detachbox com o seu token, então o seu contato no detachbox também a vê. Corrija e rode o mesmo comando de novo. Solução de problemas do nó cobre as falhas mais comuns.

O log

/var/lib/detachbox-node/install/install.log guarda cada execução inteira: a linha com o início e a versão dela, cada linha de cada comando que ela rodou e como terminou. Se você perdeu a sessão, o log diz como a execução terminou. Para acompanhar uma execução de outra sessão:

sudo tail -f /var/lib/detachbox-node/install/install.log

O que roda no servidor

O quê · roda comoO que faz
detachbox-node-host · rootO único caminho do detachbox até o nó: executa as requisições assinadas do servidor no Incus local, mantém o orçamento de CPU e RAM da conta, reconstrói a imagem base e se atualiza a partir de versões assinadas
cloudflared-detachbox · cloudflared, em sandboxO Cloudflare Tunnel do nó, só de saída
Incus · rootOs terminais, cada um num contêiner com o próprio Docker
O contêiner do edge · dentro do IncusO gateway de terminais e o proxy de previews

O que vai onde

CaminhoO quê
/usr/local/bin/detachbox-node-host, /usr/local/lib/detachbox-node/O programa
/etc/detachbox-node/A configuração (node-host.json) e as chaves
/var/lib/detachbox-node/O estado; o histórico e o log da instalação, em install/
/etc/systemd/system/detachbox-node-host.service, /etc/systemd/system/cloudflared-detachbox.serviceOs dois serviços
/etc/cloudflared/detachbox.tokenO token do túnel
/etc/apt/sources.list.d/, /etc/apt/keyrings/Os repositórios da Zabbly e da Cloudflare e as chaves deles
/etc/sysctl.d/90-detachbox.conf, /etc/modprobe.d/zfs.confAs configurações de sysctl do nó e o limite do cache do ZFS
/usr/src/openzfs-buildO build do OpenZFS
O pool boxes no seu discoO disco da sua conta, os discos de sistema dos terminais e as imagens base