Cài đặt WSL 2 trên Windows 10

Mình từng có thời gian code gần hơn 2 năm trên Ubuntu, công việc thì trơn tru, nhanh lẹ, đặc biệt là team mình có trò mount source code vào container để dev luôn do đó máy mỗi người trong team không cần cài thêm phần mềm gì ngoài git và docker.

Tuy nhiên đôi lúc sóng gió trở trời, ngày nọ có khách hàng bảo rằng chỉ nói chuyện với mình qua Skype for Business mà thôi, thế là anh em phải phải è cổ ra cài máy ảo chạy Windows trên Ubuntu. Ngày nào vào công ty cũng phải mở cả hai Win và Ubuntu lên rồi nhìn 2 đứa con ghẻ nó ăn 95% RAM mà cắn răng làm.

Bỏ qua Mac nhé! Vì công ty mình không cho tiền mua Macbook và mình mount Volume Docker hơi nhiều nên không xài được. Vì các bạn cũng biết rồi, Mac mount volume khá  chậm. Chán!

WSL2 là gì?

Cho bạn nào chưa biết thì WSL2 là tính năng của Windows 10 được Microsoft phát triển cho phép chúng ta chạy Linux trong bụng của Windows mà không cần máy ảo. Chính xác Microsoft sẽ phát triển WSL2 chạy dựa trên một tính năng ảo hóa giống với Hyper-V (mà nhẹ hơn) của Windows đó là Virtual Machine Platform. Trước WSL 2 thì có WSL1, tuy nhiên theo góc nhìn của mình thì là WSL1 khá vô dụng.

Một số lưu ý trước khi cài đặt:

  • Máy bạn chạy Windows 10 version 1903, build 18362 trở lên
  • Máy bạn ít nhất là 4G RAM (Vì theo mình ít hơn thì hok ổn cho lắm)

Cài đặt WSL2

Trước tiên cho bạn nào siêng muốn tìm hiểu đầy đủ có thể  tham khảo tại trang docs của WSL về cách cài đặt món này.

Còn không, để nhanh gọn thì cài đặt WLS2 trên Windows 10 khá đơn giản, bạn chỉ cần chạy 2 lệnh bên dưới bằng Powershell với quyền Admin là xong.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Sao đó restart máy tính.

Rồi mở Powershell lại sau khi restart với quyền Administrator luôn và chỉnh cho hệ thống chọn WSL2 làm mặc định.

wsl –set-default-version 2

Cuối cùng là lựa chọn bản Linux nào mình muốn sử dụng, ở đây mình chọn Ubuntu do mình đã quen với nó từ trước. Nếu bạn nào thắc mắc vì sao đã có WSL2 rồi mà còn phải cài thêm Ubuntu làm chi nữa? Thì mình xin giải thích đơn giản là WSL2 chỉ là làm nền tảng thôi nhé, bận vẫn cần Ubuntu để chạy trên nền tảng đó.

Các bạn có thể cài Ubuntu (20.04)  từ trên Microsoft Store nhé. Mình thì cài rồi nên nó hiện nút Launch thôi nha.

Sau khi cài đặt Ubuntu, để access vào shell của Ubuntu thì bạn chạy lệnh wsl trên cmd hay Powershell đều được nhé.

Lưu ý! ngay lần đầu tiên nó sẽ yêu cầu bạn nhập password các bạn nhập theo hướng dẫn nhé.

Vậy là xong rồi đó, bạn đã hoàn thành việc cài đặt WSL2 trên Windows 10. Mình nghĩ việc này khá đơn giản đối với các bạn, tuy nhiên để có được một môi trường làm việc hằng ngày thì mình cần làm thêm một vài chuyện linh tinh nữa.

Không nên lưu source code trên Windows chạy trên WSL2

WSL hiện tại còn 1 điểm hạn chế của là việc truy cập files vào Windows khá chậm và stupid. Mấy ngày đầu mình có làm một việc là để source code trên Windows, sau đó sẽ cài docker trên WSL2 rồi dev kiểu kiểu vậy và kết quả là mình xóa nó luôn ngay sau đó. Một chuyện khác nữa là việc phân quyền và cấu trúc 2 hệ điều hành khác nhau sẽ dẫn tới nhiều chuyện không lường trước được. Như Linux truy cập files trên windows thì gần như luôn luôn có quyền write, vậy những đoạn logic như if not writable => do something  gần như sẽ không bao giờ được chạy => bug tiềm  ẩn.

