Windows Server Logo

Cómo crear una imagen de Windows Nano Server para pruebas

Las últimas dos semanas han sido muy movidas para todos aquellos que seáis seguidores de las tecnologías de Microsoft. Tras //Build 2015, el evento enfocado a desarrolladores, y Microsoft Ingnite, el evento enfocado a profesionales de infraestructura, nos hemos quedado con una gran colección de novedades que vamos a tardar varios meses en digerir completamente.

Una de ella fue Nano Server: A Cloud Optimized Windows Server for Developers. No es un nuevo sistema operativo, es una versión de Windows Server optimizada para la siguiente generación de aplicaciones. No dispone de interfaz gráfica o de capacides de gestión local, tampoco de los servicios de terminal. Ocupa menos recursos en disco que la versión completa o Core de Windows Server, su proceso de despliegue se agiliza y su gestión se simplifica debido a una reducción al mínimo de los parches y reinicios necesarios.

A diferencia del gran número de roles que Windows Server puede ejecutar a día de hoy, Nano Server está enfocado a tres escenarios concretos únicamente en esta primera versión:

  • Como host de Hyper-V para alojar máquinas virtuales dentro de un clúster o no
  • Como servidor de ficheros con el rol de Scale-Out File Server dentro de un clúster o no
  • Como sistema operativo desplegado en contenedores o máquinas virtuales para la nueva generación de aplicaciones desarrolladas directamente con la nube en la mente

Tras la keynote de Ignite se puso para descargar Windows Server 2016 Technical Preview 2 que incluía ya Nano Server. A la hora de desplegarlo el procedimiento cambia de forma considerable respecto a lo que estábamos acostumbrados hasta la fecha. Vamos a ver cómo preparar una imagen de Nano Server paso por paso.

Obteniendo la imagen de Windows Nano Server

Lo primero será necesario descargar la imagen de Windows Server 2016 Technical Preview 2 ya que en la primera TP aún no se encontraba disponible esta nueva característica. Para ello, podemos ir al centro de descargas de TechNet y la encontraremos junto con el resto de software disponible de forma gratuita para evaluación. La imagen ocupa aproximadamente 4GB por lo que esperaremos a que se descargue y la montaremos en el sistema operativo haciendo doble click sobre ella. Tras ello, nos encontraremos con algo similar a lo siguiente.

Imagen de Windows Server 2016 Technical Preview 2
Imagen de Windows Server 2016 Technical Preview 2

Una de las carpetas presentes en la imagen es NanoServer. Por ahora, la distribución de esta nueva versión se realizará dentro de la imagen de Windows Server. En dicha carpeta podremos encontrar la imagen en formato Windows Imaging Format (.wim) y un directorio de Packages con los roles y drivers que soporta este nuevo sistema operativo. Este es uno de los primero cambios notables, necesitaremos preparar nuestras imágenes personalizadas antes de poder desplegar el sistema operativo; es decir, no vendrán ya con todos los roles pre-cargados que nosotros luego podremos activar o desactivar.

Dichos paquetes contienen lo siguiente:

Roles

  • Microsoft-NanoServer-Compute-Package.cab: soporte desplegar un nodo de Hyper-V
  • Microsoft-NanoServer-FailoverCluster-Package.cab : soporte para construir una solución basada en un cluster
  • Microsoft-NanoServer-Storage-Package.cab : solución para deplegar un servidor de ficheros Scale-Out

Drivers

  • Microsoft-NanoServer-Guest-Package.cab : paquete con el soporte necesario para utilizar la imagen dentro de una máquina virtual.
  • Microsoft-NanoServer-OEM-Drivers-Package.cab: paquete con una colección de drivers para los controladores de red y almacenamiento para desplegar nuestra imagen sobre hardware físico.

Utilidades

  • Microsoft-OneCore-ReverseForwarders-Package.cab: paquete que facilita a que aplicaciones existentes funcionan en Nano Server sin recompilar evitando que fallen al no existir una parte de las APIs que incluye Windows Server.

