-
-
Save madebycm/d59e99d8d0ca5e29ade43b8bbdfbb81e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This PowerShell script tries to do almost all the things required to set up | |
# an Ubuntu WSL2 instance for use with DDEV and docker-ce installed inside WSL2. | |
# It requires that an Ubuntu wsl2 distro be installed already, preferably with `wsl --install`, but it can also be | |
# done manually. | |
# Run this in an administrative PowerShell window. | |
# You can download, inspect, and run this, or run it directly with | |
# Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; | |
# iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/ddev/ddev/master/scripts/install_ddev_wsl2_docker_inside.ps1')) | |
#Requires -RunAsAdministrator | |
# Make sure wsl is installed and working | |
if (-not(wsl -l -v)) { | |
throw "WSL2 does not seem to be installed yet; please install it with 'wsl --install'" | |
} | |
# Make sure default distro an ubuntu release | |
if (-not( wsl -e grep ^NAME=.Ubuntu //etc/os-release)) { | |
throw "Your installed WSL2 distro does not seem to be Ubuntu. You can certainly use DDEV with WSL2 in another distro, but this script is oriented to Ubuntu." | |
} | |
# Install Chocolatey if needed | |
if (-not (Get-Command "choco" -errorAction SilentlyContinue)) | |
{ | |
"Chocolatey does not appear to be installed yet, installing" | |
$ErrorActionPreference = "Stop" | |
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) | |
} | |
if (wsl bash -c "test -d /mnt/wsl/docker-desktop >/dev/null 2>&1" ) { | |
throw "Docker Desktop integration is enabled with the default distro and it must but turned off." | |
} | |
$ErrorActionPreference = "Stop" | |
# Install needed choco items; ddev/gsudo needed for ddev inside wsl2 to update hosts file on windows | |
choco upgrade -y ddev gsudo mkcert | |
mkcert -install | |
$env:CAROOT="$(mkcert -CAROOT)" | |
setx CAROOT $env:CAROOT; If ($Env:WSLENV -notlike "*CAROOT/up:*") { $env:WSLENV="CAROOT/up:$env:WSLENV"; setx WSLENV $Env:WSLENV } | |
wsl -u root bash -c "apt-get remove -y -qq docker docker-engine docker.io containerd runc >/dev/null 2>&1" | |
wsl -u root apt-get update | |
wsl -u root apt-get install -y ca-certificates curl gnupg lsb-release | |
wsl -u root mkdir -p /etc/apt/keyrings | |
wsl -u root bash -c "rm -f /etc/apt/keyrings/docker.gpg && mkdir -p /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg" | |
wsl -u root -e bash -c 'echo deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | tee /etc/apt/sources.list.d/docker.list > /dev/null 2>&1' | |
wsl -u root -e bash -c "rm -f /etc/apt/trusted.gpg.d/ddev.gpg && curl -fsSL https://pkg.ddev.com/apt/gpg.key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/ddev.gpg > /dev/null" | |
wsl -u root -e bash -c 'echo deb [signed-by=/etc/apt/trusted.gpg.d/ddev.gpg] https://pkg.ddev.com/apt/ \* \* > /etc/apt/sources.list.d/ddev.list' | |
wsl -u root -e bash -c "apt update && apt install -y ddev docker-ce docker-ce-cli containerd.io wslu" | |
wsl -u root -e bash -c "apt-get upgrade -y >/dev/null" | |
wsl bash -c 'sudo usermod -aG docker $USER' | |
wsl bash -c 'echo CAROOT=$CAROOT' | |
wsl -u root mkcert -install | |
wsl -u root service docker start | |
if (-not(wsl -e docker ps)) { | |
throw "docker does not seem to be working inside the WSL2 distro yet. " | |
} | |
# If docker desktop was previously set up, the .docker can break normal use of docker client. | |
wsl rm -rf ~/.docker | |
refreshenv | |
wsl -u root -e bash -c "touch /etc/wsl.conf && if ! fgrep '[boot]' /etc/wsl.conf >/dev/null; then printf '\n[boot]\nsystemd=true\n' >>/etc/wsl.conf; fi" | |
wsl ddev version | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
My WSL system files got super messed up yesterday and had to fix them using the
DISM
command and that did fix my WSL2/Ubuntu distro filesystem being "gone" but a whole host of other problems were spawned. I fixed them all but finally ran into my "docker-ce" being hosed and the normal installation for that did not work as I got the following error when doing that:Running the commands in this script fixed my issue! Thank you!