Windows 10 초기 개발자 모드에서 bash 를 지원하던게 지금의 WSL 까지 발전하게 되었고, 이제는 간편하게 리눅스 바이너리를 테스트해보는 것을 넘어서서 리눅스 기반 앱들을 개발할 수도 있을 만큼 제법 쓸만해진 것 같다. 로컬 디스크가 기본적으로 마운트 돼 있고 대부분의 장치 설정이 호스트 윈도우 머신과 같게 돼 있어 환경 구축하는데 크게 손볼 것도 없는 데다가 부팅 속도도 정말 빠르다. Hyper-V 에서 구동된다고 하니 하드웨어 가상화 VM과 기본적인 개념은 같겠지만 경량화된 구조를 갖고 있다고 한다.
WSL; Windows Subsystem for Linux
WSL 이전에는 개인 프로젝트들의 개발, 테스트, 서비스 전부 운영 머신에서 이뤄졌었는데, WSL을 사용하게 되면서부터는 별도의 환경 없이 Windows 위에서 Linux 앱 프로젝트를 개발함으로써 환경을 분리할 수 있게 된 것 같고 진짜 잘 쓰고 있다. 새로운 데스크탑을 추가하면서 새 장비에도 WSL을 설치하게 되었는데 혹시나 다음번에 다시 쓸일이 있을까 하여 설치 과정을 기록해둔다.
WSL 설치
설치 방법은 간단하다. 개발자 모드를 활성화할 필요도 없고 Microsoft 계정에 로그인할 필요도 없다.
Microsoft Store 에서
WSL 을 검색한 뒤
원하는 리눅스 배포판을 골라
설치 버튼을 눌러주면 된다.
실행 버튼을 누르면 다음과 같은 에러와 WSL 선택 요소를 활성화 한 뒤 다시 시도하라는 문구가 나오는데
이런 식으로 몇가지 손 댈 부분이 있긴 하지만, 알려주는 문서들 따라가는게 번거로와도 어쨋든 시키는대로 다 따라하면 됨, 친절하게 디렉션을 주기때문에 따라하기만 하면 된다.
어쨋든 https://aka.ms/wslinstall 페이지에서 시키는 대로 Powershell 을 관리자 권한으로 열어 다음 명령어를 수행하면 WSL 선택 요소가 활성화 된다.
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
여기서 [Y] 입력해주고 재부팅이 되고 나서 Ubuntu를 다시 실행한 뒤에 username 과 password 설정을 해주면 기본적인 WSL 설치는 끝이 난다.
혹시 관리자 권한으로 실행하라는 문구를 나처럼 주의깊게 보지 않고 그냥 실행한 경우 다음과 같이 권한 상승이 필요하다는 경고가 발생하니 꼭 관리자 권한으로 실행해야 한다.
Enable-WindowsOptionalFeature : 요청한 작업을 수행하려면 권한 상승이 필요합니다.
ssh 서버 설정 및 구동
WSL로 설치한 Ubuntu를 제어하기 위해서는 기본 Ubuntu 앱을 이용할 수도 있겠지만, 이 앱 베이스가 CMD 이어서 갖고 놀기에 그닥 좋지는 않다. 로컬 환경이지만 굳이 ssh 접속을 해야한다는게 어찌보면 웃기기도 한데, 여러 ssh 클라이언트를 그동안 이용해왔던 것에 익숙해져버렸기 때문에 굳이 sshd 를 구동하고 ssh 클라이언트를 통해 접속하고자 한다.
ssh server 는 기본적으로 설치 돼 있으나 구동이 안되고 있을 뿐이다. 그렇지만 바로 실행할 수는 없고 몇가지 설정을 해주어야 하는데,
요즘은 Windows 에서도 ssh가 구동되기 때문에 WSL 에서는 호스트 ssh 가 사용하는 22번 포트를 중복해서 사용할 수가 없어 Listener 포트를 바꿔줘야 하고, 또 패스워드를 통해 로그인할 수 있도록 패스워드 인증을 활성화해야 한다.
sudo vim /etc/ssh/sshd_config
파일을 열어 아래와 같이 Port 와 PasswordAuthentication 항목의 값을 바꿔준 뒤
Port 4422
PasswordAuthentication yes
sudo service ssh start
명령으로 ssh 데몬을 실행해주면 클라이언트를 이용해 WSL에 접속할 수 있다.
* Starting OpenBSD Secure Shell server sshd
sshd: no hostkeys available -- exiting.
위와 같은 에러가 발생하면
sudo ssh-keygen -A
명령으로 기본 키파일 경로에 hostkey 를 생성해준다.
#sudo ssh-keygen -A
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
WSL 재부팅 방법
WSL 시스템은 linux sh 환경의 shutdown 명령 등으로는 제대로 재부팅이 되지 않는다.
PowerShell에서 다음과 같이 실행 및 종료를 명령하거나
LxssManager 종료
net stop LxssManager
LxssManager 실행
net start LxssManager
Windows 서비스에서 제어할 수 있다.