Extrayendo la imagen .wim a un fichero .vhd

Para aprovisionar los roles y drivers necesarios emplearemos la utilidad para Deployment Image Servicing and Management (DISM). Desde Windows 8, esta es la herramienta soportada para montar y preparar imágenes de Windows antes de ser desplegadas o incluso para modificar el propio sistema operativo que se está ejecutando. DISM también permite instalar, desisntalar, configurar y actualizar características de Windows, paquetes, drivers o configuraciones regionales.

En primer lugar, vamos a convertir nuestra imagen .wim a un disco duro virtual. Para ello, utilizaremos un script de PowerShell disponible en el centro de scripts de TechNet que simplificará el procedimiento. Una vez descargado, ejecutaremos lo siguiente:

Convert-WindowsImage.ps1 -Sourcepath "ruta al fichero .wim" -VHD "ruta del fichero .VHD" –VHDformat VHD -Edition 1

Importante poner la ruta al fichero .wim que está en la carpeta NanoServer. Sin darme cuenta lo estaba apuntando al fichero .iso y produce un error poco claro de que el parámetro es incorrecto sin más explicaciones. Si completáis las rutas correctamente os encontraréis con algo parecido a lo siguiente.

Convirtiendo la imagen .wim a .vhd
Convirtiendo la imagen .wim a .vhd

Configurando nuestra imagen con DISM

A la hora de aprovisiona la imagen, DISM no puede ser utilizado con imágenes de Windows que son más recientes que la versión instalada en el equipo de Windows Assessment and Deployment Kit (Windows ADK). Por ello, copiaremos los siguientes ficheros de la carpeta Sources de nuestra ISO de Windows Server 2016 TP 2 a una carpeta local y a partir de ahí trabajaremos. En total serán 29 ficheros los que deberíamos tener en nuestra carpeta dism.

# Crear el directorio
New-Item -Type Directory $env:HOMEPATH\Desktop\dism
# Copiar los ficheros necesarios
Copy-Item -Path D:\sources\api*downlevel*.dll -Destination $env:HOMEPATH\Desktop\dism
Copy-Item -Path D:\sources\*dism*.dll -Destination $env:HOMEPATH\Desktop\dism
Copy-Item -Path D:\sources\*provider*.dll -Destination $env:HOMEPATH\Desktop\dism

Tras ello, vamos a configurarl los paquetes que queramos que tenga nuestra imagen. Como ejemplo, vamos a crear una que los incluya todos pero podremos elegir eliminando aquellos que no nos interesen para nuestras pruebas.

Necesitamos dirigirnos a la carpeta dism que hemos creado en el paso anterior y continuar ejecutando lo siguiente.

# Acceder a la carpeta de DISM
Set-Location $env:HOMEPATH\Desktop\dism
# Crear el directorio donde montar la imagen
New-Item -Type Directory mountdir
# Montar el .vhd en el directorio creado
Dism.exe /Mount-Image /ImageFile:"$env:HOMEPATH\Desktop\NanoServerTP2.vhd" /Index:1 /MountDir:.\mountdir
 
# Añadir el rol de Hyper-V
Dism.exe /Add-Package /PackagePath:"D:\NanoServer\Packages\Microsoft-NanoServer-Compute-Package.cab" /Image:.\mountdir
Dism.exe /Add-Package /PackagePath:"D:\NanoServer\Packages\en-us\Microsoft-NanoServer-Compute-Package.cab" /Image:.\mountdir
 
# Añadir el soporte al servidor de ficheros
Dism.exe /Add-Package /PackagePath:"D:\NanoServer\Packages\Microsoft-NanoServer-Storage-Package.cab" /Image:.\mountdir
Dism.exe /Add-Package /PackagePath:"D:\NanoServer\Packages\en-us\Microsoft-NanoServer-Storage-Package.cab" /Image:.\mountdir
 
