C’t Magazine

Windows-subsysteem voor Linux installere­n en configurer­en

Het Windows-subsysteem voor Linux installere­n en configurer­en

- Jan Mahn en Peter Siering

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. Linuxprogr­amma's draaien rechtstree­ks onder Windows, wat vooral interessan­t zal zijn voor ontwikkela­ars en administra­tors die met beide systemen werken.

Het ongeloof was groot toen Microsoft meer dan een jaar geleden aankondigd­e dat Windows een softwarela­ag 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 bijvoorbee­ld op de gebruikeli­jke manieren pakketten installere­n.

Naast de softwarela­ag, die Microsoft een subsysteem noemt, heeft Windows een userland-omgeving nodig. Dat is in Linux jargon voor de programma's en bibliothek­en waaruit een distributi­e normaal gesproken bestaat buiten de kernel. Microsoft heeft vier van dergelijke omgevingen aangekondi­gd: 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-commandlin­e voor Windows zoekt, is het WSL een resourcevr­iendelijk alternatie­f voor virtualisa­tie

en minder omslachtig als bijvoorbee­ld Cygwin – voor SSH-verbinding­en met andere servers of de Raspberry Pi of voor Unix-liefhebber­s. Maar die moeten het onder Windows wel zonder grep, sed en awk doen. Het is natuurlijk in het belang van Microsoft dat Windows het hoofdsyste­em is dat daarnaast ook met Linux overweg kan.

Als je voor een ontwikkelp­roject echter een continu draaiende webserver wilt installere­n, moeten we je teleurstel­len: zodra je het consoleven­ster sluit, sterven alle daarin gestarte processen een zachte dood. Dat is geen fout, maar echt de bedoeling van de ontwikkela­ars. 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ètastadiu­m 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 experiment­eren met de Fall Creators Update, mag je alle oudere handleidin­gen weggooien. Die gelden voor alle previewver­sies en zijn inmiddels achterhaal­d. Je hoeft Windows bijvoorbee­ld niet meer eerst in de 'Modus voor ontwikkela­ars' te zetten. Wel moet je nog je toevlucht nemen tot het oude Configurat­iescherm, 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 uitschakel­en'. Daar staat bijna onderaan 'Windows-subsysteem voor Linux', waarmee de kernel uitgebreid wordt met drivers. Een herstart is daarna dan ook noodzakeli­jk.

Ben je wat meer thuis op de commandlin­e of probeer je een previewver­sie van Server uit, dan kun je Windows hetzelfde laten doen met PowerShell:

Enable-WindowsOpt­ionalFeatu­re -Online

-FeatureNam­e 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 installere­n – 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 commandlin­e. Die wellicht wat puristisch­e manier verraadt veel over de achtergron­den.

Met het PowerShell-commando

Invoke-WebRequest

-Uri https://aka.ms/wsl-ubuntu-1604 -OutFile ubuntu1604.zip -UseBasicPa­rsing

download je bijvoorbee­ld de userlandbe­standen van Ubuntu. In de serverdocu­mentatie (zie de link onderaan dit artikel) staan andere links. De optie -UseBasicPa­rsing is alleen bij een Server Core-installati­e nodig. Het commando

Expand-Archive ubuntu1604.zip ubuntu1604 pakt het gedownload­e bestand uit in de map ubuntu1604. In die map staat dan het bestand ubuntu.exe. De daadwerkel­ijke naam verschilt van distributi­e tot distributi­e.

Dat exe-bestand uit het archief speelt een belangrijk­e rol: het dient voor het installere­n, verwijdere­n, terugzette­n en starten van de omgeving. Bij de eerste aanroep pakt het exe-bestand het in het zip-bestand zittende installati­e-archief (install.tar.gz) uit en maakt daar het root-bestandssy­steem voor de userlandom­geving mee. Dat komt in een submap 'rootfs' relatief ten opzichte van het pad waarmee het is aangeroepe­n. 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 gebruikers­naam en een wachtwoord, wat ook voor root kan gelden.

Bij een installati­e 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\WindowsApp­s. Windows maakt dan ook een bijpassend startmenu-item voor Ubuntu, Suse en andere. Het gebruikers­specifieke deel, het eigenlijke root-bestandssy­steem van de omgeving, oftewel rootfs, hebben de ontwikkela­ars in het gebruikers­profiel ondergebra­cht. Voor gebruiker Hans is dat bijvoorbee­ld C:\Users\hans\AppData\ Local\Packages\CanonicalG­roupLimite­d. UbuntuonWi­ndows_79rhkp1fnd­gsc\LocalState. Windows maakt per gebruiker dus een kopie van het root-bestandssy­steem aan.

Als het niet loopt

Het handmatig installere­n met PowerShell lukte bij de previewver­sies niet zodanig dat meerdere gebruikers Linuxomgev­ingen konden starten. Een oorzaak daarvan was niet te achterhale­n. De in HKEY_CURRENT_USER\Software\ Microsoft\Windows\CurrentVer­sion\Lxss voor elke omgeving aangemaakt­e items waren er gewoon, net als bij een app-installati­e via de Store. Een afwijkend pad is al met al niet erg handig omdat de exebestand­en dan niet in het zoekpad en in het Startmenu terechtkom­en.

Als een Linux-omgeving niet meer functionee­rt, kun je hem door het intypen van zijn naam met de extra optie clean terugzette­n, bijvoorbee­ld ubuntu clean voor Ubuntu. Let op: daarbij gaan bestanden en configurat­iegegevens in het root-bestandssy­steem verloren. Het terugzette­n geldt altijd alleen voor de huidige gebruiker.

Microsoft waarschuwt dat je met de standaardm­iddelen van Windows uit de in het bestandssy­steem van Windows zichtbare rootfs-map moet blijven. De Unix-eigen bestandsat­tributen zijn niet direct gekoppeld aan de bestanden en gaan bij dergelijke operaties kapot. Bij toegang vanuit een Linux-omgeving geldt die waarschuwi­ng natuurlijk niet. Om bestanden tussen Windows en Linux uit te wisselen, hebben de ontwikkela­ars alle Windows-schijven onder /mnt gemount, bijvoorbee­ld c: als /mnt/c.

Als je makkelijk bij de bestanden in het Windows-gebruikers­profiel 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 automatisc­h aangemaakt­e Linux-account noemt, kun je geheel zelf bedenken – er is geen inhoudelij­ke samenhang tussen de gebruikers­database 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 achtergron­d van de integratie van Linux in Windows wordt door Microsoft zelf gegeven [1]. De ontwikkela­ars hebben daar een dunne softwarela­ag in Windows voor aangemaakt die Linux-aanroepen omzet naar Windowsfun­cties of anders emuleert. Onder de door Windows uitgevoerd­e 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 onverander­de binaire Linux-bestanden kan uitvoeren, volstond het niet om Windows nog een subsysteem te geven. Daar zijn er bij Windows sinds eeuwighede­n al een paar van, bijvoorbee­ld 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-

 ??  ??
 ??  ?? Het Windowssub­systeem voor Linux, wat eigenlijke­en Linuxsubsy­steem voor Windowsis, kun je in het Configurat­ieschermac­tiveren.
Het Windowssub­systeem voor Linux, wat eigenlijke­en Linuxsubsy­steem voor Windowsis, kun je in het Configurat­ieschermac­tiveren.
 ??  ?? Linux in de Windows Store: de userland-omgevingen zijn beschikbaa­r als app.
Linux in de Windows Store: de userland-omgevingen zijn beschikbaa­r als app.

Newspapers in Dutch

Newspapers from Netherlands