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
| Argumento | O que faz |
|---|---|
<token> | O token de registro: um servidor, uma instalação. Se ficar de fora, o comando pede |
--disk /dev/sdb | O disco inteiro e vazio para o pool do nó; um nome /dev/disk/by-id/… também funciona |
--private-network 10.20.0.0/16 | Uma rede privada que os terminais podem alcançar; repita para mais redes, ou use none para nenhuma. O que os terminais alcançam explica |
--verbose | Cada linha dos comandos que ele roda aparece também na tela, não só no log |
--check | Só 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
- 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. - 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.
- O pool ZFS
boxesno seu disco. - 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.
- 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.
- 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.
- O cloudflared e o node-host sobem.
- 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, ousudo 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 como | O que faz |
|---|---|
detachbox-node-host · root | O ú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 sandbox | O Cloudflare Tunnel do nó, só de saída |
| Incus · root | Os terminais, cada um num contêiner com o próprio Docker |
| O contêiner do edge · dentro do Incus | O gateway de terminais e o proxy de previews |
O que vai onde
| Caminho | O 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.service | Os dois serviços |
/etc/cloudflared/detachbox.token | O 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.conf | As configurações de sysctl do nó e o limite do cache do ZFS |
/usr/src/openzfs-build | O build do OpenZFS |
O pool boxes no seu disco | O disco da sua conta, os discos de sistema dos terminais e as imagens base |