detachbox
PáginasInstala el nodo

Instala el nodo

Un solo comando como root convierte un servidor Ubuntu limpio en tu nodo. Pásale el token de tu contacto en detachbox y el disco vacío para el pool:

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

Tarda de 30 a 60 minutos; casi todo ese tiempo se va en compilar OpenZFS y la primera imagen base. Termina con «The node … is live», y los terminales de tu cuenta se abren en https://my.detachbox.com.

En un servidor en el que entran otras personas, no pongas el token en el comando: mientras corre la instalación, cualquier usuario local puede ver una línea de comandos. Sin el token, el comando te lo pide en tu terminal como detachbox enrollment token: y no muestra lo que escribes.

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

Lo que acepta el comando

ArgumentoQué hace
<token>El token de registro: un servidor, una instalación. Si no lo pones, el comando te lo pide
--disk /dev/sdbEl disco entero y vacío para el pool del nodo; también vale un nombre /dev/disk/by-id/…
--private-network 10.20.0.0/16Una red privada a la que pueden llegar los terminales; repítelo para añadir más, o pon none para ninguna. Lo que alcanzan los terminales lo explica
--verboseCada línea de los comandos que ejecuta sale también en pantalla, no solo en el log
--checkSolo las comprobaciones: nada cambia en el servidor y el token no se gasta

Si repites la instalación sin --private-network, conserva las redes que recibió la ejecución anterior. Una vez registrado el nodo, cámbialas con private-networks, no con el comando de instalación.

Primero, las comprobaciones

El comando empieza con una tabla de comprobaciones: el sistema, root, systemd, el sistema de archivos raíz, otros contenedores o túneles en el servidor, CPU y RAM, el disco, las redes privadas, el reloj, Secure Boot y las cabeceras del kernel cuando hay que compilar ZFS, DNS, cada destino saliente, TLS y el token. Cada línea muestra ✓ o ✗, y debajo de cada ✗ está la solución. Nada cambia en el servidor hasta que todas las líneas muestran ✓.

Para ver la tabla antes del día de la instalación, pon --check después del token:

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

Solo ejecuta las comprobaciones y termina con Nothing on this machine changed and the token is not spent: the same command without --check installs the node. El node-host que descargó y verificó se queda en el servidor para esa siguiente ejecución, como tras cualquier ejecución.

Los ocho pasos

  1. Paquetes: el Incus más nuevo del repositorio estable de Zabbly (7.6 o posterior) y el cloudflared más nuevo de Cloudflare, desde sus propios repositorios de apt, con sus claves de firma incluidas en el instalador. La instalación retiene los dos (apt-mark hold): reiniciar cualquiera de ellos corta durante unos segundos las conexiones abiertas con el nodo, así que solo se actualizan en el momento que tú elijas, o un día en que no corra ningún terminal.
  2. OpenZFS 2.4.4 y el límite de la caché de ZFS. El instalador compila OpenZFS desde la versión oficial, con su SHA-256 fijado y su firma comprobada con la clave de versiones de OpenZFS, y lo empaqueta con un módulo DKMS, así que cada kernel con cabeceras lo recibe. Cambia el módulo de Ubuntu por el nuevo sin reiniciar.
  3. El pool de ZFS boxes en tu disco.
  4. Incus: su almacenamiento, dos bridges (uno para los terminales y otro para el edge del nodo), sus reglas de firewall, los proyectos de Incus, y la API de Incus solo en el bridge del edge.
  5. La primera imagen base: Ubuntu con Docker, Claude Code, Codex y OpenCode, de 10 a 20 minutos. El nodo la reconstruye cada 6 horas.
  6. Registro en api.detachbox.com: el nodo recibe su nombre, sus claves, su Cloudflare Tunnel y su propio dominio bajo detachbox.dev; node-host recibe su configuración y sus unidades.
  7. Arrancan cloudflared y node-host.
  8. La puesta en marcha desde el servidor: detachbox llega a node-host por el túnel, arranca el edge (el gateway de terminales y el proxy de vistas previas), ejecuta una prueba de humo y crea el Compute de tu cuenta. El comando imprime cada etapa a medida que el servidor llega a ella.

Cada paso imprime la parte en la que está, como el configure, la compilación y el empaquetado del build de OpenZFS. Mientras dura una parte larga, sale una línea cada 30 segundos.

Al repetirla, sigue donde se paró

Si algo detiene la instalación, como un host bloqueado, una conexión caída o un reinicio, vuelve a ejecutar el mismo comando. Sigue desde el paso que se detuvo, y lo que ya terminó no se repite. El node-host que descargó y verificó se queda en el servidor, accesible solo para root, hasta que la instalación lo pone en su sitio. Un token descarga node-host tres veces y después una vez cada 30 minutos; el comando dice cuánto esperar.

  • Si se cae el shell remoto desde el que la lanzaste, la instalación se detiene donde está. Lanzada sin terminal, desde un script o una herramienta con límite de tiempo, sigue funcionando. Con una conexión inestable, ejecútala dentro de tmux.
  • Ctrl-C, o sudo kill <pid> desde otra sesión, detiene una ejecución en segundos, junto con todo lo que inició su paso.
  • Una ejecución cada vez. Si lanzas el comando mientras otra ejecución está trabajando, no cambia nada: dice desde cuándo trabaja esa ejecución, su proceso y cómo seguirla.
  • Al repetirla, usa el mismo disco. Para empezar de cero en otro disco, desinstala primero.

Cuando falla un paso

El comando imprime qué falló, por qué y el comando o el cambio que lo arregla, con las últimas 30 líneas del comando que falló. El fallo llega a detachbox con tu token, así que tu contacto en detachbox también lo ve. Arréglalo y vuelve a ejecutar el mismo comando. Solución de problemas del nodo cubre los fallos habituales.

El log

/var/lib/detachbox-node/install/install.log guarda cada ejecución completa: la línea con su inicio y su versión, cada línea de cada comando que ejecutó y cómo terminó. Si perdiste la sesión, el log dice cómo terminó la ejecución. Para seguir una ejecución desde otra sesión:

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

Lo que corre en el servidor

Qué · corre comoQué hace
detachbox-node-host · rootLa única vía por la que detachbox llega al nodo: lleva a cabo las peticiones firmadas del servidor en el Incus local, mantiene el presupuesto de CPU y RAM de la cuenta, reconstruye la imagen base y se actualiza a sí mismo desde versiones firmadas
cloudflared-detachbox · cloudflared, en un sandboxEl Cloudflare Tunnel del nodo, solo saliente
Incus · rootLos terminales, cada uno un contenedor con su propio Docker
El contenedor del edge · dentro de IncusEl gateway de terminales y el proxy de vistas previas

Qué va dónde

RutaQué
/usr/local/bin/detachbox-node-host, /usr/local/lib/detachbox-node/El programa
/etc/detachbox-node/Su configuración (node-host.json) y sus claves
/var/lib/detachbox-node/Su estado; el historial y el log de la instalación, en install/
/etc/systemd/system/detachbox-node-host.service, /etc/systemd/system/cloudflared-detachbox.serviceLos dos servicios
/etc/cloudflared/detachbox.tokenEl token del túnel
/etc/apt/sources.list.d/, /etc/apt/keyrings/Los repositorios de Zabbly y Cloudflare y sus claves
/etc/sysctl.d/90-detachbox.conf, /etc/modprobe.d/zfs.confLos ajustes sysctl del nodo y el límite de la caché de ZFS
/usr/src/openzfs-buildEl build de OpenZFS
El pool boxes en tu discoEl disco de tu cuenta, los discos de sistema de los terminales y las imágenes base