chore(dasuten): Actualizaciones migración SQL, W-Zombi y scripts
This commit is contained in:
@@ -5,8 +5,8 @@
|
||||
**Código:** A04.P005
|
||||
**Fecha:** 27 de marzo de 2026
|
||||
**Autor:** Sistema ADN
|
||||
**Versión:** 2.5
|
||||
**Estado:** 🚧 EN EJECUCIÓN (Nueva VM 105 dasu-sql3 - Fase 4.N1-4.N3 completadas)
|
||||
**Versión:** 3.1
|
||||
**Estado:** ⏸️ PAUSADO POR CORTE DE LUZ (Backup en srv-dasu listo, pendiente transferencia a dasu-sql4 + RESTORE)
|
||||
**Dependencia:** A04.P001 (Red srv-dasu)
|
||||
|
||||
## 📋 Resumen Ejecutivo
|
||||
@@ -83,35 +83,39 @@ Crear dos VMs nuevas (SQL Server + PC cliente) en `srv-dasu`, instalar el sistem
|
||||
- [ ] **3.9:** ⚠️ PROBLEMA: VMs sin conectividad de red IP. Estado: 192.168.1.x NO responde a ping desde srv-dasu. Investiguando causa (posible conflicto de bridge/red).
|
||||
- [x] **3.9:** Instalar qemu-guest-agent en VM dasu-pcv2 para backups desatendidos (ACPI shutdown) ✅.
|
||||
|
||||
### ⏳ **FASE 4: Nueva VM dasu-sql3 (VM 105)** *(2026-04-08)*
|
||||
### ✅ **FASE 4: Nueva VM dasu-sql4 (VM 106)** *(2026-04-09 — 2026-04-10)*
|
||||
|
||||
- [x] **4.N1:** Crear VM 105 (dasu-sql3) ✅. Eliminar VMs 103 y 104 problemáticas, crear VM 105 limpia.
|
||||
- [x] **4.N1:** Crear VM 106 (dasu-sql4) ✅. Eliminar VMs anteriores problemáticas, crear VM limpia.
|
||||
- [x] **4.N2:** ISO Windows Server 2022 Español ✅. Usar `Windows_Server_2022_Spanish_Evaluation.iso`.
|
||||
- [x] **4.N3:** Discos SATA ✅. 60GB (sata0) para SO + 120GB (sata1) para datos SQL.
|
||||
- [ ] **4.N4:** Finalizar instalación Windows.
|
||||
- [ ] **4.N5:** Instalar VirtIO drivers.
|
||||
- [ ] **4.N6:** Configurar hostname `dasu-sql3` y Workgroup.
|
||||
- [ ] **4.N7:** Configurar red DHCP.
|
||||
- [ ] **4.N8:** Instalar OpenSSH Server (puerto 7022).
|
||||
- [ ] **4.N9:** Instalar Tailscale.
|
||||
- [ ] **4.N10:** Instalar SQL Server 2019.
|
||||
- [x] **4.N4:** Finalizar instalación Windows ✅.
|
||||
- [x] **4.N5:** Instalar VirtIO drivers ✅.
|
||||
- [x] **4.N6:** Configurar hostname `dasu-sql4` y Workgroup ✅.
|
||||
- [x] **4.N7:** Configurar red DHCP ✅. IP: `192.168.1.26`.
|
||||
- [x] **4.N8:** Instalar W-Zombi Relay en srv-dasu y agente PS1 en dasu-sql4 ✅.
|
||||
- [x] **4.N9:** Instalar Tailscale ✅. **IP: 100.107.15.82** (Autenticado remotamente vía Zombi). ⚠️ Inestable, usar relay.
|
||||
- [x] **4.N10:** Instalar QEMU Guest Agent ✅. (Instalado desatendido desde la unidad VirtIO).
|
||||
- [x] **4.N11:** Instalar SQL Server 2019 Enterprise ✅. Instalado desatendido vía W-Zombi (comandos individuales). Disco F: 120GB (GPT/NTFS "SQLData") con carpetas DATA/LOG/BACKUP/TEMPDB. Auth mixta, SA habilitado, TCP 1433 abierto. Verificado con `sqlcmd @@VERSION`.
|
||||
- [x] **4.N12:** Backup comprimido generado en origen ✅. `BACKUP DATABASE ... WITH COMPRESSION` ejecutado en `srvv-fenix` vía `tiny_tds`. Archivo: `E:\BK_SQL\sysdasuten_compressed_ADN.bak`.
|
||||
|
||||
### ⏳ **FASE 4: Instalación del Sistema DASUTEN**
|
||||
### ⏳ **FASE 5: Migración de Base de Datos a dasu-sql4**
|
||||
|
||||
- [x] **4.1:** Obtener backup/script de la base de datos DASUTEN del sistema actual. ✅ (Descargado localmente archivo de 604MB y confirmado acceso vía SMB al crudo `.bak`)
|
||||
- [x] **4.2:** Restaurar/crear la base de datos DASUTEN en dasu-sql2. ✅ **Automatización implementada**: Creada la extensión nativa ADN `adn/tools/run dasuten db:migrar` (Ruby) que realiza la descarga SMB, extracción y restauración vía SQLCMD de manera eficiente, segura y reutilizable, eliminando el uso de scripts temporales de shell.
|
||||
- [ ] **4.3:** Instalar la aplicación cliente DASUTEN en dasu-pcv2.
|
||||
- [ ] **4.4:** Configurar la conexión de la aplicación al SQL Server usando autenticación SQL (no Windows Integrated).
|
||||
- [ ] **4.5:** Verificar que la aplicación conecta y opera correctamente.
|
||||
- [x] **5.1:** Obtener backup comprimido de DASUTEN ✅. Generado con `BACKUP DATABASE ... WITH COMPRESSION` en `srvv-fenix` vía `tiny_tds` (script `dasuten_backup_origen.rb`). Archivo: `sysdasuten_compressed_ADN.bak` en `E:\BK_SQL` (~1.33 GB).
|
||||
- [x] **5.2a:** Descargar `.bak` desde `srvv-fenix` → `srv-ns8` (SMB) ✅. 1333 MB descargados a `/var/tmp/` en ~17 seg (76 MB/s).
|
||||
- [x] **5.2b:** Transferir `.bak` desde `srv-ns8` → `srv-dasu` (SCP vía Tailscale) ✅. Archivo en `/tmp/sysdasuten_compressed_ADN.bak`.
|
||||
- [ ] **5.2c:** Transferir `.bak` desde `srv-dasu` → `dasu-sql4`. ⚠️ **Bloqueado**: Python HTTP server falla con archivos grandes (`iwr`/`WebClient` → "conexión terminada inesperadamente"). **Estrategia aprobada**: instalar OpenSSH Server en dasu-sql4 (puerto 7022) y transferir vía SCP directamente por LAN. `Add-WindowsCapability` fue enviado pero interrumpido por corte de luz.
|
||||
- [ ] **5.3:** Restaurar base de datos con `RESTORE DATABASE` en dasu-sql4.
|
||||
- [ ] **5.4:** Verificar integridad de la base restaurada.
|
||||
- [ ] **5.5:** Registrar credenciales dasu-sql4:sa en bóveda candados.
|
||||
|
||||
### ⏳ **FASE 5: Validación con PC física**
|
||||
### ⏳ **FASE 6: Validación con PC cliente**
|
||||
|
||||
- [ ] **5.1:** Instalar la aplicación cliente DASUTEN en `dasu-pc` (PC física de la oficina).
|
||||
- [ ] **5.2:** Configurar conexión al SQL Server (dasu-sql2) por IP.
|
||||
- [ ] **5.3:** Ejecutar pruebas funcionales del sistema DASUTEN (consultas, altas, reportes).
|
||||
- [ ] **5.4:** Documentar qué funcionalidades dependen del DC (si alguna) y cuáles operan sin él.
|
||||
- [ ] **5.5:** Evaluar rendimiento y estabilidad.
|
||||
- [ ] **5.6:** **Decisión**: ¿Se puede prescindir del DC para esta implementación?
|
||||
- [ ] **6.1:** Instalar la aplicación cliente DASUTEN en `dasu-pcv2` o `dasu-pc` (PC física).
|
||||
- [ ] **6.2:** Configurar conexión al SQL Server (`dasu-sql4`, IP `192.168.1.26`, puerto 1433) usando autenticación SQL.
|
||||
- [ ] **6.3:** Ejecutar pruebas funcionales del sistema DASUTEN (consultas, altas, reportes).
|
||||
- [ ] **6.4:** Documentar qué funcionalidades dependen del DC (si alguna) y cuáles operan sin él.
|
||||
- [ ] **6.5:** Evaluar rendimiento y estabilidad.
|
||||
- [ ] **6.6:** **Decisión**: ¿Se puede prescindir del DC para esta implementación?
|
||||
- ✅ **SÍ** → Adoptar este enfoque como definitivo, descartar VMs con DC.
|
||||
- ❌ **NO** → Reactivar VMs originales y retomar enfoque con DC.
|
||||
|
||||
@@ -152,12 +156,18 @@ Crear dos VMs nuevas (SQL Server + PC cliente) en `srv-dasu`, instalar el sistem
|
||||
- **Escape JSON en W-ZOMBI de PowerShell:** Grandes scripts en línea que se parsean a través de `cmd.json` destrozan la interpretación si hay fallas en la conexión. Para Server Core sin GUI, fue más seguro bypassear W-ZOMBI subiendo el PowerShell directo sobre un HTTP en Python temporal (`/tmp/s.ps1`).
|
||||
- **QEMU-GA y Nombres de Unidad Aleatorios:** En entornos con múltiples CDs montados (OS + Drivers VirtIO + CD Extra), Windows Server asigna letras impredecibles (no siempre `D:`). El path del Agent MSI debe resolverse programáticamente usando `Get-WmiObject Win32_CDROMDrive`.
|
||||
- **Usuario Administrador localizado:** Al instalar Server Core desde la ISO `es-es`, el administrador por defecto se renombra literalmente a `Administrador` en español. Esto es crítico porque intentos de conexión desatendida vía SSH con `sshpass` o secuencias usando `Administrator` devolverán "Permission denied", ocultando que el servidor SSH en realidad sí estaba escuchando en el puerto.
|
||||
- **Compresión Nativa de BACKUP SQL vs RAR:** Actualmente el sistema de origen encapsula los `.bak` dentro de un `.rar` gigante (ej. `bksysdasuten.rar`). SQL Server **no sabe** leer `.rar` ni ZIP nativamente para operaciones RESTORE DATABASE. Ya que Linux tiene herramientas como `unar` que facilitan la extracción en RAM, es factible este paso intermedio. Sin embargo, **la solución definitiva y óptima ("menos es más")** para el origen de datos es generar el archivo `.bak` instruyendo a SQL Server que lo comprima nativamente con la opción `WITH COMPRESSION`. Un `.bak` comprimido es un 80% más pequeño, y SQL Server destino lo levanta sin pasos intermedios de extracción, evitando problemas de almacenamiento temporal e I/O innecesarios en el nodo de linux (`srv-dasu`) al copiar el archivo directo al Windows (`dasu-sql2`).
|
||||
- **Compresión Nativa de BACKUP SQL vs RAR:** Actualmente el sistema de origen encapsula los `.bak` dentro de un `.rar` gigante (ej. `bksysdasuten.rar`). SQL Server **no sabe** leer `.rar` ni ZIP nativamente para operaciones RESTORE DATABASE. **Solución definitiva implementada**: generar el `.bak` con `WITH COMPRESSION` directamente desde SQL Server origen vía `tiny_tds`. Resultado: ~80% más pequeño, sin pasos intermedios de extracción.
|
||||
- **W-Zombi y comillas en argumentos PowerShell:** Al enviar comandos con comillas dobles a través de W-Zombi (`cmd.json`), las comillas se escapan incorrectamente (`\"` en lugar de `""`). **Solución**: enviar comandos individuales sin comillas en los filtros (ej. `Get-Disk 1` en vez de `Where-Object PartitionStyle -eq "RAW"`).
|
||||
- **Instalación SQL Server desatendida vía W-Zombi:** Enviar el comando `Start-Process D:\setup.exe -ArgumentList "..." -Wait` funciona correctamente. La instalación Enterprise tarda ~8 minutos. Las comillas dobles internas se escapan con `""` (doble-doble) dentro del argumento.
|
||||
- **Servir archivos a VMs sin Tailscale directo:** Cuando Tailscale cae en la VM, se puede servir archivos desde srv-dasu con `python3 -m http.server 8080` en `/tmp`, y la VM los descarga vía `iwr http://192.168.1.13:8080/archivo` por la LAN del ISP.
|
||||
- **Python `http.server` NO soporta descargas grandes (~1GB+):** `Invoke-WebRequest` y `Net.WebClient.DownloadFile()` en PowerShell fallan con "conexión terminada inesperadamente" al descargar archivos de ~1.3GB desde `python3 -m http.server`. El módulo es single-threaded y no maneja correctamente respuestas chunked/grandes. **Solución**: instalar OpenSSH Server en la VM destino Windows y transferir vía SCP por la LAN (gigabit), que es nativo y confiable para archivos grandes.
|
||||
- **W-Zombi se bloquea en comandos largos:** Cuando el agente PS1 ejecuta un comando que tarda minutos (ej. `Add-WindowsCapability`), deja de pollear el relay. No se pierde — al terminar, reanuda automáticamente y recoge el siguiente comando en cola. No reiniciar el agente prematuramente.
|
||||
- **Scripts wrapper evitan problemas de escape con candados:** Para comandos con comillas complejas (ej. `smbclient -U "user%$PASS"`), crear un script `.sh` local con `File.write`, asignar `chmod 0755`, y pasarlo como argumento a `candados run`. Esto evita el doble/triple escape de comillas.
|
||||
|
||||
## 🔗 Referencias
|
||||
|
||||
- **Ámbito**: [A04_dtic-DASUTEN.md](A04_dtic-DASUTEN.md)
|
||||
- **Plan de red**: [A04.P001_Red-SrvDasu.md](A04.P001_Red-SrvDasu.md)
|
||||
- **Plan integración (pausado)**: [A04.P002_Integracion-DASU-PC.md](A04.P002_Integracion-DASU-PC.md)
|
||||
- **Nodos**: [srv-dasu](../../../nodos/srv-dasu.md) | [srv-ns8](../../../nodos/srv-ns8.md)
|
||||
- **Nodos**: [srv-dasu](../../../nodos/srv-dasu.md) | [dasu-sql4](../../../nodos/dasu-sql4.md) | [srv-ns8](../../../nodos/srv-ns8.md)
|
||||
- **Legacy archivado**: [_hist_P2601_dasuten.md](_hist_P2601_dasuten.md)
|
||||
|
||||
Reference in New Issue
Block a user