# Añadir el soporte para crear clusters
Dism.exe /Add-Package /PackagePath:"D:\NanoServer\Packages\Microsoft-NanoServer-FailoverCluster-Package.cab" /Image:.\mountdir
Dism.exe /Add-Package /PackagePath:"D:\NanoServer\Packages\en-us\Microsoft-NanoServer-FailoverCluster-Package.cab" /Image:.\mountdir
 
# Añadir el paquete de drivers para ejecutarlo en una máquina virtual
Dism.exe /Add-Package /PackagePath:"D:\NanoServer\Packages\Microsoft-NanoServer-Guest-Package.cab" /Image:.\mountdir
Dism.exe /Add-Package /PackagePath:"D:\NanoServer\Packages\en-us\Microsoft-NanoServer-Guest-Package.cab" /Image:.\mountdir
 
# Desmontar la imagen
Dism.exe /Unmount-Image /MountDir:.\mountdir /Commit

Si lo queréis hacer más sencillo es posible ejecutarlo de una sola vez

Dism.exe /Add-Package /PackagePath:"D:\NanoServer\Packages\Microsoft-NanoServer-Compute-Package.cab" /PackagePath:"D:\NanoServer\Packages\en-us\Microsoft-NanoServer-Compute-Package.cab" /PackagePath:"D:\NanoServer\Packages\Microsoft-NanoServer-Storage-Package.cab" /PackagePath:"D:\NanoServer\Packages\en-us\Microsoft-NanoServer-Storage-Package.cab" /PackagePath:"D:\NanoServer\Packages\Microsoft-NanoServer-FailoverCluster-Package.cab" /PackagePath:"D:\NanoServer\Packages\en-us\Microsoft-NanoServer-FailoverCluster-Package.cab" /PackagePath:"D:\NanoServer\Packages\Microsoft-NanoServer-Guest-Package.cab" /PackagePath:"D:\NanoServer\Packages\en-us\Microsoft-NanoServer-Guest-Package.cab" /Image:.\mountdir

Terminando la configuración de la imagen

Debemos fijar una serie de parámetros todavía como el nombre del equipo o la contraseña de administrador para utilizar nuestra imagen. La recomendación para realizarlo es a través del fichero Unattend.xml tal y como indican en el artículo de TechNet.

<?xml version=”1.0″ encoding=”UTF-8″?>
<unattend xmlns=”urn:schemas-microsoft-com:unattend” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<settings pass=”offlineServicing”>
<component name=”Microsoft-Windows-Shell-Setup” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS”>
<ComputerName>NanoServer1503</ComputerName>
</component>
</settings>
<settings pass=”oobeSystem”>
<component name=”Microsoft-Windows-Shell-Setup” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS”>
<UserAccounts>
            <AdministratorPassword>
               <Value>Tuva</Value>
               <PlainText>true</PlainText>
            </AdministratorPassword>
         </UserAccounts>
<TimeZone>Pacific Standard Time</TimeZone>
</component>
</settings>
<settings pass=”specialize”>
<component name=”Microsoft-Windows-Shell-Setup” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS”>
<RegisteredOwner>My Team</RegisteredOwner>
         <RegisteredOrganization>My Corporation</RegisteredOrganization>
</component>
</settings>
</unattend>

Las regiones marcadas en negrita son las que podemos modificar para personalizar el nombre de nuestro servidor, la contraseña de usuario, además de a qué organización y persona está registrada la imagen. Una vez que lo tengamos, es necesario que introduzcamos el fichero en nuestra disco y la configuremos para que lo emplee al arrancar.

# Montamos de nuevo la imagen
Dism.exe /Mount-Image /ImageFile:"$env:HOMEPATH\Desktop\NanoServerTP2.vhd" /Index:1 /MountDir:.\mountdir
# Aplicamos el fichero de configuración desatendida a la imagen
Dism.exe /Apply-Unattend:"$env:HOMEPATH\Desktop\dism\unattend.xml" /Image:.\mountdir 
 
