Migración de dispositivo (Device Migration)

1. ¿Qué es la migración?

Traslada una Unit existente de una Paid License activa desde una instalación anterior a una nueva. El dispositivo nuevo crea su propia identity y claves. No copie private keys, device.json, estado DPAPI ni Gateway identity. Trial no admite migración.

2. ¿Cuándo es necesaria?

Una actualización que conserva state e identity no es una migración.

3. Preparación

Ejecute register en el dispositivo nuevo, introduzca el Device Code en el portal Native, verifique la License y seleccione traslado de Unit existente, instalación de origen y motivo. Mantenga la misma operación y state-directory.

# Windows
$state = 'C:\ProgramData\ODRE\native-commercial'
$trust = '<APPROVED_TRUST_JSON_ABSOLUTE_PATH>'
$trustPin = '<INDEPENDENT_TRUST_SHA256>'
& .\runtime\python.exe .\odre-native.py register `
  --state-directory $state --trust-config $trust --trust-pin $trustPin

# Linux
state="$HOME/.local/state/odre-pqc/native-commercial"
trust='<APPROVED_TRUST_JSON_ABSOLUTE_PATH>'
trust_pin='<INDEPENDENT_TRUST_SHA256>'
python3.12 ./odre-native-ubuntu.py register \
  --state-directory "$state" --trust-config "$trust" --trust-pin "$trust_pin"

4. Dispositivo anterior

Sustitución normal: detenga tráfico nuevo, pero mantenga Native activo hasta confirmar el drain. Use en el dispositivo anterior el archivo odre-device-transfer-request.json descargado del portal:

# Windows
& .\runtime\python.exe .\odre-native.py transfer-release `
  --state-directory $state --trust-config $trust --trust-pin $trustPin `
  --transfer-request ".\odre-device-transfer-request.json" --confirm-stop

# Linux
python3.12 ./odre-native-ubuntu.py transfer-release \
  --state-directory "$state" --trust-config "$trust" --trust-pin "$trust_pin" \
  --transfer-request "./odre-device-transfer-request.json" --confirm-stop

No reinicie el dispositivo anterior. Puede ser necesario esperar el vencimiento de Offline Leases.

Dispositivo inaccesible: solicite source recovery en la misma operación, confirme el consentimiento con el mismo register nuevo y espere aprobación de soporte y vencimiento de Lease.

5. Activar el dispositivo nuevo

Continúe con el mismo register y state-directory. Tras un timeout no cree otra identity u operación; repita el mismo comando. Después del commit y la validación del destino, Native guarda la Lease de forma atómica.

6. Confirmar finalización

Confirme APPLIED, almacenamiento local de Lease y status. Verifique Gateway → Core → Protected Handler y una ejecución del Handler por solicitud antes de abrir tráfico. COMMITTED no demuestra por sí solo la finalización.

7. Fallos y precauciones