Ejecutar tareas post instalación en Nano Server

Para cerrar la trilogía de posts sobre Nano server hoy toca escribir acerca de las acciones post instalación una vez ha sido desplegado. Y diréis, ¿no me sirven las tareas que he configurables en el MDT? pues no :/

Así pues, para resolver este “problema” existen algunas posibilidades aplicables a varios sistemas operativos Microsoft:

  • Mediante un fichero unnattend.xml
  • Editando el fichero setupcomplete.cmd

Ante esta encrucijada donde las dos opciones disponibles implican editar archivos de sistema, he decidido decantarme por la edición del fichero setupcomplete.cmd situado en la ruta C:\windows\setup\scripts.

IMPORTANTE: Editar archivos de sistema siempre implica un riesgo, así que si no estáis al 100% seguros de lo que tocáis mejor no hacerlo.

Por defecto este fichero tiene el siguiente contenido:

@ECHO OFF
set SCLOG=%SystemRoot%\setup\scripts\setupcomplete.log
echo "Executing 'netsh advfirewall firewall add rule name='WinRM 5985' protocol=TCP dir=in localport=5985 profile=any action=allow'" >> %SCLOG%
netsh advfirewall firewall add rule name="WinRM 5985" protocol=TCP dir=in localport=5985 profile=any action=allow >> %SCLOG%
echo "Executing 'netsh advfirewall firewall set rule group='@FirewallAPI.dll,-29252' new enable=Yes'" >> %SCLOG%
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-29252" new enable=Yes >> %SCLOG%
echo "Executing 'tzutil.exe /s 'UTC''" >> %SCLOG%</pre><pre>

Para ejecutar tareas post instalación tan solo tenemos que añadir unas lineas en este fichero, por ejemplo:

  • Añadir variable de registro:

    reg.exe ADD “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment” /v Path /t REG_EXPAND_SZ /d “%Path%C:\opscode\chef\bin;C:\opscode\chef\embedded\bin;” /f

  • Ejecutar script en powershell:

    powershell “C:\temp\Scripts\miscript.ps1” >> %SCLOG%

Una vez editado el fichero debemos situarlo en la misma ruta. (En mi caso he usado el script que os comenté en mi anterior articulo que me permite depositar archivos tanto en la raíz de C: como en la carpeta C:\Windows).

Al iniciar el nano server este proceso tarda de 45 a 60 segundos en empezar a ejecutarse y una vez finalizado podemos consultar el log  en la misma ruta (setupcomplete.log).

"Executing 'netsh advfirewall firewall add rule name='WinRM 5985' protocol=TCP dir=in localport=5985 profile=any action=allow'" 
Ok.
"Executing 'netsh advfirewall firewall set rule group='@FirewallAPI.dll,-29252' new enable=Yes'"
Updated 3 rule(s).
Ok.
"Executing 'tzutil.exe /s 'UTC''" 
"Executing 'netsh advfirewall firewall add rule name='WinRM 5985' protocol=TCP dir=in localport=5985 profile=any action=allow'" 
Ok.
"Executing 'netsh advfirewall firewall set rule group='@FirewallAPI.dll,-29252' new enable=Yes'"
Updated 3 rule(s).
Ok.
"Executing 'tzutil.exe /s 'UTC''"

Desplegando una imagen de Nano Server desde MDT

Recientemente me encontré con el reto de automatizar el despliegue de una solución con Nano Server y después de darle varias vueltas, me decidí por realizar el despliegue usando MDT dado que se trata de una herramienta que no solo me permite distribuir varias imágenes de SO, sino que también puedo realizar muchas tareas pre instalación y post instalación.

Así pues, me puse en marcha y vi que la cosa no seria tan fácil dado que usando las Task Sequences que vienen por defecto, el proceso de despliegue no funcionaba bien. Así pues, después de pelearme con la herramienta durante un rato di con los archivos de customización para MDT que ha realizado Michael Niehaus (Estos los podéis descargar desde el siguiente link )

Dentro de este ZIP encontraremos tres carpetas (Scripts, Templates, Tools) con los siguientes ficheros:

  • Microsoft.BDD.DJoin.exe
  • LTIOfflineJoin.wsf
  • ServerNano.xml
  • ServerNanoVHD.xml
  • Unattend_x64.xml.10.0.ServerDatacenterNano
  • Unattend_x64.xml.10.0.ServerStandardNanoNano