# Copiamos el fichero en el directorio esperado dentro de Windows
New-Item -Type Directory .\mountdir\windows\panther 
Copy-Item -Path $env:HOMEPATH\Desktop\dism\unattend.xml -Destination $env:HOMEPATH\Desktop\dism\mountdir\windows\panther
 
# Guardamos los cambios
Dism.exe /Unmount-Image /MountDir:.\mountdir /Commit

La primera vez que arranquemos la imagen se aplicarán los cambios definidos.

Configurando un comando para ser ejecutado en el primer arranque

Como he comentado, Windows Nano Server no dispone ni de login local ni de interfaz gráfica. Toda la gestión se realiza de forma remota a través de las diferentes herramientas disponibles como PowerShell Remoting o WMIC. Sin embargo, si queremos comprobar que el despliegue de nuestra imagen se ha realizado de forma correcta podemos añadir un script que se ejecute una vez finalizada la instalación.

Windows, en el primer inicio de sesión accede al directorio %WINDIR%\Setup\Scripts\ en la búsqueda del fichero SetupComplete.cmd. En el caso de que el fichero se encuentre presente ejecutará su contenido mientras que si no está continuará con el proceso. Un ejemplo de comando útil a incluir en el fichero es ipconfig que nos proporcionará la dirección a la que deberemos conectarnos para gestionarlo.

Para ello, será necesario crear un fichero de texto que contenga el comando ipconfig o los comandos extras que queramos ejecutar. Lo guardaremos como SetupComplete.cmd para añadirlo de nuevo a nuestro disco.

# Montamos de nuevo la imagen
Dism.exe /Mount-Image /ImageFile:"$env:HOMEPATH\Desktop\NanoServerTP2.vhd" /Index:1 /MountDir:.\mountdir
 
# Copiamos el fichero en el directorio esperado dentro de Windows
New-Item -Type Directory .\mountdir\Windows\Setup
New-Item -Type Directory .\mountdir\Windows\Setup\Scripts
Copy-Item -Path $env:HOMEPATH\Desktop\dism\SetupComplete.cmd -Destination $env:HOMEPATH\Desktop\dism\mountdir\Windows\Setup\Scripts
 
# Guardamos los cambios
Dism.exe /Unmount-Image /MountDir:.\mountdir /Commit

Tras ello, nuestra imagen estará lista para ser desplegada.

Desplegando Nano Server en Hyper-V sobre Windows 10 – 10074

Para verlo funcionar, vamos a crear una máquina virtual en Hyper-V utilizando el fichero .vhd como disco de la misma. Para ello abriremos Hyper-V Manager y seleccionaremos New -> Virtual Machine. Tras ello, se abrirá el asisten de creación de la misma. En mi caso, la configuración es la siguiente:

  • Name: Nano Server
  • Generation: 1
  • Startup Memory: 1024
  • Use Dynamic Memory: Checked
  • Connection: Wifi Virtual Switch
  • Virtual Hard Disk: Use an existing virtual hard disk (NanoServerTP2.vhd)

Tras finalizar el asistente y arrancar la máquina podrás ver el logotipo de Windows y en apenas uno segundos el resultado del comando como lo siguiente:

Máquina virtual con Nano Server
Máquina virtual con Nano Server

Ya tenemos nuestro Nano Server ejecutándose sobre Hyper-V en nuestro equipo local. Si queremos administrarlo e interactuar con él será necesario que trabajemos con las herramientas remotas de PowerShell. Para ello, en primer lugar añadiremos a Nano Server a la lista de host en los que se confía y luego iniciaremos una sesión remota.

# La IP será la que haya aparecido al arranque Nano Server.
Set-Item WSMan:\localhost\Client\TrustedHosts 192.168.1.39
# Debemos introducir el usuario "Administrator" y la contraseña definida en el fichero Unattend.xml
Enter-PSSession -ComputerName 192.168.1.39 -Credential (Get-Credential)

Tras ello, Nano Server estará esperando para recibir órdenes.

Sesión remota en Nano Server a través de PowerShell
Sesión remota en Nano Server a través de PowerShell

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.