Windows Subsystem for Linux (WSL) permite ejecutar un entorno GNU/Linux, incluida la mayoría de las herramientas, utilidades y aplicaciones de línea de comandos, directamente en Windows, sin modificaciones y sin la sobrecarga de una máquina virtual tradicional o una configuración de arranque dual.
Instalación inbox
Hasta ahora había usado el mismo método que se utiliza en la instalación manual de WSL para agregar las siguientes características opcionales a nuestra imagen WIM
de Windows 10/11 usando el comando dism.exe
de forma offline:
# Microsoft-Windows-Subsystem-Linux (WSL 1)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# VirtualMachinePlatform (WSL 2)
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
WSL Update
El método anterior requiere que se instale la versión más reciente del WSL 2 Linux Kernel para poder ejecutar WSL dentro de la imagen del sistema operativo Windows.
El enlace a wsl_update_x64.msi
para instalar el paquete Windows Subsystem for Linux Update
debería apuntar siempre a la versión más reciente pero, a dia de hoy, únicamente instala la versión 5.10.16 tal como se muestra en la siguiente captura:
El último kernel disponible a día de hoy a través de Windows Update es la versión 5.10.102.2 del 25 de marzo de 2022. Se puede descargar un fichero *.cab
desde el Microsoft Update Catalog para extraer el fichero wsl_update_x64.msi
e instalarlo de forma desatendida.
En GitHub está disponible el código fuente de la versión estable más reciente del kernel a día de hoy, la 5.15.133.1 del 7 de octubre de 2023.
Para compilar este código fuente usando las opciones de configuración optimizadas por Microsoft para que funcione correctamente en Windows/WSL 2 hay que hacer lo siguiente desde una distribución reciente de Ubuntu:
sudo install build-essential flex bison libssl-dev libelf-dev
make KCONFIG_CONFIG=Microsoft/config-wsl
WSLg Preview
Además, sería interesante instalar el componente WSLg o Windows Subsystem for Linux GUI que permite habilitar el soporte para ejecutar aplicaciones Linux gráficas (X11 y Wayland) integradas totalmente en la experiencia de escritorio de Windows.
El enlace a wsl_graphics_support_x64.msi
para instalar el paquete Windows Subsystem for Linux WSLg Preview
debería apuntar siempre a la versión más reciente pero, a dia de hoy, únicamente instala la versión 1.0.26 tal como se muestra en la siguiente captura:
En GitHub está disponible el código fuente de la versión estable más reciente de WSLg a día de hoy, la 1.0.51 del 24 de marzo de 2023.
Microsoft Store
El 22 de noviembre de 2022 se anunció que el Windows Subsystem for Linux estaría en la Microsoft Store para facilitar su actualización sin tener que esperar a una actualización del sistema operativo Windows.
WSL 2
Esto hace que los comandos wsl.exe --install
y wsl.exe --update
instalen WSL desde la Microsoft Store si no se indica lo contrario mediante el parámetro --web-download
.
Este cambio ha causado muchas confusiones a la hora de “tener la versión más reciente de WSL” ya que puede haber problemas si se mezclan componentes instalados a nivel del sistema operativo con componentes instalados desde la Microsoft Store.
De hecho, al usar el comando --install
para instalar WSL desde la Microsoft Store:
- no se habilita el componente opcional
Windows Subsystem for Linux
- no se instalan los paquetes MSI
WSL kernel
yWSLg
al no ser ya necesarios (están incluídos en el WSL package) - se habilita el componente opcional
Virtual Machine Platform
- se habilita el parámetro
--version
para mostrar información sobre la instalación
Nota: El parámetro --version
no existe si se está ejecutando WSL instalado como componente del sistema operativo, por lo que es una manera sencilla de saber el tipo de instalación que tenemos.
Después de reiniciar el equipo para completar la instalación de WSL se pueden usar los parámetros --status
y --version
para comprobar el estado y versiones tal como se muestra a continuación:
También se puede comprobar que únicamente se ha instalado la característica opcional VirtualMachinePlatorm
:
WSL 1
En general interesa utilizar WSL 2 en lugar de WSL 1 ya que aumenta el rendimiento del sistema de archivos y agrega compatibilidad total con las llamadas al sistema gracias al uso de un kernel de Linux real.
Cuando es necesario seguir usando WSL 1 por compatibilidad se tiene que utilizar el parámetro --enable-wsl1
para habilitarlo.
Algunos de los motivos para usar WSL 1 en lugar de WSL 2 son:
- Guardar ficheros del proyecto en Windows en lugar de Linux
- Acceder al puerto serie o USB
- Requerimientos de memoria estrictos
- Direccionamiento IP en la misma red (bridge) que el host
Después de reiniciar el equipo para completar la instalación de WSL se pueden usar los parámetros --status
y --version
para comprobar el estado y versiones tal como se muestra a continuación:
Nota: Al habilitar WSL 1, también se instala el componente opcional Windows Subsystem for Linux
que no se instala al relizar una instalación por defecto desde la Microsoft Store.
Problemas
Mientras realizaba diferentes pruebas para escribir este artículo he encontrado algunos problemas que pueden dificultar la instalación desatendida durante el OSD para un entorno multiusuario como el nuestro, donde los usuarios no tienen permisos de Administrador.
UAC al instalar WSL
A día de hoy, aún teniendo permisos de Administrador, aparece un mensaje de UAC para el “Host Process for Windows Services” durante la instalación de WSL desde la Microsoft Store tal como muestro en el siguiente vídeo:
Nota: En el repositorio de WSL en GitHub hay abierta la issue 9032 sobre este problema.
Cada usuario necesita su kernel
La instalación inicial de WSL desde la Microsoft Store realizada por un usuario con permisos de Administrador no sirve para el resto de usuarios del ordenador.
Cada usuario necesita instalar los diferentes componentes de WSL, como el kernel, tal como se indica en los mensajes mostrados en la siguiente captura de pantalla:
Si un usuario sin permisos de Administrador ejecuta wsl.exe --update
, aparecerá un mensaje de UAC para introducir las credenciales de un usuario que sí los tenga. Si el usuario cancela esta elevación de permisos, la instalación fallará al 90% con el código de error 0x80240066
.
Si el usuario intenta instalar una distribución ejecutando wsl.exe --install -d Ubuntu
, ésta parece que se instala correctamente pero falla con el código de error 0x800701bc
. Esto significa que WSL 2 requiere la actualización del componente kernel que no se ha podido realizar anteriormente por falta de permisos.
Instalar WSL requiere elevación
La ejecución del comando wsl.exe --install
desde un usuario sin permisos de Administrador en un ordenador sin WSL (es decir, sin las características opcionales ni el kernel instaladas previamente) hace aparecer un mensaje de UAC para elevar los permisos.
Diferentes ubicaciones del kernel
El kernel instalado usando el MSI
o las actualizaciones directas desde Windows Update se encuentra en C:\Windows\System32\lxss\tools\kernel
.
En cambio, si se ha instalado a través de la Microsoft Store o la descarga web desde GitHub, se encuentra en C:\Program Files\WSL\tools\kernel
.
Nota: Se puede utilizar el fichero .wslconfig
para indicar cuál de ellos se quiere utilizar.
Soluciones
Evitar instalar desde la Microsoft Store
Para evitar la instalación de componentes desde la Microsoft Store es necesario:
- Instalar las características opcionales usando
dism.exe
- Instalar el kernel de WSL2 utilizando el fichero
MSI
(descargado desde el catálogo de WU) - Instalar WSLg utilizando el fichero
MSI
- Activar la opción
Receive updates for other Microsoft products
Con esta instalación, un usuario sin permisos de Administrador puede instalar una distribución usando el comando wsl.exe --install -d <Distro>
y que funcionen las aplicaciones gráficas.
Y, además, puede actualizar WSL desde la Microsof Store, usando el comando wsl.exe --update --web-download
(aunque la ayuda indique lo contrario tal como he explicado en este hilo de X):
Usar MakeMeAdmin
Otra opción, para evitar trabajar siempre con permisos de Administrador, es usar MakeMeAdmin, una aplicación de código abierto que permite elevar temporalmente los permisos de una cuenta de usuario estándard al nivel del Administrador.
La instalación de cualquier componente de WSL que requiera elevación, se haría mediante la ayuda de MakeMeAdmin para tener los permisos necesarios.
Referencias
- Windows Subsystem for Linux Documentation
- Troubleshooting Windows Subsystem for Linux
- Craig Loewen, @craigaloewen, Product Manager at Microsoft