기억 안날까봐 적어둠


1. 개요

WSL은 Windows Subsystem for Linux의 약자로 Windows 내에서 POSIX 환경의 더 나은 지원을 위해 Microsoft가 2015년 개발하였습니다. WSL은 WSL1과 WSL2, 두 버전으로 나뉘어 있습니다.

 WSL1의 경우 마치 WINE처럼 Linux system call과 Windows system call을 상호 변환하는 형태로 구현 되었습니다. 하지만 몇몇 완전한 Linux가 아니기 때문에 몇몇 함수들은 사용할 수 없습니다. 예를 들어 Unix domain socket는 WSL1에서 사용이 불가능합니다. 사용하고자 AF_UNIX를 인자로 넘기면 바인딩 에러가 발생합니다.

 반면 WSL2는 VM을 이용하여 Linux kernel을 직접 탑재하였습니다. 하드웨어 위에 하이퍼바이저가 올라가고, 그 위에 host OS인 Windows와 guest OS인 Linux가 올라갑니다. WSL2는 완전한 Linux 환경을 제공하기 때문에 WSL1에서 사용할 수 없었던 system call을 사용할 수 있습니다. 또한 최근에는 systemd 사용을 공식적으로 지원하고, 그래픽 가속을 지원합니다.


2. 설치 (10.0.19041+) 

    a. Windows를 최신 버전으로 업데이트합니다. 

    b. Commmd Prompt(cmd.exe)를 관리자 권한으로 실행합니다.

    c. wsl.exe --install

    d. Microsoft Store에서 원하는 Linux distro를 설치합니다.

    e. Command Prompt(cmd.exe)에서 bash, 혹은 wsl을 타이핑합니다.


3. 수동 설치 (10.0.16299+ ~ 10.0.18363-)

    a. Command Prompt(cmd.exe)를 관리자 권한으로 실행합니다.

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

    c. dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

    d. https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi을 다운로드받고 설치합니다.

    e. 재부팅 후 wsl --set-default-version 2

    f. Microsoft Store에서 원하는 Linux distro를 설치합니다.

    g. Command Prompt(cmd.exe)에서 bash, 혹은 wsl을 타이핑합니다.


4. systemd 설정 (wsl2 0.67.6+, ubuntu 22.04+)

 init 대신 systemd를 사용하도록 설정할 수 있습니다.

    a. Command Prompt를 실행하고 wsl --version을 타이핑합니다. version이 출력되지 않다면 무조건 0.67.6 버전보다 낮습니다.

    b. 만약 그렇다면,  https://github.com/microsoft/WSL에서 새 릴리즈를 받아 설치합니다.

    c. /etc/wsl.conf를 다음과 같이 수정합니다.

        [boot]

        systemd=true

    d. wsl --shutdown을 타이핑하고 wsl을 종료한 후 다시 시작합니다.

    e. pstree를 통해 systemd가 루트에 있는 지 확인하거나 ps -ef를 통해 PID가 1인지 확인합니다.


5. WSLg (Windows 11+)

 Windows 11에서는 Linux GUI 프로그램을 실행할 수 있습니다. 각 그래픽카드 제조사 홈페이지에서 WSLg 전용 드라이버를 다운로드 받으면 GPU 가속을 지원합니다. WSLg를 테스트 해봅시다.

    a. sudo apt install gedit -y

    b. gedit

Linux App을 Windows App처럼 사용할 수 있습니다. 보통 GPU 가속이 필요한 작업은 듀얼 부팅 환경을 구성하여야 했지만 간단한 작업의 경우 Windows에서도 수행할 수 있게 되었습니다.


6. Visual Studio Code와 연동

 WSL은 Windows의 파일 시스템 내에서 작업하거나, 직접 접근하기 매우 쉽습니다. WSL은 일상적인 사용은 Windows 환경에서, 개발은 Linux 환경에서 하는 사용자에게 대단히 유리합니다. WSL과 VS Code는 쉽게 연동되며 Linux 환경에서 Windows 환경으로, Windows 환경에서 Linux 환경으로 쉽게 전환될 수 있게 합니다.


Windows에 VS Code가 설치되어 있다는 가정 하에 아주 간단히 설치가 가능합니다.

    a. VS Code에서 Remote - WSL 확장을 설치합니다.

    b. bash에서 다음과 같이 타이핑합니다. code .


ssh 연결을 위해 identity file을 관리하고, IP 주소와 사용자 이름을 타이핑 하는 것 보다 훨씬 더 편합니다.


7. 파일 시스템 권한

Windows 유저가 어떤 파일을 점유하고 있다면 해당 파일은 root 권한으로도 삭제 할 수 없습니다. 예를 들어 /mnt/c/foo.zip을 점유하고 있다면 sudo rm -f /mnt/c/foo.zip을 수행하더라도 permission denied가 뜨는 진귀한 장면을 볼 수 있습니다.