mirror of
https://github.com/webinstall/webi-installers.git
synced 2026-08-18 19:46:59 +00:00
fix WSL 2 install, update docs, separate installs
This commit is contained in:
+112
-16
@@ -1,14 +1,24 @@
|
||||
---
|
||||
title: WSL
|
||||
homepage: https://docs.microsoft.com/en-us/windows/wsl/install-win10
|
||||
title: WSL (Complete)
|
||||
homepage: https://docs.microsoft.com/en-us/windows/wsl/wsl2-index
|
||||
tagline: |
|
||||
WSL (Windows Subsystem for Linux) is required for running Microsoft Linux.
|
||||
WSL (Windows Subsystem for Linux) runs a true Linux kernel via Hyper-V virtualization.
|
||||
---
|
||||
|
||||
## Read Carefully!
|
||||
|
||||
1. WSL is a **system** service which **requires Admin privileges** to install.
|
||||
2. A **System Reboot** is **required** before WSL can be used.
|
||||
3. Not all systems can use WSL 2, so **WSL 1** is the **default**.
|
||||
|
||||
## Cheat Sheet
|
||||
|
||||
> WSL (v1) is not emulation, but rather a Linux syscall wrapper around the
|
||||
> Windows Kernel.
|
||||
> This is a complete WSL installer that includes **_WSL 1_**, **_WSL 2_**
|
||||
> (Hyper-V), and **_Ubuntu Linux_**.
|
||||
>
|
||||
> WSL 2 is not "version 2" of WSL, but more "layer 2" WSL 1 uses a Linux syscall
|
||||
> wrapper around the Windows Kernel WSL 2 uses `VirtualMachinePlatform` and
|
||||
> Hyper-V to run a full Linux kernel with 100% syscall compatibility.
|
||||
|
||||
After installing WSL and **Rebooting** you will be able to install Linux
|
||||
variants from the Windows 10 Store:
|
||||
@@ -16,22 +26,108 @@ variants from the Windows 10 Store:
|
||||
- [Ubuntu Linux 20.04](https://www.microsoft.com/store/apps/9n6svws3rx71)
|
||||
- [Alpine WSL](https://www.microsoft.com/store/apps/9p804crf0395)
|
||||
|
||||
### Admin Privileges Required
|
||||
### How to Launch Linux
|
||||
|
||||
It is not possible to install WSL without Admin privileges.
|
||||
|
||||
You _will_ need to allow the installer to run as Admin when asked.
|
||||
|
||||
### Reboot Required
|
||||
|
||||
You will not be able to use WSL without rebooting.
|
||||
|
||||
### Raw PowerShell Command
|
||||
To Launch the default Linux:
|
||||
|
||||
```pwsh
|
||||
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/c cd /d %CD% && dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart'"
|
||||
wsl.exe
|
||||
```
|
||||
|
||||
To Launch a specific Linux:
|
||||
|
||||
```pwsh
|
||||
wsl.exe --list
|
||||
wsl.exe -d Ubuntu-20.04
|
||||
```
|
||||
|
||||
### How to Set or Reset Root Password
|
||||
|
||||
```pwsh
|
||||
wsl -d Ubuntu-20.04 -u root passwd
|
||||
```
|
||||
|
||||
### How to Run a Single Command
|
||||
|
||||
Assuming you want to run `ls ~/` as the default user:
|
||||
|
||||
```pwsh
|
||||
wsl -- ls ~/
|
||||
```
|
||||
|
||||
Assuming your username is `app` and you wanted to run `ls`:
|
||||
|
||||
```pwsh
|
||||
wsl -d Ubuntu-20.04 -u app -- ls ~/
|
||||
```
|
||||
|
||||
### How to Switch Between WSL 1 and WSL 2
|
||||
|
||||
Despite the name, WSL 2 is neither a "better" version of nor a replacement for
|
||||
WSL 1. Rather WSL 1 uses a syscall wrapper (much like WINE) whereas WSL 2 uses
|
||||
Hyper-V virtualization.
|
||||
|
||||
You can start a Linux install in either mode and switch between the two as
|
||||
desired.
|
||||
|
||||
Either by setting the per Linux install:
|
||||
|
||||
```pwsh
|
||||
wsl --list --verbose
|
||||
```
|
||||
|
||||
```pwsh
|
||||
wsl --set-version Ubuntu-20.04 1
|
||||
# or
|
||||
wsl --set-version Ubuntu-20.04 2
|
||||
```
|
||||
|
||||
Or by setting the global default:
|
||||
|
||||
```pwsh
|
||||
wsl --set-default-version 1
|
||||
# or
|
||||
wsl --set-default-version 2
|
||||
```
|
||||
|
||||
Note that you _cannot_ set the mode before rebooting.
|
||||
|
||||
See also <https://docs.microsoft.com/en-us/windows/wsl/wsl2-index>.
|
||||
|
||||
### How to Install Linux with PowerShell
|
||||
|
||||
You can download Linux from the Windows Store, or with `curl.exe` on the Command
|
||||
Line:
|
||||
|
||||
```pwsh
|
||||
curl.exe -L -o Ubuntu_2004_x64.appx https://aka.ms/wslubuntu2004
|
||||
powershell Add-AppxPackage Ubuntu_2004_x64.appx
|
||||
```
|
||||
|
||||
See also <https://docs.microsoft.com/en-us/windows/wsl/install-manual>.
|
||||
|
||||
### Raw PowerShell Install Commands
|
||||
|
||||
This is already detailed at [webinstall.dev/wsl1](https://webinstall.dev/wsl1)
|
||||
and [webinstall.dev/wsl2](https://webinstall.dev/wsl2)
|
||||
|
||||
See also <https://github.com/microsoft/WSL/issues/5014>
|
||||
|
||||
### Errors: Feature Not Installed & Nested VMs
|
||||
|
||||
These errors are detailed at <https://webinstall.dev/wsl2>.
|
||||
|
||||
Likely solution:
|
||||
|
||||
```pwsh
|
||||
wsl --set-default-version 1
|
||||
wsl --set-version Ubuntu-20.04 1
|
||||
```
|
||||
|
||||
## References
|
||||
|
||||
- https://docs.microsoft.com/en-us/windows/wsl/install-win10
|
||||
- https://github.com/microsoft/WSL/issues/5014
|
||||
- https://docs.microsoft.com/en-us/windows/wsl/wsl2-index
|
||||
- https://aka.ms/wsl2kernel
|
||||
- https://docs.microsoft.com/en-us/windows/wsl/install-manual
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env pwsh
|
||||
|
||||
echo "Installing 1 of 5 Microsoft-Windows-Subsystem-Linux (for WSL 1 and WSL 2) ..."
|
||||
& dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
|
||||
|
||||
echo ""
|
||||
echo "Installing 2 of 5 VirtualMachinePlatform (for WSL 2 Hyper-V) ..."
|
||||
& dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
|
||||
|
||||
Function Test-CommandExists
|
||||
{
|
||||
Param ($command)
|
||||
$oldPreference = $ErrorActionPreference
|
||||
$ErrorActionPreference = 'stop'
|
||||
try {if(Get-Command $command){RETURN $true}}
|
||||
Catch {RETURN $false}
|
||||
Finally {$ErrorActionPreference=$oldPreference}
|
||||
}
|
||||
|
||||
echo ""
|
||||
IF(!(Test-CommandExists wsl))
|
||||
{
|
||||
echo "Skipping 3 of 5: Microsoft Linux Kernel requires WSL 1 to be installed first ..."
|
||||
}
|
||||
ELSE
|
||||
{
|
||||
echo "Installing 3 of 5 Microsoft Linux Kernel (wsl_update_x64.msi for WSL 2) ..."
|
||||
IF (!(Test-Path -Path "$Env:TEMP\wsl_update_x64.msi")) {
|
||||
& curl.exe -f -o "$Env:TEMP\wsl_update_x64.msi" "https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi"
|
||||
}
|
||||
IF (!(Test-Path -Path "C:\Temp\System32\lxss\tools\kernel")) {
|
||||
# NOTE: This WILL NOT work with TARGETDIR=$Env:TEMP!!
|
||||
echo "Start-Process msiexec -Wait -ArgumentList '/a ""$Env:TEMP\wsl_update_x64.msi"" /quiet /qn TARGETDIR=""C:\Temp""'"
|
||||
powershell -Command "Start-Process msiexec -Wait -ArgumentList '/a ""$Env:TEMP\wsl_update_x64.msi"" /quiet /qn TARGETDIR=""C:\Temp""'"
|
||||
echo "Unpacked to C:\Temp\System32\lxss\tools\kernel"
|
||||
}
|
||||
Copy-Item -Path "C:\Temp\System32\lxss" -Destination "C:\System32" -Recurse -Force
|
||||
echo "Copied to C:\System32\lxss\tools\kernel ..."
|
||||
|
||||
echo "Start-Process msiexec -Wait -ArgumentList '/i','$Env:TEMP\wsl_update_x64.msi','/quiet','/qn'"
|
||||
powershell -Command "Start-Process msiexec -Wait -ArgumentList '/i','$Env:TEMP\wsl_update_x64.msi','/quiet','/qn'"
|
||||
}
|
||||
|
||||
Start-Sleep -s 3
|
||||
+65
-5
@@ -4,10 +4,70 @@ echo "Installing WSL (Windows Subsystem for Linux) ..."
|
||||
echo ""
|
||||
echo "Security: requires administrator approval to install"
|
||||
|
||||
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/c cd /d %CD% && dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all'"
|
||||
# /norestart
|
||||
IF ($Env:WEBI_HOST -eq $null -or $Env:WEBI_HOST -eq "") { $Env:WEBI_HOST = "https://webinstall.dev" }
|
||||
|
||||
# From https://devblogs.microsoft.com/scripting/use-a-powershell-function-to-see-if-a-command-exists/
|
||||
Function Test-CommandExists
|
||||
{
|
||||
Param ($command)
|
||||
$oldPreference = $ErrorActionPreference
|
||||
$ErrorActionPreference = 'stop'
|
||||
try {if(Get-Command $command){RETURN $true}}
|
||||
Catch {RETURN $false}
|
||||
Finally {$ErrorActionPreference=$oldPreference}
|
||||
}
|
||||
|
||||
|
||||
# $MYPWD = (Get-Item .).FullName
|
||||
& curl.exe -fsSA "MS" -o "$Env:TEMP\install-wsl2.ps1" "$Env:WEBI_HOST/packages/wsl/install-wsl.ps1"
|
||||
powershell -Command "Start-Process cmd -Wait -Verb RunAs -ArgumentList '/c cd /d %CD% && powershell -ExecutionPolicy Bypass $Env:TEMP\install-wsl2.ps1'"
|
||||
|
||||
IF(!(Test-CommandExists wsl))
|
||||
{
|
||||
echo "Warning: Skipping 3 of 5: Reboot Required to install WSL 2 !!"
|
||||
}
|
||||
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo "!!! Reboot REQUIRED !!!"
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo ""
|
||||
IF ((Test-Path -Path "$Env:UserProfile\Downloads\Ubuntu_2004_x64.appx" )) {
|
||||
echo "Skipping 4 of 5: Ubuntu Linux 20.04 already installed"
|
||||
} ELSE {
|
||||
echo "Installing 4 of 5 Ubuntu Linux 20.04 (for WSL 1 and WSL 2) ..."
|
||||
curl.exe -fL -o "$Env:UserProfile\Downloads\Ubuntu_2004_x64.appx.part" https://aka.ms/wslubuntu2004
|
||||
& move "$Env:UserProfile\Downloads\Ubuntu_2004_x64.appx.part" "$Env:UserProfile\Downloads\Ubuntu_2004_x64.appx"
|
||||
Add-AppxPackage "$Env:UserProfile\Downloads\Ubuntu_2004_x64.appx"
|
||||
}
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo ""
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo "!!! !!!"
|
||||
echo "!!! ACTION REQUIRED !!!"
|
||||
echo "!!! READ CAREFULLY! !!!"
|
||||
echo "!!! !!!"
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
|
||||
IF(!(Test-CommandExists wsl))
|
||||
{
|
||||
echo ""
|
||||
echo "WSL 2 was NOT installed yet. FOLLOW these instructions:"
|
||||
echo ""
|
||||
echo " 1. REBOOT you computer to finish the WSL 1 install"
|
||||
echo " (either click Start Menu => Restart, or run 'shutdown /r /t 5')"
|
||||
echo ""
|
||||
echo " 2. RE-RUN this WSL 2 installer"
|
||||
echo " (WSL 2 cannot finish installing until the WSL 1 install is complete)"
|
||||
echo ""
|
||||
echo " 3. WSL 2 must be enabled manually. See https://webinstall.dev/wsl2"
|
||||
echo ""
|
||||
|
||||
Exit
|
||||
}
|
||||
|
||||
echo ""
|
||||
echo "You must ALSO run UBUNTU LINUX from the START MENU to complete the install."
|
||||
echo ""
|
||||
echo " - Select Ubuntu Linux from the Search menu or Start Menu"
|
||||
echo " - Wait for the initialization to complete"
|
||||
echo " - Choose a username (we recommend 'app') and a password"
|
||||
echo ""
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
title: WSL 1
|
||||
homepage: https://docs.microsoft.com/en-us/windows/wsl/install-win10
|
||||
tagline: |
|
||||
WSL 1 (Windows Subsystem for Linux) is required for running Microsoft Linux in Windows Terminal.
|
||||
---
|
||||
|
||||
## Read Carefully!
|
||||
|
||||
1. WSL is a **system** service which **requires Admin privileges** to install.
|
||||
2. A **System Reboot** is **required** before WSL can be used.
|
||||
|
||||
## Cheat Sheet
|
||||
|
||||
> WSL 1 (also known as _Bash for Windows_) allows you to run _most_ Linux
|
||||
> applications directly from within Windows. This is _NOT_ emulation, _NOR_
|
||||
> virtualization, but rather a a Linux syscall wrapper around the Windows
|
||||
> Kernel.
|
||||
|
||||
This will install **WSL 1 ONLY**.
|
||||
|
||||
**Most people** want [WSL 1 + WSL 2 + Linux](https://webinstall.dev/wsl). \
|
||||
(WSL 2 is NOT a replacement for WSL 1, it's just another _layer_ of WSL)
|
||||
|
||||
See the **Full Cheat Sheet** at <https://webinstall.dev/wsl>.
|
||||
|
||||
### How to Install Linux
|
||||
|
||||
Once WSL is installed you can download Linux from the Windows Store. We
|
||||
recommend:
|
||||
|
||||
- [Ubuntu Linux 20.04](https://www.microsoft.com/store/apps/9n6svws3rx71)
|
||||
- [Alpine WSL](https://www.microsoft.com/store/apps/9p804crf0395)
|
||||
|
||||
### How to Switch to WSL 1
|
||||
|
||||
To set WSL 1 as the default:
|
||||
|
||||
```pwsh
|
||||
wsl --set-default-version 1
|
||||
```
|
||||
|
||||
To set WSL 1 for a specific Linux installation:
|
||||
|
||||
1. List all installed Linux versions
|
||||
```pwsh
|
||||
wsl --list
|
||||
```
|
||||
2. Set the desired version to WSL 2 with `--set-version`. For example:
|
||||
```pwsh
|
||||
wsl --set-version Ubuntu-20.04 1
|
||||
```
|
||||
|
||||
### How to Install WSL 1 with PowerShell
|
||||
|
||||
This installer uses this command to install WSL 1
|
||||
|
||||
```pwsh
|
||||
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/c cd /d %CD% && dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart'"
|
||||
```
|
||||
|
||||
## References
|
||||
|
||||
- https://docs.microsoft.com/en-us/windows/wsl/install-win10
|
||||
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env pwsh
|
||||
|
||||
echo "Installing WSL (Windows Subsystem for Linux) ..."
|
||||
echo ""
|
||||
echo "Security: requires administrator approval to install"
|
||||
|
||||
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/c cd /d %CD% && dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all'"
|
||||
# /norestart
|
||||
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo "!!! Reboot REQUIRED !!!"
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo ""
|
||||
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "WSL 1 (Windows Subsystem for Linux) can only be installed from Windows 10"
|
||||
exit 0
|
||||
+59
-82
@@ -2,103 +2,56 @@
|
||||
title: WSL 2 (Hyper-V)
|
||||
homepage: https://docs.microsoft.com/en-us/windows/wsl/wsl2-index
|
||||
tagline: |
|
||||
WSL2 (Windows Subsystem for Linux 2) runs a true Linux kernel via Hyper-V emulation.
|
||||
WSL2 (Windows Subsystem for Linux 2) runs a true Linux kernel via Hyper-V virtualization.
|
||||
---
|
||||
|
||||
## Read Carefully!
|
||||
|
||||
1. WSL is a **system** service which **requires Admin privileges** to install.
|
||||
2. A **System Reboot** is required **inbetween** install steps.
|
||||
|
||||
## Cheat Sheet
|
||||
|
||||
> WSL 2 uses `VirtualMachinePlatform` and Hyper-V to run a full Linux kernel
|
||||
> with 100% syscall compatibility.
|
||||
> with 100% syscall compatibility. However, it does not work on all computers
|
||||
> and may not work in nested Virtual Machines - such as if running Windows in
|
||||
> VirtualBox or Parallels on Mac or Linux.
|
||||
|
||||
After installing WSL and **Rebooting** you will be able to install Linux
|
||||
variants from the Windows 10 Store:
|
||||
This will install **WSL 1 and WSL 2 ONLY**.
|
||||
|
||||
**Most people** want [WSL 1 + WSL 2 + Linux](https://webinstall.dev/wsl). \
|
||||
(WSL 2 is NOT a replacement for WSL 1, it's just another _layer_ of WSL)
|
||||
|
||||
See the **Full Cheat Sheet** at <https://webinstall.dev/wsl>.
|
||||
|
||||
### How to Install Linux
|
||||
|
||||
Once WSL is installed you can download Linux from the Windows Store. We
|
||||
recommend:
|
||||
|
||||
- [Ubuntu Linux 20.04](https://www.microsoft.com/store/apps/9n6svws3rx71)
|
||||
- [Alpine WSL](https://www.microsoft.com/store/apps/9p804crf0395)
|
||||
|
||||
### Admin Privileges Required
|
||||
### How to Switch to WSL 2 Manually
|
||||
|
||||
It is not possible to install WSL without Admin privileges.
|
||||
To set WSL 2 for a specific Linux installation:
|
||||
|
||||
You _will_ need to allow the installer to run as Admin when asked.
|
||||
1. List all installed Linux versions
|
||||
```pwsh
|
||||
wsl --list --verbose
|
||||
```
|
||||
2. Set the desired version to WSL 2 with `--set-version`. For example:
|
||||
```pwsh
|
||||
wsl --set-version Ubuntu-20.04 2
|
||||
```
|
||||
|
||||
### Reboot Required
|
||||
|
||||
You will not be able to use WSL without rebooting.
|
||||
|
||||
### How to Install Linux Bash
|
||||
|
||||
You can download Linux from the Windows Store, or from the Command Line:
|
||||
|
||||
```pwsh
|
||||
curl.exe -L -o Ubuntu_2004_x64.appx https://aka.ms/wslubuntu2004
|
||||
powershell Add-AppxPackage Ubuntu_2004_x64.appx
|
||||
```
|
||||
|
||||
See also <https://docs.microsoft.com/en-us/windows/wsl/install-manual>.
|
||||
|
||||
### How to Launch Linux
|
||||
|
||||
To Launch the default Linux:
|
||||
|
||||
```pwsh
|
||||
wsl.exe
|
||||
```
|
||||
|
||||
To Launch a specific Linux:
|
||||
|
||||
```pwsh
|
||||
wsl.exe --list
|
||||
wsl.exe -d Ubuntu-20.04
|
||||
```
|
||||
|
||||
### How to Set or Reset Root Password
|
||||
|
||||
```pwsh
|
||||
wsl -d Ubuntu-20.04 -u root passwd
|
||||
```
|
||||
|
||||
### How to Run a Single Command
|
||||
|
||||
Assuming you want to run `ls ~/` as the default user:
|
||||
|
||||
```pwsh
|
||||
wsl -- ls ~/
|
||||
```
|
||||
|
||||
Assuming your username is `app` and you wanted to run `ls`:
|
||||
|
||||
```pwsh
|
||||
wsl -d Ubuntu-20.04 -u app -- ls ~/
|
||||
```
|
||||
|
||||
### How to Switch Between WSL 1 and WSL 2
|
||||
|
||||
Despite the name, WSL 2 is neither a "better" version of nor a replacement for
|
||||
WSL 1. Rather WSL 1 uses a syscall wrapper (much like WINE) whereas WSL 2 uses
|
||||
Hyper-V virtualization.
|
||||
|
||||
After rebooting you can set WSL 2 as the default:
|
||||
If WSL 2 works on your computer, you may set it as the default:
|
||||
|
||||
```pwsh
|
||||
wsl --set-default-version 2
|
||||
```
|
||||
|
||||
You can list your existing WSL Linuxes:
|
||||
|
||||
```pwsh
|
||||
wsl --list --verbose
|
||||
```
|
||||
|
||||
And you can switch between using WSL and WSL 2 without an issues:
|
||||
|
||||
```pwsh
|
||||
wsl --set-version Ubuntu 2
|
||||
```
|
||||
|
||||
See also <https://docs.microsoft.com/en-us/windows/wsl/wsl2-index>.
|
||||
|
||||
### Raw PowerShell Install Commands
|
||||
### How to install WSL 2 with PowerShell
|
||||
|
||||
If you'd like to install manually, or create your own script, this is how we do
|
||||
it:
|
||||
@@ -110,15 +63,39 @@ dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux
|
||||
# Install VirtualMachinePlatform
|
||||
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
|
||||
|
||||
# Download and Install WSL Update (contains Microsoft Linux kernel)
|
||||
# Download and Install the WSL 2 Update (contains Microsoft Linux kernel)
|
||||
& curl.exe -f -o wsl_update_x64.msi "https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi"
|
||||
powershell -Command "Start-Process msiexec -Wait -ArgumentList '/a wsl_update_x64.msi /qb TARGETDIR=""$env:TEMP""'"
|
||||
powershell -Command "Start-Process msiexec -Wait -ArgumentList '/a ""wsl_update_x64.msi"" /quiet /qn TARGETDIR=""C:\Temp""'"
|
||||
Copy-Item -Path "$env:TEMP\System32\lxss" -Destination "C:\System32" -Recurse
|
||||
|
||||
# Also install the WSL 2 update with a normal full install
|
||||
powershell -Command "Start-Process msiexec -Wait -ArgumentList '/i','wsl_update_x64.msi','/quiet','/qn'"
|
||||
```
|
||||
|
||||
See also <https://github.com/microsoft/WSL/issues/5014>
|
||||
|
||||
### Nested VMs
|
||||
### Error: Required Feature Not Installed
|
||||
|
||||
> Installing, this may take a few minutes...
|
||||
>
|
||||
> Error: 0xXXXXXXXX The virtual machine could not be started because a required
|
||||
> feature is not installed.
|
||||
|
||||
It may be that your computer does not support virtualization because:
|
||||
|
||||
- it lacks hardware support in the CPU for VTx
|
||||
- VTx is disabled in the BIOS or EFI
|
||||
- Virtualization has disabled in Windows 10
|
||||
|
||||
You should switch back to WSL 1 until you solve this problem:
|
||||
|
||||
```pwsh
|
||||
wsl --set-default-version 1
|
||||
wsl --list --verbose
|
||||
wsl --set-version Ubuntu-20.04 1
|
||||
```
|
||||
|
||||
### Error: Nested Virtual Machines
|
||||
|
||||
WSL2 may not work properly if you are already running Windows inside of a
|
||||
Virtual Machine, especially if MacOS or Linux is the VM Host.
|
||||
|
||||
+33
-10
@@ -7,16 +7,39 @@ echo ""
|
||||
echo "Installing 2 of 3 VirtualMachinePlatform ..."
|
||||
& dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
|
||||
|
||||
Function Test-CommandExists
|
||||
{
|
||||
Param ($command)
|
||||
$oldPreference = $ErrorActionPreference
|
||||
$ErrorActionPreference = 'stop'
|
||||
try {if(Get-Command $command){RETURN $true}}
|
||||
Catch {Write-Host “$command does not exist”; RETURN $false}
|
||||
Finally {$ErrorActionPreference=$oldPreference}
|
||||
}
|
||||
|
||||
echo ""
|
||||
echo "Installing 3 of 3 Microsoft Linux Kernel (wsl_update_x64.msi) ..."
|
||||
& curl.exe -f -o wsl_update_x64.msi "https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi"
|
||||
# TODO could we do /quiet /qn to get rid of the popup?
|
||||
powershell -Command "Start-Process msiexec -Wait -ArgumentList '/a wsl_update_x64.msi /quiet /qn TARGETDIR=""$env:TEMP""'"
|
||||
#& msiexec /a "wsl_update_x64.msi" /qb TARGETDIR="$env:TEMP"
|
||||
#Start-Sleep -s 10
|
||||
echo "Copied to $env:TEMP"
|
||||
IF(!(Test-CommandExists wsl))
|
||||
{
|
||||
echo "Skipping 3 of 3: Microsoft Linux Kernel requires WSL 1 to be installed first ..."
|
||||
}
|
||||
ELSE
|
||||
{
|
||||
echo "Installing 3 of 3 Microsoft Linux Kernel (wsl_update_x64.msi) ..."
|
||||
|
||||
Copy-Item -Path "$env:TEMP\System32\lxss" -Destination "C:\System32" -Recurse
|
||||
echo "Installed C:\System32\lxss\tools\kernel ..."
|
||||
IF (!(Test-Path -Path "$Env:TEMP\wsl_update_x64.msi")) {
|
||||
& curl.exe -f -o "$Env:TEMP\wsl_update_x64.msi" "https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi"
|
||||
}
|
||||
IF (!(Test-Path -Path "C:\Temp\System32\lxss\tools\kernel")) {
|
||||
# NOTE: This WILL NOT work with TARGETDIR=$Env:TEMP!!
|
||||
echo "Start-Process msiexec -Wait -ArgumentList '/a ""$Env:TEMP\wsl_update_x64.msi"" /quiet /qn TARGETDIR=""C:\Temp""'"
|
||||
powershell -Command "Start-Process msiexec -Wait -ArgumentList '/a ""$Env:TEMP\wsl_update_x64.msi"" /quiet /qn TARGETDIR=""C:\Temp""'"
|
||||
echo "Unpacked to C:\Temp\System32\lxss\tools\kernel"
|
||||
}
|
||||
Copy-Item -Path "C:\Temp\System32\lxss" -Destination "C:\System32" -Recurse -Force
|
||||
echo "Copied to C:\System32\lxss\tools\kernel ..."
|
||||
|
||||
Start-Sleep -s 2
|
||||
echo "Start-Process msiexec -Wait -ArgumentList '/i','$Env:TEMP\wsl_update_x64.msi','/quiet','/qn'"
|
||||
powershell -Command "Start-Process msiexec -Wait -ArgumentList '/i','$Env:TEMP\wsl_update_x64.msi','/quiet','/qn'"
|
||||
}
|
||||
|
||||
Start-Sleep -s 3
|
||||
|
||||
+55
-4
@@ -10,9 +10,60 @@ $MYPWD = (Get-Item .).FullName
|
||||
& curl.exe -fA "MS" -o "$Env:TEMP\install-wsl2.ps1" "$Env:WEBI_HOST/packages/wsl2/install-wsl2.ps1"
|
||||
powershell -Command "Start-Process cmd -Wait -Verb RunAs -ArgumentList '/c cd /d %CD% && powershell -ExecutionPolicy Bypass $Env:TEMP\install-wsl2.ps1'"
|
||||
|
||||
# From https://devblogs.microsoft.com/scripting/use-a-powershell-function-to-see-if-a-command-exists/
|
||||
Function Test-CommandExists
|
||||
{
|
||||
Param ($command)
|
||||
$oldPreference = $ErrorActionPreference
|
||||
$ErrorActionPreference = 'stop'
|
||||
try {if(Get-Command $command){RETURN $true}}
|
||||
Catch {RETURN $false}
|
||||
Finally {$ErrorActionPreference=$oldPreference}
|
||||
}
|
||||
|
||||
IF(!(Test-CommandExists wsl))
|
||||
{
|
||||
echo ""
|
||||
echo ""
|
||||
echo ""
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo "!!! !!!"
|
||||
echo "!!! READ CAREFULLY !!!"
|
||||
echo "!!! !!!"
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo ""
|
||||
echo "WSL 2 was NOT installed yet. You MUST follow these instructions:"
|
||||
echo ""
|
||||
echo " 1. REBOOT you computer to finish the WSL 1 install"
|
||||
echo " (either click Start Menu => Restart, or run 'shutdown /r /t 5')"
|
||||
echo ""
|
||||
echo " 2. RE-RUN this WSL 2 installer"
|
||||
echo " (WSL 2 cannot finish installing until the WSL 1 install is complete)"
|
||||
echo ""
|
||||
echo " 3. Download and Install Linux"
|
||||
echo " (see https://webinstall.dev/wsl2)"
|
||||
echo ""
|
||||
|
||||
Exit
|
||||
}
|
||||
|
||||
echo ""
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo "!!! Reboot REQUIRED !!!"
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo ""
|
||||
echo "WSL 2 will be available to use after rebooting."
|
||||
echo ""
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo "!!! !!!"
|
||||
echo "!!! READ CAREFULLY !!!"
|
||||
echo "!!! !!!"
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo ""
|
||||
echo "WSL 2 is now installed, HOWEVER, you MUST:"
|
||||
echo ""
|
||||
echo "However, you still MUST INSTALL LINUX:"
|
||||
echo ""
|
||||
echo " 1. Download and Install Ubuntu Linux"
|
||||
echo " (see https://webinstall.dev/wsl2)"
|
||||
echo ""
|
||||
echo " 2. Set WSL to use WSL 2 with Hyper-V. For example:"
|
||||
echo " wsl.exe --set-version Ubuntu-20.04 2"
|
||||
echo " wsl.exe --set-default-version 2"
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user