El conjunto de herramientas virtio-win-pkg-scripts permite auotmatizar la creación de paquetes de controladores VirtIO para entornos Windows. Su arquitectura modular facilita la personalización mediante la modificación de archivos de configuración específicos, permitiendo ajustar cómo se distribuyen los archivos y qué componentes se incluyen en el paquete final.
Configuración del Núcleo: util/filemap.py
La lógica principal del empaquetado reside en el archivo util/filemap.py. En este script se definen dos estructuras de datos fundamentales que gobiernan el comportamiento del proceso: DRIVER_OS_MAP (mapeo de sistemas operativos) y FILELISTS (listado de archivos permitidos).
Mapeo de Controladores: DRIVER_OS_MAP
Esta estructura establece el puente entre los directorios de origen y las rutas de salida según la versión de Windows y la arquitectura de hardware. A continuación, se presenta un ejemplo de cómo se estructuran estas reglas:
# Definición de rutas de destino según la plataforma
'VirtioInput': {
'Wxp/x86': ['winxp/i386'],
'Win7/amd64': ['w7/x64', '2k8r2/x64'],
'Win10/amd64': ['w10/x64', '2k16/x64', '2k19/x64'],
}
En este fragmento, el script interpreta que los archivos del controlador VirtioInput destinados a Windows 10 x64 deben replicarse en las carpetas de salida correspondientes a Windows 10, Server 2016 y Server 2019.
Gestión de Listas Blancas: FILELISTS
El diccionario FILELISTS actúa como un filtro de seguridad y limpieza, asegurando que solo los archivos necesarios formen parte del paquete. Permite definir conjuntos base y especializaciones por sistema operativo.
# Definición de archivos esenciales para un controlador de almacenamiento
componentes_viostor = [
'viostor.sys', 'viostor.inf', 'viostor.cat', 'viostor.pdb'
]
# Configuración estándar
FILELISTS['viostor'] = componentes_viostor + ['WdfCoInstaller01011.dll']
# Configuración específica para sistemas antiguos
FILELISTS['viostor:xp'] = componentes_viostor + ['vioscsi_helper.dll']
Técnicas de Personalización Avanzada
Soporte para Nuevas Versiones de Windows
Para extender la compatibilidad a nuevas versiones, como Windows Server 2022 o Windows 11, basta con actualizar las entradas correspondinetes en DRIVER_OS_MAP sin necesidad de alterar la lógica del script de ejecución.
'NetKVM': {
# Mapeos existentes...
'Win11/amd64': ['w11/x64', '2k22/x64'],
}
Incorporación de Arquitecturas Adicionales
Si se requiere dar soporte a plataformas como ARM64, se debe modificar el diccionario AUTO_ARCHES para que el script reconozca la nueva arquitectura durante el escaneo de directorios:
CONFIG_ARQUITECTURAS = {
"x86": "i386",
"amd64": "x64",
"arm64": "aarch64", # Nueva entrada para ARM
}
Estrategias de Optimización de Paquetes
Reducción del Tamaño del Binario
En entornos de producción, es común querer eliminar archivos de depuración (PDB) para reducir el peso del instalador. Esto se logra ajustando la lista blanca:
# Lista de archivos para producción (sin PDB)
FILELISTS['virtioserial:dist'] = ['vioser.sys', 'vioser.inf', 'vioser.cat']
Diferenciación por Versión de SO
Es posible utilizar la sintaxis de dos puntos (:) para crear excepciones. Si un archivo solo es compatible con Windows 8 y versiones anteriores, se puede segregar del paquete de Windows 10:
FILELISTS['viofs:w8'] = base_fs + ['legacy_manager.dll']
FILELISTS['viofs:w10'] = base_fs # Se omite el archivo legacy
Validación del Flujo de Trabajo
Tras modificar filemap.py, es fundamental verificar que los cambios se apliquen correctamente. El procedimiento recomendado es:
- Ejecutar el script de generación para un controlador específico: ```
python make-driver-dir.py --driver viostor --os w11 --arch amd64
- Validar la estructura jerárquica resultante mediante el comando
treeo explorador de archivos. - Confirmar que el archivo
.infy el catálogo.catcoinciden con lo definido en la lista blanca.
Resolución de Problemas Comunes
- Archivos ausentes: Verifique que el nombre del archivo en
FILELISTScoincida exactamente (incluyendo mayúsculas en sistemas Linux) con el archivo físico en el origen. - Conflictos de mapeo: Si un controlador se mapea a múltiples destinos que requieren archivos diferentes, utilice siempre la especialización mediante
FILELISTS['nombre:os']en lugar de la definición genérica. - Rutas incorrectas: Asegúrese de que las claves en
DRIVER_OS_MAPsigan el formato esperado por el script (normalmenteOS/Arquitectura).
Prácticas Recomendadas
Para mantener la mantenibilidad del proyecto a largo plazo, se recomienda agrupar los nombres de archivos comunes en variables reutilizables al inicio del archivo. Asimismo, documentar mediante comentarios cada mapeo no estándar facilita la colaboración entre ingenieros de sistemas. Mantener un control de versiones sobre filemap.py permite revertir cambios rápidamente en caso de que una nueva regla de mapeo cause inconsistencias en la estructura del paquete.