Windows Subsysteem voor Linux (WSL)

Doel

Linux beschikbaar stellen onder Windows met WSL2 om vanuit Windows rechtstreeks te kunnen aanroepen.

Aanleiding/overwegingen

  • Ik werk nog tamelijk veel met batch files, maar soms is het makkelijker om zaken met een bash script op te lossen, dan om daar voor DOS een gelijkwaardig alternatief voor vinden.
  • Scripts waarmee je makkelijk tekst kunt wijzigen, filteren of selecteren en die gebruik maken van sed, grep, awk, zijn vooral in Linux al standaard aanwezig en het gebruik vaak bekend.
  • Het is niet handig om telkens te moeten schakelen en een andere omgeving op te starten.
  • Binnen Linux mis je soms een Windows programma, maar andersom heb je dat ook.
  • Het blijkt dat met Windows subsysteem voor Linux (WSL) de kracht van Linux beschikbaar kan komen binnen Windows.
  • Er zijn altijd meerdere wegen naar Rome te bedenken, maar deze spreekt mij wel aan.
  • Ik kies voor Ubuntu 22.04 LTS, omdat ik deze versie ook geïnstalleerd heb als dual boot op mijn PC en in Virtual Machines op de Synology NAS (voor domotica) en in VirtualBox op mijn notebook.

Voorbereiding

  • WSL 2 vereist Windows 10 versie 1903 of hoger met build 18362 of hoger voor x64-systemen. Versie 2004 of hoger met build 19041 of hoger voor ARM64-systemen.
  • Ik ga ervan uit dat WSL nog niet is geïnstalleerd.

Uitvoering

  • Installatie van Windows subsystem voor Linux.
    Ga hiervoor eerst naar ‘optionele onderdelen’.

  • Kies: ‘Meer Windows functies’.

  • Selecteer: Platform voor virtuele machine én Windows-subsysteem voor Linux.

  • Herstart de PC als de wijzigingen zijn voltooid.

  • Start het gedownloade msi bestand. Volg de stappen en eindig met Finish.

  • Ga naar de Microsoft Store en zoek op ‘Ubuntu’, selecteer de gewenste versie (hier Ubuntu 22.04 LTS) en kies: ‘Installeren’.

  • Kies: ‘Openen’.

  • De distributie wordt uitgepakt en installatie begint.

  • Maak taal keuze (gebruik pijltjes toetsen) gevolgd door Enter.
  • Geef naam, gebruikersnaam en wachtwoord op. Gebruik Tab toets om naar het volgende veld te gaan.

  • Wijzig desgewent de configuratie instellingen of druk Enter om naar het volgende scherm te gaan.

  • De instellingen worden doorgevoerd. Druk, als dit klaar is, op Enter om het Linux onderdeel (dus niet de PC) te herstarten.

  • Zie de welkom melding.
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.10.16.3-microsoft-standard-WSL2 x86_64)
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
/etc/update-motd.d/50-landscape-sysinfo: 17: cannot create /var/lib/landscape/landscape-sysinfo.cache: Permission denied

64 updates can be applied immediately.
22 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

This message is shown once a day. To disable it please create the
/home/janpep/.hushlogin door het bestand aan te maken.
janpep@STACKER-W:~$
  • Merk op dat er updates beschikbaar zijn.
    Voer de updates in drie etappes uit met achtereenvolgens:
    sudo apt update
    sudo apt upgrade
    sudo apt autoremove
  • Open een DOS venster als administrator en check de huidige WSL versie.
C:\Temp>wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2

C:\Temp>
  • Doe de WSL update.
    Zoals aangegeven gevolgd door: wsl --shutdown
C:\Temp>WSL --update
Checking for updates...
Downloading updates...
Installing updates...
This change will take effect on the next full restart of WSL. To force a restart, please run 'wsl --shutdown'.
Kernel version: 5.10.102.1

C:\Temp>WSL --shutdown

C:\Temp>
  • Met het shutdown commando zie je dat het Ubuntu venster sluit. Dit kan heel even duren.
  • Start Ubuntu weer via het Start menu
    Zie hoe beschikbare volumes gemount zijn met: ls /mnt