Estos deberán ser depositados en:

  • Tools: en la carpeta Tools del deployment share C:\DeploymentShare\Tools\x64
  • Templates: en la carpeta Templates donde se ha instalado el MDT C:\Program Files\Microsoft Deployment Toolkit\Templates
  • Scripts: en la carpeta Scripts del deployment share C:\DeploymentShare\Scripts

Una vez realizados estos cambios, en el momento que queramos crear una Task Sequence desde el MDT ya podremos seleccionar el template Nano Server Task Sequence.

MDT_Nano1.png

Dado que las Task Sequences con Nano Server son bastante limitadas, las podemos combinar con alguno de los muchos scripts que circulan por Internet tanto para MDT como para SCCM.

En mi caso, por ejemplo, lo he combinado con este de copiar ficheros para, una vez finalizado el despliegue de un Nano Server con roles de virtualización, ejecutar scripts a posteriori que crearán maquinas virtuales sobre el servidor que he desplegado.

Personalizando una imagen de Nano Server con NSIB

Hoy, haré un pequeño break del mundo cloud y escribiré sobre una herramienta que he usado recientemente para personalizar imágenes de Nano Server (Por si alguien ha estado muy out los últimos meses y no sabe que es Nano Server podéis leerlo rápidamente en este link o bien si disponéis de algo mas de tiempo podéis darle un vistazo a este vídeo de Channel 9 donde aparezco hablando junto a @joandelgadoa).

La herramienta en cuestión es Nano Server Image Builder, esta nos permitirá tanto crear una imagen de Nano Server personalizada como crear un USB de arranque para instalar este SO.

Es importante destacar que para el uso de Nano Server Image Builder se debe tener instalado en el equipo el Windows Assessment and Deployment Kit (ADK) con las features Deployment tools y Windows Preinstallation Environment (Windows PE) como mínimo.

nanoserver1

En primer lugar se debe proceder a crear la imagen seleccionando la primera opción: Create a new Nano Server image. Seguidamente montar la imagen de Windows Server 2016 e introducir su ruta en el wizard.

nanoserver2

Se acepta el EULA y se selecciona el tipo de despliegue que queremos realizar. Este puede ser de dos tipos:

  • Maquinas virtuales
  • Servidor físico

En caso de seleccionar Máquinas virtuales, recordad que si esa imagen desea ser subida a Azure deberá ser creada con la extensión .VHD

nanoserver3

En la siguiente pantalla debemos seleccionar todos los roles que queremos que nuestro Nano Server posea y su versión.

nanoserver4

Se procede a asignar un nombre a la máquina, se introduce la contraseña del usuario administrador y se selecciona la zona horaria.

nanoserver5

En caso de querer habilitar el soporte remoto vía WinRM y Powershell para todas las subredes o bien configurar los datos de red (IP, Máscara de red,…) lo deberemos realizar desde aquí.

nanoserver6

En los siguientes pasos podremos introducir los datos correspondientes para añadir la máquina en dominio en el momento de su despliegue y un apartado realmente útil que es el disponer de la posibilidad de añadir scripts, ficheros o binarios que deseemos.

nanoserver7

Una vez finalizada la configuración, validamos que todos los datos introducidos son correctos y pulsamos Create.

En tan solo 2 minutos y medio ya tendremos nuestra imagen de Nano Server personalizada (dependiendo siempre de los roles, ficheros, scripts y binarios que le hayamos añadido).

En el caso que queramos realizar esta tarea de forma repetida o bien automatizarla, el mismo wizard nos muestra el comando a ejecutar desde Powershell (aunque siempre se deberá ejecutar con el módulo de Nano Server cargado en la shell).

New-NanoServerImage -MediaPath 'D:\' -Edition 'Datacenter' -DeploymentType Guest -TargetPath 'C:\Nanoserver\nserver.vhd' -MaxSize 5368709120 -ComputerName 'localadmin' -SetupCompleteCommand ('tzutil.exe /s "Romance Standard Time"') -LogPath 'C:\Users\Jordi\AppData\Local\Temp\NanoServerImageBuilder\Logs\2017-03-14 21-15'

Una vez tenemos el .vhd creado ya se puede proceder a alojarlo sobre un Hyper-V o subirlo a Azure y crear una VM, montarlo en un USB de arranque seleccionando en el menú inicial del wizard la opción  Create Bootable USB Media, o bien como veremos en la entrada siguiente, añadirlo a una Task Sequence de MDT para personalizar todavía más su despliegue desde un entorno de Windows PE.