Đổi thư mục mặc định thay vì /mnt/c/Users/

Việc khá khó chịu đầu tiên đó chính là khi mới start wsl lên thì thư mục hiện tại sẽ là thư mục $USER của tài khoản người dùng Windows hiện tại. Vì phần lớn thời gian mình sẽ làm việc trên thư mục home của linux: /home/<user>/ nên lần nào mở WSL lên cũng phải chuyển thư mục cả.

C:\Users\ricky>wsl
ricky@NVNLAP-0004:/mnt/c/Users/ricky$

Để giải quyết chuyện này thì mình dùng Windows Terminal làm terminal chính thay cho cái CMD khá ẹ của Windows. Mình đã thêm vào 1 cái profile mới cho WSL chọn đây làm profile chính cho mình luôn. Tiểu sảo ở đây là các bạn thêm dấu ~ sau wsl.exe của field commandline là xong hà.

{
    "$schema": "https://aka.ms/terminal-profiles-schema",
 
    "defaultProfile": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
 
    "profiles":
    {
        "list":
        [
            {
                "guid": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
                "hidden": false,
                "name": "Ubuntu-20.04", 
                "commandline": "wsl.exe ~",
                "source": "Windows.Terminal.Wsl"
            }
        ]
    }
}

Systemd của em âu rồi.

Dù là mình dùng Ubuntu nhưng không có wls  systemd đâu nhé. Nếu cố thì khi sử dụng mấy cái lệnh như systemctl các kiểu thì sẽ nhận được câu thông báo kiểu kiểu này nà!

ricky@NVNLAP-0004:~$ systemctl status
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

Khá là chán, tuy nhiên nhờ ơn của cộng đồng, bạn có thể theo cách của bạn này để làm.

arkane-systems/genie: A quick way into a systemd “bottle” for WSL (github.com)

Sau khi cài cuốc gần 1 tiếng bạn sẽ được kết quả giống như mình bên dưới, hú hồn chim én khi mở được cái giao diện ‘Welcome’ của ubuntu và process pid 1 sẽ là systemd. Tuy nhiên cái này giờ khá là unstable, nên làm cho vui chơi thôi nhé!

WSL2 SystemD Windows 10

Chạy mấy app cần GUI

Theo mình dù rằng nếu bạn đã chọn WSL là chắc đâu đó bạn cũng tự tin làm việc với terminal, shell các kiểu. Tuy nhiên mình tin chắc một ngày nào đó bạn sẽ cần GUI khi chạy trên WSL2, mình có một bài viết sử dụng GWSL để giúp bạn có thể chạy được mấy ứng dụng kiểu này.

Một vài ưu điểm của WSL2

Nảy giờ chê khá nhiều, tuy nhiên WSL2 thật sự có một vài ưu điểm mà bạn sẽ nhận được nếu bạn vượt qua được mấy thứ kia.

  • Sức mạnh 2 hệ OS cùng lúc. Theo mình, đây là cái mang lại nhiều value các bạn tự trải nghiệm đi hen. Sướng thì phải tự tận hưởng thôi. :))
  • Chạy được docker, mount volume nhanh như trên Ubuntu.
  • Rẻ thay vì bạn phải mua Macbook nếu office và terminal là thứ ko thể thay thế.

Tương lai WSL2 và Kết

Theo mình nhận định thì WSL2 sẽ phát triển, chắc 90% là vậy. Đối với mình một môi trường làm việc mà có thể tận dụng sức mạnh của Windows và Linux thật sự là tuyệt vời, ko gì bàn cãi về việc này cả. Như việc Microsoft hứa sẽ support mình sử dụng GPU trên WSL thật sự đối với với mình là một điều tuyệt vời vì nó cho phép mình chạy được Tensorflow với docker và windows luôn. Quá sướng!

Là một fullstack, bạn phải đảm bảo rằng mình được trang bị tận răng, đụng đâu chơi đó đều được. Hãy tưởng tượng bạn có một ngày buổi sáng thì code python, build docker ầm ầm, gặp task design thì mở photoshop lên quất, chiều chém gió khách hàng thì có Office, tối về đi code kiếm cơm hay cày game thì cũng chính là một con máy đó.

Bài mình tới đây thôi, do viết cũng chưa lâu, trình còn non. Anh em góp ý thêm.

Các nguồn dưới khi viết bài này.