janpep@STACKER-W:~$ ls /mnt
c  f  g  wsl  wslg
janpep@STACKER-W:~$
  • Ik wil een wijziging aanbrengen in de volumes, die gevonden werden en die automatisch zijn gekoppeld. F: en G: schijf zijn mijn versleutelde back-up volumes. Deze wil ik niet nodeloos beschikbaar stellen. Daarentegen wil ik wel bij mijn documenten op de NAS kunnen, die ik als Netwerkschijf N: beschikbaar heb.
  • wls.conf
    De eerste stap hiervoor is het maken van het configuratie bestand /etc/wsl.conf. Ik doe dit met de vi editor.
    sudo vi /etc/wsl.conf
    (automount enabled, komt op false, terwijl mountFsTab zorgt, dat we /etc/fstab besstand kunnen gebruiken om de C: en N: schijven telkens automatisch te mounten.)
[boot]
systemd=true

[automount]
enabled = false
mountFsTab = true
  • We maken nu, zoals voor C: al automatisch gedaan was, de directory om de N schijf te mounten.
janpep@STACKER-W:~$sudo mkdir /mnt/n
  • fstab
    We voegen de volgende twee regels toe in /etc/fstab om C: en N: schijf te mounten.
    sudo vi /etc/fstab
C: /mnt/c drvfs defaults 0 0
N: /mnt/n drvfs defaults 0 0
  • Effectueer deze instellingen daarna met: sudo mount -a
  • Linken script directory
    Op mijn N: schrijf heb ik een directory gemaakt waar de scripts komen. Zo die manier kan ik er vanaf diverse plekken altijd makkelijk bij.
    In windows: N:\Mijn Documenten\UbuntuScripts
    In Ubuntu nu: /mnt/n/Mijn Documenten/UbuntuScripts
    Ik wil het graag in linux onder mijn home directory beschikbaar hebben zonder telkens dat lange pad (met spatie erin) te hoeven kiezen.
    Daarom maak ik onder de home directory een link naar de map ‘UbuntuScripts’.
janpep@STACKER-W:~$ pwd
/home/janpep
janpep@STACKER-W:~$ ln -s /mnt/n/Mijn\ Documenten/UbuntuScripts/ UbuntuScripts
janpep@STACKER-W:~$ ls
UbuntuScripts
janpep@STACKER-W:~$
  • Om dit te testen en te laten zien, maak ik een leeg test.txt bestandje aan en check daarna dat die daadwerkelijk is gemaakt.
janpep@STACKER-W:~$ cd UbuntuScripts
janpep@STACKER-W:~/UbuntuScripts$ touch test.txt
janpep@STACKER-W:~/UbuntuScripts$ ls
test.txt
janpep@STACKER-W:~/UbuntuScripts$
  • En ook vanuit Windows verkenner, zie ik het bestandje staan.

Voorbeeld van gebruik

  • Ik plaats mijn voorbeeld sjabloon script ScriptTemplate.sh ook in deze map en voer het uit.
janpep@STACKER-W:~/UbuntuScripts$ ./ScriptTemplate.sh -v
2022-09-30 16:36 - Starting ScriptTemplate.sh
2022-09-30 16:36 - This script only sleeps for 30 seconds
2022-09-30 16:37 - Ending ScriptTemplate.sh
janpep@STACKER-W:~/UbuntuScripts$
  • Nu wil ik dit script ook vanuit Windows kunnen uitvoeren via een batch file. Ik maak C:\Temp\doehet.bat met de volgende inhoud.
@echo off
bash /home/janpep/UbuntuScripts/ScriptTemplate.sh -v
pause
  • En voer tenslotte de batchfile uit, die het script aanroept en de uitvoer daarvan in het DOS venster laat zien.
C:\Temp>doehet
2022-09-30 16:43 - Starting ScriptTemplate.sh
2022-09-30 16:43 - This script only sleeps for 30 seconds
2022-09-30 16:44 - Ending ScriptTemplate.sh
Press any key to continue . . .

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze site gebruikt Akismet om spam te verminderen. Meer informatie over hoe uw reactiegegevens worden verwerkt.