WSL 2 정식 버전에 맞게 WSL 2(Windows Subsystem For Linux 2) 정식 버전 사용하기 에 새로 작성했으니 이 문서대신 링크한 문서를 참고하세요.


TL;DR

WSL 은 Windows의 단점이던 Ruby,Python, PHP, NodeJs 등의 "개발 환경 구성이 어렵고 불편함"을 획기적으로 개선한 제품입니다.


특히 OSX 의 패키지 매니저인 brew 에 비해 진짜 ubuntu 가 탑재되므로 실제 운영 환경(서버에 우분투를 사용할 경우)과 유사한 개발 환경을 구성할 수 있다는 장점이 있었지만 느린 IO 속도, Linux kernel system call 이 다 호환되지 않아서 일부 app(nmap 등) 들은 실행되지 않는 등의 단점이 있었습니다.


WSL 2 는 기존 WSL 의 아키텍처를 대폭 수정하여 File IO 성능 향상, 빠른 부팅 속도, Kernel System Call 호환성 개선등 기존 사용자의 주요 요구 사항을 반영하였습니다.


Pro 이상의 Windows 가 필요하던 WSL 1 과 달리 WSL 2는 Windows Home Edition 에서도 동작한다고 합니다.


현재는 Insider Preview 가입자만 사용할 수 있으므로 권장할 단계는 아니지만 정식 버전이 나오면 개발자분들은 꼭 업그레이드하는 게 좋습니다.


WSL 활성화는 powershelll 에서 다음 명령어로 가상 머신 컴포넌트를 활성화 한 후에 기존 WSL 1을 2로 변환하면 됩니다.

Windows 가상 머신 활성화

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
CODE

WSL 2 로 변환

wsl --set-version Ubuntu 2
CODE



WSL 2 설치

Insider Program 참여 & Build 18917 설치

WSL2는 탈퇴해도 다음 퍼블릭 릴리스가 나올때까지는 프리뷰 상태에서 사용해야 하며 시스템이 불안정해 질 수 있으므로 개발 장비가 아니면 설치하지 마세요.!

인사이더 프리뷰 프로그램 탈퇴시 Windows Insider Preview 탈퇴하기 를 참고하세요.



현재 WSL2 는 안정 버전이 아니므로 "Windows 참가자 프로그램"에 참여한 후에 "참가자 설정 선택" 을 초기로 해야 받을수 있습니다. 

초기로 하면 이후보다 더욱 불안정하므로 신중하게 결정하세요.



Build 18917 을 다운로드 받았다면 재시작을 해주면 됩니다.


설치가 정상적으로 되었다면 윈도 버전이 18917 이어야 합니다. cmd.exe 를 실행한 후에 ver 명령을 실행하면 현재 버전을 확인할 수 있습니다.


Virtual Machine Platform 컴포넌트 활성화

WSL 2는 경량화된 Hyper-V 를 통해 구동되므로 "가상 머신 플랫폼" 을 활성화해야 합니다.  관리자 권한으로 powershell 을 열고 아래 명령어를 실행합니다.

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
CODE

WSL 2로 전환

기존에 ubuntu 나 SUSE disto를 설치했다면 wsl 2 로 전환할 수 있습니다.

먼저 현재 설치된 disto 목록을 보기 위해 다음 명령을 실행합니다. 

결과는 PC 마다 다를 수 있습니다.



WSL 1 을 WSL 2로 전환하기 위해서는 다음과 같이 disto 이름을 입력하고 뒤에 2 옵션을 지정합니다.

wsl --set-version <Distro> 2
CODE


저는 우분투를 사용하므로 다음 명령어로 기존에 설치한 Ubuntu 를 WSL 2로 변환했습니다.

wsl --set-version Ubuntu 2
CODE

Distro 이름이 잘못 됐을 경우 "제공 된 이름 사용 하 여 배포 하지 않습니다." 와 같은 오류가 발생합니다. 예로 Ubuntu-18.04 를 사용하는 경우 Distro 이름에 "Ubuntu-18.04" 를 넣어야 합니다.



새로 리눅스 배포본을 설치할 경우 WSL 2를 기본으로 하려면 다음 명령어를 입력합니다.

wsl --set-default-version 2
CODE

정상적으로 전환이 되면 다음과 같이 "변환이 완료되었습니다" 라는 메시지가 출력됩니다.


다시 한 번 확인해 보려면 다음 명령어를 실행하면 disto 목록과 버전을 확인할 수 있습니다.

wsl -l -v
CODE


WSL 2 시작하기

wsl 을 시작하려면 wsl.exe 를 disto 명과 함께 실행하면 되며 distro 를 생략하면 기본 distro 가 실행되며 바로 bash 쉘 프롬프트로 변경됩니다.

wsl ubuntu
CODE


상태를 보기 위해 wsl.exe -l -v 를 실행하면 ubuntu 가 실행된 것을 확인할 수 있습니다.


위의 예제는 Ubuntu 에서 실행했으며 우분투이므로 wsl.exe 처럼 확장자를 명시하지 않으면  다음과 같은 에러가 발생합니다.

Command 'wsl' not found, but can be installed with:

sudo apt install wsl



apt update

WSL 1은 apt 명령어가 너무 느려서 update 를 잘 하지 않았습니다. WSL 2는 IO 가 많이 좋아졌다고 하니 테스트를 겸해서 ubuntu 를 업데이트 해 보았습니다.

$ sudo apt update
$ sudo apt upgrade
BASH

화면 캡춰는 못 했지만 약 400개의 패키지 업데이트가 있었는데 꽤 빠른 속도로 apt 가 패키지를 다운로드 받습니다


예전에는 IO 가 느려서 인지 패키지를 받은후에 시스템에 적용하는게 꽤 오래 걸렸는데 400 개의 패키지인데 꽤 빠르게 동작합니다.


disto 재부팅

업데이트후에 반영을 위해 shutdown 명령어를 실행해 보았습니다.

$ sudo shutdown -r now

System has not been booted with systemd as init system (PID 1). Can't operate.
BASH

위와 같은 에러 메시지가 나오고 재부팅이 안 되서 찾아 보니  wsl --shutdown 명령어로 리눅스를 재부팅할 수 있습니다.

wsl --shutdown ubuntu
CODE


Network 설정

WSL 1은 ethernet 을 host 와 공유했습니다. 즉 WSL 1 에 서버를 띄우면 윈도우에서는 127.0.0.1 으로 접속이 가능했습니다.


WSL 2 는 이더넷이 분리되어 동적으로 IP 가 할당되므로 ssh 로 연결하려면 WSL 내 리눅스에서 ip 를 얻은 후에  IP 로 접속해야 합니다.

MS에서는 빠른 시간안에 WSL 1처럼 localhost 를 공유할 수 있게 할 예정이라고 합니다. (https://devblogs.microsoft.com/commandline/wsl-2-is-now-available-in-windows-insiders/)

WSL 내 IP 확인

$ ip addr show eth0

172.17.27.242
CODE

ssh 로 연결

$ ssh 172.17.27.242
CODE


Trouble Shooting

설치하면서 몇 가지 시행 착오를 겪어서 github gist 에 정리중입니다.

WSL2: installation got Error: 0x8007001f


error code 4294967295 

연결된 구성원으로부터 응답이 없어 연결하지 못했거나, 호스트로부터 응답이 없어 연결이 끊어졌습니다. 4294967295
CODE


Windows 서비스 목록에서 LxssManager 가 구동되어 있는지 확인하고 재시작합니다.


같이 보기

참고