Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze handleiding worden de stappen beschreven voor het maken en distribueren van een WSL-distributie. Dit is een .wsl-bestand.
WSL-distributies hebben twee delen:
- Een hoofdbestandssysteem (gedistribueerd als tar-bestand)
- Een manifestvermelding (die de distributiemetagegevens bevat)
Deze handleiding is alleen van toepassing op WSL-release 2.4.4 en hoger.
Notitie
Zie deze opslagplaats voor de eerdere instructies voor het maken van distributiepakketten op basis van appx.
Wat zijn tar-bestanden van het WSL-hoofdbestandssysteem?
WSL-distributies worden gedefinieerd door een tar-bestand met een .wsl bestandsextensie in Windows.
Een TAR-bestand (afkorting voor Tape Archive) is een type archiefbestand dat wordt gebruikt om meerdere bestanden samen op te slaan in één bestand voor eenvoudigere distributie of back-up. Het TAR-bestand bevat het hoofdbestandssysteem van een Linux-distributie (alle distributiebestanden), evenals de WSL-configuratiebestanden. WSL-configuratiebestanden vertellen het besturingssysteem WIndows hoe de distributie moet worden geïnstalleerd en gestart.
Zodra u een Linux-systeem hebt dat u in een WSL-distributie wilt maken, volgt u de onderstaande stappen om aan de slag te gaan.
WSL-configuratiebestanden maken
Er zijn twee configuratiebestanden die de distributie moet bevatten:
-
/etc/wsl-distribution.conf: een bestand dat is gemaakt door de distributieonderhouder die verantwoordelijk is voor het beheren van de wijze waarop de Linux-distributie moet worden geconfigureerd bij de eerste lancering met WSL. -
/etc/wsl.conf: een bestand met algemene systeeminstellingen die specifiek zijn voor de gebruiker en bepalen hoe de distributie wordt gestart. Meer informatie over WSL-configuratiebestanden..
Het WSL-distributieconfiguratiebestand toevoegen
Het distributieconfiguratiebestand, /etc/wsl-distribution.conf, definieert hoe de Linux-distributie moet worden geconfigureerd wanneer deze voor het eerst door de gebruiker wordt gestart. Dit bestand kan worden gebruikt om interactief een gebruikersaccount te maken, een gebruiksrechtovereenkomst weer te geven, enzovoort.
Hier volgt een voorbeeldbestand /etc/wsl-distribution.conf:
# /etc/wsl-distribution.conf
[oobe]
command = /etc/oobe.sh
defaultUid = 1000
defaultName = my-distro
[shortcut]
enabled = true
icon = /usr/lib/wsl/my-icon.ico
[windowsterminal]
enabled = true
ProfileTemplate = /usr/lib/wsl/terminal-profile.json
Configuratieopties voor WSL-distributiebestanden:
| Sleutelcode | Waarde | Verstek | Opmerkingen |
|---|---|---|---|
oobe.command |
tekenreeks | Geen | OOBE staat voor out-of-the-box-ervaring. Met deze opdracht wordt de eerste keer dat de gebruiker een interactieve shell opent in de distributie uitgevoerd. Als deze opdracht niet nul retourneert, wordt deze als mislukt beschouwd en kan de gebruiker geen shell openen. |
oobe.defaultUid |
geheel getal | Geen | De standaard-UID waarmee de distributie begint. Dit is handig wanneer het oobe.command script een nieuwe gebruiker maakt. |
oobe.defaultName |
tekenreeks | Geen | De standaardnaam waaronder de distributie is geregistreerd. Deze standaardnaam kan worden vervangen door de opdracht: wsl.exe --install <distro> --name <name> |
shortcut.icon |
tekenreeks | Het standaard WSL-pictogram | Het pictogram in de snelkoppeling in het startmenu voor de distributie. Moet in het .ico formaat zijn met een maximale grootte van 10MB |
shortcut.enabled |
booleaans | waar | Of er een snelkoppeling in het startmenu moet worden gemaakt wanneer de distributie is geïnstalleerd. |
windowsterminal.profileTemplate |
tekenreeks | Geen | De JSON-sjabloon voor het genereren van een Windows Terminal-profiel voor deze distributie. |
windowsterminal.enabled |
booleaans | waar | Of er een terminalprofiel moet worden gemaakt wanneer de distributie is geïnstalleerd. Als profileTemplate niet is ingesteld, wordt er een standaardprofiel gegenereerd. |
windowsterminal.profileTemplate |
tekenreeks | Pad naar een terminalsjabloonbestand | De JSON-sjabloon voor het genereren van een Windows Terminal-profiel voor deze distributie. |
U moet een out-of-boxervaring (OOBE) creëren voor de eerste keer dat de distributie wordt uitgevoerd. Hieronder ziet u een voorbeeld van een bash-script dat u kunt gebruiken. In dit script wordt ervan uitgegaan dat oobe.defaultUid is ingesteld op 1000:
#!/bin/bash
set -ue
DEFAULT_GROUPS='adm,cdrom,sudo,dip,plugdev'
DEFAULT_UID='1000'
echo 'Please create a default UNIX user account. The username does not need to match your Windows username.'
echo 'For more information visit: https://aka.ms/wslusers'
if getent passwd "$DEFAULT_UID" > /dev/null ; then
echo 'User account already exists, skipping creation'
exit 0
fi
while true; do
# Prompt from the username
read -p 'Enter new UNIX username: ' username
# Create the user
if /usr/sbin/adduser --uid "$DEFAULT_UID" --quiet --gecos '' "$username"; then
if /usr/sbin/usermod "$username" -aG "$DEFAULT_GROUPS"; then
break
else
/usr/sbin/deluser "$username"
fi
fi
done
Een Windows Terminal-profiel genereren
WSL genereert automatisch een Windows Terminal-profiel wanneer een distributie is geïnstalleerd. Distributieonderhouders kunnen het gegenereerde profiel aanpassen door windowsterminal.profileTemplate in het WSL-configuratiebestand in te stellen /etc/wsl-distribution.conf.
Het json-bestand volgt de json-indeling van het terminalprofiel. Hier volgt een voorbeeldprofiel:
{
"profiles": [
{
"antialiasingMode": "aliased",
"fontWeight": "bold",
"colorScheme": "Postmodern Tango Light"
}
],
"schemes": [
{
"name": "Postmodern Tango Light",
"black": "#0C0C0C",
"red": "#C50F1F",
"green": "#13A10E",
"yellow": "#C19C00",
"blue": "#0037DA",
"purple": "#881798",
"cyan": "#3A96DD",
"white": "#CCCCCC",
"brightBlack": "#767676",
"brightRed": "#E74856",
"brightGreen": "#16C60C",
"brightYellow": "#F9F1A5",
"brightBlue": "#3B78FF",
"brightPurple": "#B4009E",
"brightCyan": "#61D6D6",
"brightWhite": "#F2F2F2"
}
]
}
Dit bestand hoeft het profiel niet op te geven nameof commandLine. Deze worden automatisch toegevoegd door WSL bij het genereren van het terminalprofiel.
Een WSL-configuratie toevoegen voor lokale instellingen per distributie
In de context van een distributie-root-bestandssysteem raden we aan om de systemd-instellingen te configureren, inclusief of systemd standaard start, in de /etc/wsl.conf lokale instellingen per distributie. Zie het onderstaande voorbeeld.
# /etc/wsl.conf
[boot]
systemd=true|false
De distributieauteur bepaalt of systemd standaard is ingeschakeld door de boot.systemd waarde in te stellen op true (ingeschakeld) of false (niet ingeschakeld).
Zie de aanbevelingen voor Systemd als u ervoor hebt gekozen om systemd standaard in te schakelen.
Zie geavanceerde instellingenconfiguratie in WSL voor alle ondersteunde instellingen in /etc/wsl.conf.
Het tar-bestand maken
Zodra de distributie- en configuratiebestanden zijn ingesteld, kan het hoofdbestandssysteem worden vastgelegd in het tar-bestand.
De aanbevolen manier om het tar-bestand te maken:
cd /path/to/rootfs
tar --numeric-owner --absolute-names -c * | gzip --best > ../install.tar.gz
De hoofdmap van de tar moet de hoofdmap van het bestandssysteem zijn (niet een map die het hoofdbestandssysteem bevat).
De aanbevolen compressieindeling is gzip. Andere compressieindelingen lopen het risico dat compatibiliteit met oudere WSL-versies wordt onderbroken.
Zie de aanbevelingen voor configuratiebestanden voor een lijst met bestanden die niet in de configuratie moeten worden opgenomen.
Als u een tar-bestand van een bestaande Linux-distributie wilt verkrijgen, raadpleegt u richtlijnen voor het exporteren van een Docker-container in Importeert u een Linux-distributie die moet worden gebruikt met WSL-.
Zodra het tar-bestandarchief gereed is, raadpleegt u De distributie lokaal testen om het lokaal uit te proberen.
Een .wsl-bestandsextensie maken
De laatste stap, wanneer u een tar-bestand hebt gemaakt om uw aangepaste Linux-distributie weer te geven, is het wijzigen van de .tar bestandsextensie in een .wsl bestandsextensie door de naam ervan te wijzigen. Als u de naam van deze bestandsextensie wijzigt, wordt deze gemarkeerd als een WSL-distributie. Zodra de naam van het tar-bestand is gewijzigd van .tar naar .wsl, wordt het bestand correct geïnstalleerd in Windows wanneer het wordt geopend door te dubbelklikken in Verkenner. Een oobe.defaultName vermelding is vereist in het /etc/wsl-distribution.conf bestand om deze dubbelklik-functionaliteit correct te laten werken.
Verspreid uw WSL-distributie
WSL-gebruikers kunnen beschikbare distributies bekijken door wsl --list --online uit te voeren en ze rechtstreeks met wsl --install <distroName> te installeren (waarbij <distroName> wordt vervangen door de werkelijke naam van de Linux-distributie. Dit proces wordt beheerd door een distributiemanifestbestand. U kunt dit manifestbestand toevoegen aan de Linux-distributie van uw klant zodat het kan worden opgenomen in de wsl --install opdrachtopties.
De aangepaste Linux-distributie tar die u hebt gemaakt en hernoemd met een .wsl bestandsextensie, kan naar eigen inzicht worden gedistribueerd. Zodra een bestand is gedownload, kan de gebruiker het rechtstreeks vanaf de opdrachtregel installeren met wsl --install --from-file <fileLocation> (waarbij <fileLocation> wordt vervangen door de werkelijke locatie van het bestand). U kunt ook het .wsl-bestand voor uw aangepaste WSL-distributie openen door erop te dubbelklikken.
Details van distributiemanifest
Het distributiemanifest bevat metagegevens over de distributies die beschikbaar zijn voor installatie via wsl --install <distribution>.
Linux-distributies die zijn gebaseerd op tar worden vermeld onder ModernDistribution, met de onderstaande indeling:
{
"ModernDistributions": {
"<flavor>": [
{
"Name": "<version name>",
"FriendlyName": "<friendly name>",
"Default": true | false,
"Amd64Url": {
"Url": "<tar url>",
"Sha256": "<tar sha256 hash>"
},
"Arm64Url": {
"Url": "<tar url>",
"Sha256": "<tar sha256 hash>"
}
},
{
...
}
],
"<flavor>": [
...
]
}
}
Elke flavor vermelding bevat een lijst met installeerbare distributies. Distributies kunnen worden geïnstalleerd via de variantnaam (in welk geval de standaardinstelling wordt geïnstalleerd) of de versienaam.
Bekijk hoe wsl --install opdrachten werken met het onderstaande manifest:
{
"ModernDistributions": {
"my-distro": [
{
"Name": "my-distro-v3",
"Default": true,
"FriendlyName": "My distribution version 3 (latest)"
[...]
},
{
"Name": "my-distro-v2",
"Default": false,
"FriendlyName": "My distribution version 2"
[...]
}
]
}
}
Voorbeeld van installatieopdrachten:
wsl --install my-distro # Installs 'my-distro-v3' since it's the default for 'my-distro' flavor
wsl --install my-distro-v3 # Installs 'my-distro-v3' explicitly
wsl --install my-distro-v2 # Installs 'my-distro-v2' explicitly
Uw distributie toevoegen aan wsl --install voor alle WSL-gebruikers
Als u de distributie wilt opnemen in de lijst voor de opdracht: wsl --list --online, moet de distributie voldoen aan de lidmaatschapscriteria die in de distributieadreslijst worden beschreven. Dit zorgt ervoor dat alle vermelde distributies voldoen aan de benodigde beveiligingsstandaarden.
Als uw distributie voldoet aan de criteria en u deze wilt toevoegen aan de --install lijst, dient u een pull-aanvraag in in de WSL GitHub-opslagplaats (https://github.com/microsoft/WSL) waarmee het DistributionInfo.json bestand wordt bijgewerkt met de details van uw distributie. Deze pull-aanvraag wordt beoordeeld door het WSL-team.
Uw distributie toevoegen aan wsl --install voor uw onderneming of bedrijfsgroep
U kunt uw distributie ook beschikbaar maken in wsl --install alleen voor een bepaalde groep door registersleutels te bewerken op de gekozen Windows-apparaten.
Het WSL-distributiemanifest kan worden overschreven door waarden in het register aan te maken in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss.
-
DistributionListUrl: hiermee wordt de URL van het distributiemanifest overschreven -
DistributionListUrlAppend: Distributies uit die manifest-URL toevoegen aan de lijst met geïnstalleerde distributies
Beide registerwaarden zijn tekenreeksen (REG_SZ) en hebben naar verwachting de URL-indeling.
Vanaf WSL-release 2.4.4 wordt het file://-protocol ondersteund om lokale tests eenvoudiger te maken. De verwachte indeling is: file:///C:/path/to/file.
De distributie lokaal testen
Als u een distributieteer wilt testen, kunt u het volgende PowerShell-voorbeeldscript gebruiken om het distributiemanifest te overschrijven met de nieuwe distributie. Sla eerst het onderstaande script op als override-manifest.ps1:
#Requires -RunAsAdministrator
[cmdletbinding(PositionalBinding = $false)]
param (
[Parameter(Mandatory = $true)][string]$TarPath,
[string]$Flavor = "test-distro",
[string]$Version = "test-distro-v1",
[string]$FriendlyName = "Test distribution version 1")
Set-StrictMode -Version latest
$TarPath = Resolve-Path $TarPath
$hash = (Get-Filehash $TarPath -Algorithm SHA256).Hash
$manifest= @{
ModernDistributions=@{
"$Flavor" = @(
@{
"Name" = "$Version"
Default = $true
FriendlyName = "$FriendlyName"
Amd64Url = @{
Url = "file://$TarPath"
Sha256 = "0x$hash"
}
})
}
}
$manifestFile = "$PSScriptRoot/manifest.json"
$manifest | ConvertTo-Json -Depth 5 | Out-File -encoding ascii $manifestFile
Set-ItemProperty -Path "HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss" -Name DistributionListUrl -Value "file://$manifestFile" -Type String -Force
Configureer vervolgens het lokale manifest door de volgende opdracht uit te voeren in een PowerShell met verhoogde bevoegdheid:
.\override-manifest.ps1 -TarPath /path/to/tar
Zodra dit is voltooid, ziet u de volgende uitvoer van wsl.exe --list --online:
$ wsl --list --online
The following is a list of valid distributions that can be installed.
Install using 'wsl.exe --install <Distro>'.
NAME FRIENDLY NAME
test-distro-v1 Test distribution version 1
Vervolgens kunt u wsl.exe --install test-distro-v1 uitvoeren om de installatie van de nieuwe distributie uit te voeren.
Wanneer u klaar bent, kunt u HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\DistributionListUrl verwijderen om terug te keren naar het officiële manifest.
Aanbevelingen voor aangepaste Linux-distributie in WSL
Aanbevelingen voor configuratiebestanden
- Zorg ervoor dat uw aangepaste distributie zowel de
/etc/wsl.confals/etc/wsl-distribution.confconfiguratiebestanden bevat. Beide bestanden moeten eigendom zijn vanroot:rooten hun machtigingen moeten worden0644. - Als de
oobe.command-instelling wordt gebruikt om een nieuwe gebruiker te maken, moeten zoweluidalsoobe.defaultUidworden ingesteld op1000. - Zorg ervoor dat u zowel
oobe.defaultNamealsshortcut.iconinstelt in het distributieconfiguratiebestand:/etc/wsl-distribution.conf - Neem bestand
/etc/resolv.confniet op in het hoofdbestandssysteem. - Voeg een rootgebruiker toe in
/etc/passwd. Deuidvoor deze hoofdgebruiker moet worden0. - Er mogen geen wachtwoordhashes in
/etc/shadowzijn. - Het archief mag geen kernel of een initramfs bevatten.
Aanbevelingen voor Systemd
Als systemd is ingeschakeld, moeten eenheden die problemen met WSL kunnen veroorzaken, worden uitgeschakeld of gemaskeerd. De onderstaande eenheden zijn bekend om problemen in WSL-distributies te veroorzaken (van toepassing op zowel systeem- als gebruikerseenheden):
- systemd-resolved.service
- systemd-networkd.service
- NetworkManager.service
- systemd-tmpfiles-setup.service
- systemd-tmpfiles-clean.service
- systemd-tmpfiles-clean.timer
- systemd-tmpfiles-setup-dev-early.service
- systemd-tmpfiles-setup-dev.service
- tmp.mount
Windows Subsystem for Linux