Windows-subsysteem voor Linux installeren en configureren
Het Windows-subsysteem voor Linux installeren en configureren
Microsoft heeft het Windows Subsystem for Linux (WSL) na een jaar uit de bètafase gehaald. Bij de Fall Creators Update is het een reguliere component geworden. Linuxprogramma's draaien rechtstreeks onder Windows, wat vooral interessant zal zijn voor ontwikkelaars en administrators die met beide systemen werken.
Het ongeloof was groot toen Microsoft meer dan een jaar geleden aankondigde dat Windows een softwarelaag zou gaan krijgen die Linux-code zonder enige conversie uit zou kunnen voeren. De gebruiker ziet een Linux-shell en kan daarmee op dezelfde manier omgaan als bij een echt Linux-systeem. Je kunt dan bijvoorbeeld op de gebruikelijke manieren pakketten installeren.
Naast de softwarelaag, die Microsoft een subsysteem noemt, heeft Windows een userland-omgeving nodig. Dat is in Linux jargon voor de programma's en bibliotheken waaruit een distributie normaal gesproken bestaat buiten de kernel. Microsoft heeft vier van dergelijke omgevingen aangekondigd: Ubuntu, dat er van meet af aan bij zat, Suse Linux Enterprise Server (SLES), OpenSuse en Fedora – die laatste ontbrak op het moment van schrijven nog.
Als je een Unix-commandline voor Windows zoekt, is het WSL een resourcevriendelijk alternatief voor virtualisatie
en minder omslachtig als bijvoorbeeld Cygwin – voor SSH-verbindingen met andere servers of de Raspberry Pi of voor Unix-liefhebbers. Maar die moeten het onder Windows wel zonder grep, sed en awk doen. Het is natuurlijk in het belang van Microsoft dat Windows het hoofdsysteem is dat daarnaast ook met Linux overweg kan.
Als je voor een ontwikkelproject echter een continu draaiende webserver wilt installeren, moeten we je teleurstellen: zodra je het consolevenster sluit, sterven alle daarin gestarte processen een zachte dood. Dat is geen fout, maar echt de bedoeling van de ontwikkelaars. Als je een service onder Linux wilt starten, schiet Microsofts WSL dus tekort.
Begin bij het begin
De component is inmiddels deel van de huidige versie van Windows 10 en heeft bij de Fall Creators Update niet meer het bètastadium als toevoeging. In de tussentijd heeft WSL ook bij Windows Server zijn intrede gedaan, zodat alles wat we hier zeggen ook voor Windows Server 1709 geldt.
Om te kunnen experimenteren met de Fall Creators Update, mag je alle oudere handleidingen weggooien. Die gelden voor alle previewversies en zijn inmiddels achterhaald. Je hoeft Windows bijvoorbeeld niet meer eerst in de 'Modus voor ontwikkelaars' te zetten. Wel moet je nog je toevlucht nemen tot het oude Configuratiescherm, dat bij Windows eigenlijk op de nominatie staat om te verdwijnen. Start vanuit de zoekbalk control.exe en ga bij 'Programma's' naar 'Windows-onderdelen in- of uitschakelen'. Daar staat bijna onderaan 'Windows-subsysteem voor Linux', waarmee de kernel uitgebreid wordt met drivers. Een herstart is daarna dan ook noodzakelijk.
Ben je wat meer thuis op de commandline of probeer je een previewversie van Server uit, dan kun je Windows hetzelfde laten doen met PowerShell:
Enable-WindowsOptionalFeature -Online
-FeatureName Microsoft-Windows-Subsystem-Linux
Als je Windows 10 hebt, staan Ubuntu, Suse Linux Enterprise en OpenSuse in de Store en kun je die zonder aan te melden met één klik installeren – al leidt dat wel tot een download van ongeveer 200 MB groot. Op de Core-versie van Windows Server zonder grafische interface kun je de omgeving wederom downloaden en activeren met de commandline. Die wellicht wat puristische manier verraadt veel over de achtergronden.
Met het PowerShell-commando
Invoke-WebRequest
-Uri https://aka.ms/wsl-ubuntu-1604 -OutFile ubuntu1604.zip -UseBasicParsing
download je bijvoorbeeld de userlandbestanden van Ubuntu. In de serverdocumentatie (zie de link onderaan dit artikel) staan andere links. De optie -UseBasicParsing is alleen bij een Server Core-installatie nodig. Het commando
Expand-Archive ubuntu1604.zip ubuntu1604 pakt het gedownloade bestand uit in de map ubuntu1604. In die map staat dan het bestand ubuntu.exe. De daadwerkelijke naam verschilt van distributie tot distributie.
Dat exe-bestand uit het archief speelt een belangrijke rol: het dient voor het installeren, verwijderen, terugzetten en starten van de omgeving. Bij de eerste aanroep pakt het exe-bestand het in het zip-bestand zittende installatie-archief (install.tar.gz) uit en maakt daar het root-bestandssysteem voor de userlandomgeving mee. Dat komt in een submap 'rootfs' relatief ten opzichte van het pad waarmee het is aangeroepen. Het exe-bestand richt de Linux-omgeving niet alleen in, maar voert het meteen ook uit. Bij de eerste start vragen de omgevingen naar een gebruikersnaam en een wachtwoord, wat ook voor root kan gelden.
Bij een installatie uit de Store gebeurt dat achter de schermen en op andere plekken. De bestanden voor een Linux-omgeving, dus onder meer het exe-bestand en het tar.gz-archief, belanden in een map in c:\Program Files\WindowsApps. Windows maakt dan ook een bijpassend startmenu-item voor Ubuntu, Suse en andere. Het gebruikersspecifieke deel, het eigenlijke root-bestandssysteem van de omgeving, oftewel rootfs, hebben de ontwikkelaars in het gebruikersprofiel ondergebracht. Voor gebruiker Hans is dat bijvoorbeeld C:\Users\hans\AppData\ Local\Packages\CanonicalGroupLimited. UbuntuonWindows_79rhkp1fndgsc\LocalState. Windows maakt per gebruiker dus een kopie van het root-bestandssysteem aan.
Als het niet loopt
Het handmatig installeren met PowerShell lukte bij de previewversies niet zodanig dat meerdere gebruikers Linuxomgevingen konden starten. Een oorzaak daarvan was niet te achterhalen. De in HKEY_CURRENT_USER\Software\ Microsoft\Windows\CurrentVersion\Lxss voor elke omgeving aangemaakte items waren er gewoon, net als bij een app-installatie via de Store. Een afwijkend pad is al met al niet erg handig omdat de exebestanden dan niet in het zoekpad en in het Startmenu terechtkomen.
Als een Linux-omgeving niet meer functioneert, kun je hem door het intypen van zijn naam met de extra optie clean terugzetten, bijvoorbeeld ubuntu clean voor Ubuntu. Let op: daarbij gaan bestanden en configuratiegegevens in het root-bestandssysteem verloren. Het terugzetten geldt altijd alleen voor de huidige gebruiker.
Microsoft waarschuwt dat je met de standaardmiddelen van Windows uit de in het bestandssysteem van Windows zichtbare rootfs-map moet blijven. De Unix-eigen bestandsattributen zijn niet direct gekoppeld aan de bestanden en gaan bij dergelijke operaties kapot. Bij toegang vanuit een Linux-omgeving geldt die waarschuwing natuurlijk niet. Om bestanden tussen Windows en Linux uit te wisselen, hebben de ontwikkelaars alle Windows-schijven onder /mnt gemount, bijvoorbeeld c: als /mnt/c.
Als je makkelijk bij de bestanden in het Windows-gebruikersprofiel wilt kunnen, maak je onder Linux met -ln -s / mnt/c/Users/hans ~win een link aan, zodat je met cd ~win naar het Windows-profiel kunt gaan. Hoe je het automatisch aangemaakte Linux-account noemt, kun je geheel zelf bedenken – er is geen inhoudelijke samenhang tussen de gebruikersdatabase van Windows en die van de Linux-omgeving. Bestanden die vanuit Linux worden aangemaakt horen altijd bij de onder Windows aangemelde gebruiker, zelfs als de gebruiker root die in de Linux-omgeving aanmaakt.
Hoe het werkt
De technische achtergrond van de integratie van Linux in Windows wordt door Microsoft zelf gegeven [1]. De ontwikkelaars hebben daar een dunne softwarelaag in Windows voor aangemaakt die Linux-aanroepen omzet naar Windowsfuncties of anders emuleert. Onder de door Windows uitgevoerde Linux-programma's draait dus geen Linux-kernel en er wordt geen parallel systeem geboot: bij de Linux-programma's gaat het om originele binaire ELF-bestanden met 64bit code.
Om ervoor te zorgen dat Microsoft onveranderde binaire Linux-bestanden kan uitvoeren, volstond het niet om Windows nog een subsysteem te geven. Daar zijn er bij Windows sinds eeuwigheden al een paar van, bijvoorbeeld voor 16-bit programma's, OS/2- en Posix-programma's – die voeren echter alleen binaire PER-bestanden uit. In plaats daarvan hebben de Windows-ontwerpers een ge-