# Cài Đặt WSL2 trên windows 10, không nên xài docker desktop mà nên cài thẳng lên ubuntu

Không nên cài Docker Desktop vì:

- Không stable, lỗi quá nhiều với wsl2, crash tùm lum
- WSL tự thay đổi quá nhiều thứ behind the scence để thích ứng với docker desktop như networking, firewall, dns , ...

#### Hướng dẫn cài WSL trên windows 10

Đòi hỏi sẽ phải cần Mở Windows Features on:

```
- Hyper-V<br></br>- .NET 4.8<br></br>- Virtual Machine Platform<br></br>- Windows Subsystem for Linux
```

1. Cài WSL2 bình thường với ubuntu latest

List Linux Distro Available:

```
wsl.exe -l -o
```

Install Version

```
wsl.exe --install -d Ubuntu-24.04
wsl --set-version Ubuntu-22.04 2
wsl --update
```

Config WSL sửa lỗi WSL2 theo bài cũ: [https://wiki.kyluat.com/books/programming/page/windows-wsl-ubuntu-docker-node-nestjs-app-khong-vao-duoc](https://wiki.kyluat.com/books/programming/page/windows-wsl-ubuntu-docker-node-nestjs-app-khong-vao-duoc)

Cấu hình wsl nâng ram và cpus trên windows

tạo file .wslconfig theo path: c:/users/hothanhson/.wslconfig

```
[wsl2]
# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=32GB
# Sets the VM to use two virtual processors
processors=8
kernelCommandLine = cgroup_no_v1=all
[experimental]
autoMemoryReclaim=true
```

auto memory reclaim để wsl nó reset lại memory khi bị leak

/etc/resolv.conf

```
sudo chattr -f -i /etc/resolv.conf
sudo vi /etc/resolv.conf
```

```
nameserver 192.168.1.11<br></br>nameserver 172.21.240.1
```

```
sudo chattr -f +i /etc/resolv.conf
```

/etc/wsl.conf

```
[boot]<br></br>systemd=true<br></br>[network]<br></br>generateResolvConf = false<br></br>generateHosts = true<br></br>networkingMode=NAT<br></br>
```

#### Mặc định command sudo

Config user sao cho không có cần đánh sudo và password nhiều

```
sudo su -<br></br>sudo visudo
```

[![image.png](https://wiki.kyluat.com/uploads/images/gallery/2024-05/scaled-1680-/image.png)](https://wiki.kyluat.com/uploads/images/gallery/2024-05/image.png)

Thêm

- son ALL=(ALL:ALL) ALL
- son ALL=(ALL) NOPASSWD:ALL
- son là username của ubuntu

#### Cài đặt docker trên ubuntu

[https://docs.docker.com/engine/install/ubuntu/](https://docs.docker.com/engine/install/ubuntu/)

Cài đặt docker dns ở /etc/docker/daemon.json

```
{<br></br>    "exec-opts": ["native.cgroupdriver=cgroupfs"],<br></br>    "log-driver": "json-file",<br></br>    "log-opts": {<br></br>            "max-size": "100m"<br></br>    },<br></br>    "storage-driver": "overlay2",<br></br>    "dns": ["192.168.1.11", "8.8.8.8"],<br></br>    "iptables": false<br></br>}<br></br>
```

#### Cài đặt GPU lên ubuntu

```
https://github.com/ashishpatel26/Cuda-installation-on-WSL2-Ubuntu-20.04-and-Windows11?tab=readme-ov-file
```

Xem coi mình đang xài GPU gì:

nhấn WIN+R đánh dxdiag để check mình đang xài graphic card gì

```
WIN+R
```

```
dxdiag
```

[![image.png](https://wiki.kyluat.com/uploads/images/gallery/2024-05/scaled-1680-/VInimage.png)](https://wiki.kyluat.com/uploads/images/gallery/2024-05/VInimage.png)

Command sau đây sẽ install online ( mất tầm 15p )

```
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4
```

#### cài đặt nvdia container toolkit cho docker:

```
sudo nano /etc/apt/sources.list
 
Thêm vào dòng này để có repo cài libt5info missing:

deb http://archive.ubuntu.com/ubuntu/ lunar universe
```

```
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
 
sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
 
 
sudo apt-get update
 
 
sudo apt-get install -y nvidia-container-toolkit
 
sudo systemctl restart docker
```

cài libsecret

```
sudo apt install libsecret-1-0
```

cài gnome keyring:

```
sudo apt install gnome-keyring
```

Add user vào docker group để khỏi hỏi Sudo hoài:

```
sudo usermod -aG docker $USER
```

Thêm quyền cho user son:

```
sudo usermod -aG sudo son
```

Kết quả:

Test Ubuntu với GPU:

```
nvidia-smi
```

[![image.png](https://wiki.kyluat.com/uploads/images/gallery/2024-05/scaled-1680-/xYOimage.png)](https://wiki.kyluat.com/uploads/images/gallery/2024-05/xYOimage.png)

Test Docker với gpu:

```
docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
```

[![image.png](https://wiki.kyluat.com/uploads/images/gallery/2024-05/scaled-1680-/pRtimage.png)](https://wiki.kyluat.com/uploads/images/gallery/2024-05/pRtimage.png)

Docker Compose Template với GPU:

```
deploy:<br></br>    resources:<br></br>      reservations:<br></br>          devices:<br></br>              - driver: nvidia<br></br>                count: 1<br></br>                capabilities: [gpu]
```