Skip to content

2023

WSL2 on Windows

Windows operating system provides "Windows Subsystem for Linux" which can be utilized to develop using Linux operating system and have Linux based tools. Windows operating system is providing a great interoperability so that it is very easy to operate between Linux distribution and base operating system. I still remember the old days where we had to do so many things to have Linux OS with the base operating system. Popular choices were to have dedicated partitions to have different Operating systems or have Virtual Machine to host any OS of your choice. For both the cases, the development experience was not that great.

Modern development is based on Containerization technologies and for Windows operating system, Docker Desktop is a popular choice to create docker environment in Windows operating system. Docker Desktop was using Hyper-v based virtualization technology and Linux OS to provide required environment. Later it started supporting WSL to provide containerization capabilities.

Recent licensing agreement says Docker Desktop is not free for enterprises and you need license to use it. Docker Desktop is a great tool but it has license cost associated with it. New tools are coming like Rancher Desktop which shows great potential. You may explore these tools if you are comfortable using GUI based tools. If you are comfortable using command and CLIs then you can setup you own environment using WSL2.

I have recently configured my development setup using WSL2 on Windows 11.

I have noted all the tips and tricks to resolve the issues which I encountered during this journey.

Step 1 : Setting up WSL 2 in WINDOWS 10/11

Go to Windows + R and enter appwiz.cpl

Click on "Turn Windows Features on or off" . Enable "Windows Sub System for Linux" and "Virtual Machine Platform" Then restart the machine.

Open power shell

wsl --install

If WSL is already installed

wsl --update 

Setting WSL2 as default

wsl --set-default-version 2

How to see available distributions?

wsl -l -o

How to check installed distributions

wsl -l -v

Installing specific distribution

wsl --install -d <distribution name>
# example : wsl --install -d Ubuntu-20.04

Note down username and password.

To Stop distribution :

wsl --terminate Ubuntu-20.04

To unregister distribution :

wsl --unregister Ubuntu-20.04

Step2 : Mounts - accessing windows file in Linux and vice versa

Find Linux packages under windows folder

C:\Users\<uername>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79fggfdhp1fndgsc

Seeing Linux files in WINDOWS Locating distribution files in windows -

\\wsl$

This will show all the distributions and you can enter into specific distributions

\\wsl.localhost\Ubuntu-20.04

Accessing Windows file system in WLS distribution use /mnt to navigate any to drive.

Example :

cd /mnt/c
# or 
/mnt/d/<sub-folder>

use ls command to see the files

testuser@vvdsfsf04:/mnt/c$ sudo ls

To go back to root -

testuser@vvdsfsf04:/mnt/c$ cd ~

Step 3: Using Visual Studio Code to modify Linux projects

Installing and opening VS code form WSL distribution

testuser@vvdsfsf04:~$ code .

It should open Visual Studio Code with Linux terminal so that you can execute any Linux command from here. You can install "Remote WSL" extension upfront.

You can also connect WSL distributions form visual studio Open Visual Studio Code Press Ctrl + Shift + P and the search "new WSL window with Distribution". You should be able to select installed distributions.

Step 4: Windows terminal

It is better to use windows terminal to access all the Linux distributions. You can install from Windows store or any other procedure as mentioned in the below link Microsoft Terminal

Note:- Windows 11 it is pre installed.

Sometimes for corporate environment windows store is not available. in that case use Powershell and package manager -

winget install --id=Microsoft.WindowsTerminal -e

Windows terminal shall provide distribution specific terminals and it is easy to operate multiple distributions

Step 5 : Internet Connectivity inside WSL distribution

sudo apt-get update

If you see it is not working follow the below steps

Generally for personal computer you do not need to any thing but sometimes for corporate network you need to some configurations. This a hack which I did to get internet connections but we need to have a better solution. I will update this section once I have some update.

Step 5

Step 5.a : Create a WSL conf file under /etc/ folder

sudo nano /etc/wsl.conf

Paste the below text

[network]
generateResolvConf = false

Step 5.b : Remove default resolv.conf

sudo rm /etc/resolv.conf

Step 5.c : Create new Resolve.conf

sudo nano /etc/resolv.conf

and paste

nameserver 8.8.8.8

Now, Restart the distribution

Step 6 : Installing Docker

Docker installation and Docker Compose installation Use below commands to start docker immediately and start docker while starting up the OS.

sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl enable docker.service
sudo systemctl enable containerd.service

If you see the below error --

System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down

You can use instead

sudo service docker start
sudo --status-all

Avoid starting every time, You can follow the below steps to start at start-up --

Step 1:

sudo visudo

ALL=(ALL) NOPASSWD: /usr/bin/dockerd

Step 2:

echo '# Start Docker daemon automatically when logging in if not running.' >> ~/.bashrc
echo 'RUNNING=`ps aux | grep dockerd | grep -v grep`' >> ~/.bashrc
echo 'if [ -z "$RUNNING" ]; then' >> ~/.bashrc
echo '    sudo dockerd > /dev/null 2>&1 &' >> ~/.bashrc
echo '    disown' >> ~/.bashrc
echo 'fi' >> ~/.bashrc

Step 3:

sudo usermod -a -G docker <<user>>

Step 7: Accessing Linux applications from WINDOWS

Microsoft Networking

ip addr | grep eth0

From Windows - https://172.20.80.183/

Step 8: Accessing Windows applications from Linux

cat /etc/resolv.conf

From Linux -- curl http://172.20.80.1:500