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
| Argumento | Qué hace |
|---|---|
<token> | El token de registro: un servidor, una instalación. Si no lo pones, el comando te lo pide |
--disk /dev/sdb | El 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/16 | Una 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 |
--verbose | Cada línea de los comandos que ejecuta sale también en pantalla, no solo en el log |
--check | Solo 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
- 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. - 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.
- El pool de ZFS
boxesen tu disco. - 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.
- La primera imagen base: Ubuntu con Docker, Claude Code, Codex y OpenCode, de 10 a 20 minutos. El nodo la reconstruye cada 6 horas.
- 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.
- Arrancan cloudflared y node-host.
- 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, osudo 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 como | Qué hace |
|---|---|
detachbox-node-host · root | La ú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 sandbox | El Cloudflare Tunnel del nodo, solo saliente |
| Incus · root | Los terminales, cada uno un contenedor con su propio Docker |
| El contenedor del edge · dentro de Incus | El gateway de terminales y el proxy de vistas previas |
Qué va dónde
| Ruta | Qué |
|---|---|
/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.service | Los dos servicios |
/etc/cloudflared/detachbox.token | El 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.conf | Los ajustes sysctl del nodo y el límite de la caché de ZFS |
/usr/src/openzfs-build | El build de OpenZFS |
El pool boxes en tu disco | El disco de tu cuenta, los discos de sistema de los terminales y las imágenes base |