본문 바로가기
일상,취미

[TIL 40일차] WSL 사용기

by 진득한진드기 2024. 8. 29.

window에서는 linux 친화적인 코드는 프레임 워크는 돌아가지 않는다.

 

보통 linux의 POSIX 계열 함수가 들어가있으면 수행이 안되는 경우가 있는데

 

이는 종속성의 문제가 있다.

 

그래서 windows에서 docker를 사용할 때도 보통 docker desktop을 사용하는데 눈에는 안보이지만 자연스럽게 백그라운드에서 돌아갈 wsl2가 깔린다.

 

hyper-v 기반으로 돌아가기에 활성화를 해주는게 먼저이다.

 

WSL2는 Hyper-V를 사용하여 Linux 커널을 실행하는 경량 가상 머신을 생성하고 관리하기에 이 hyper-v를 활성화 하지 않으면 가상 머신기반 프로그램은 사용하기 어렵다.

 

진부한 이야기를 하자면 wsl2은 가상 머신 내에 하나의 커널을 사용한다. 그래서 아무리 wsl --install -d <버전> 식으로 다운 받아도 커널은 하나를 이용한다.

 

생각보다 사용해보면 엄청 호환성이 좋은걸 체감할 수 있는데 생각보다 신기한건 Linux와 windows의 PATH가 상호 운용된다는 것이다.

 

근데 대신 밀접하게 하드웨어 자원을 공유하기에 wsl의 VM에서 직접적으로 RAM의 자원을 사용하기에 메모리 점유율이 높게 가져 갈 수 있어 잘 조정해서 사용해야한다.

 

그러면 설치하는 방법을 한번 봐보자

 

윈도우에서 powershell을 사용하든 bat를 사용하든 한줄씩 입력하든 상관은없지만 처음에는 

 

WSL의 기능을 활성화 하는 키워드 

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

Virtual machine Platform 기능 활성화

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

 

Hypervisor 자동 시작 설정 키워드

bcdedit /set hypervisorlaunchtype auto

 

 

이후에 내가 원하는 버전의 Ubuntu를 다운 받는다면

 

설치

wsl --install -d Ubuntu(버전)

 

식으로 설치하면된다.

 

가끔 막 만지다가 wsl 자체를 삭제하는 사람도 있는데 Microsoft 공개 girhub에 릴리스 버전이 나눠져 있으니 골라서 다운 받으면 된다.

 

설치가 완료되면 windows 운영체제에 데이터를 갱신하기 위해 재시작을 해줘야하는데 

 

재시작

shutdown -r - t 3

 

이런식으로 재시작하면 된다.

 

이후키고 난후에 wsl을 들어가게되면 이름과 비밀번호를 설정해줘야하는데 직접 적어주는게 좋다. 자동으로 해보겠다고 편하게 만들 수 있으면 댓글로 알려줬으면 한다.

 

내가 자동을 해보겠다고 프로세스 탐색기 타이머로 실행하고 넣어봤는데 탐색되면 프로세스 파이프로 값 넣어봤는데 오류나고 데이터 안들어가더라..... 진짜 한 사람 있으면 꼭 알려줬으면 좋겠다.

 

야매로 자동으로 넣겠다고 echo "123"| wsl --install -d Ubuntu 해봤자 유저 이름에 관한 에러가 날 것이다.

 

이번에 도커도 가볍게 사용해보겠다고 windows에서 뒤지게 무거운 docker desktop안쓰고 그냥 wsl2 내부에 docker를 설치해서 포팅해서 쓸생각이면 안하는게 좋다. 

 

해보니까 어려운건 아닌데 상당히 귀찮고 결국에 wsl이 백그라운드에서 열린 상태에서 돌아야해서 솔직히 좋은지 모르겠다. 물론 호환성은 더 좋겠지만..... 방화벽 설정도 해줘야하고 windows에는 docker-cli도 따로 깔아줘야해서 굉장히 귀찮다.

 

아 그리고 혹시 해매는 사람 있을까봐 적어놓는데 첫 시작하면 Ubuntu에 보통 init 프로세스 기반의 동기식으로 돌아가는 버전있을 것이다.

 

이는 systemctl 이 실행이 안될거다. systemd 방식으로 돌아가지 않아서 그런건데.....

 

지금 정확히 기억은 안나는데 아마 /etc/wls.conf 에서 [boot] systemd=true 로 바꿔서 부팅시 systemd 로 부팅해줘야한다.

 

그냥 exit로 나가는 것이 아니라 wsl인스턴스 프로그램 자체를 재시작해줘야하므로 --terminate나 shutdown해줘야할 것이다.

 

생각보다 관련 한국어자료가 많이 없어서 이거를 보고 삽질을 덜 했으면 하는 바람이다. 

 

systemd가 무조건 좋아서 사용하는 것 보다는 우리가 사용하는 방식에 익숙해서 사용하는게 맞는거니까......

 

뭐.... 실제로 그냥 wsl을 껐다 키는것 자체가 엄청 빠르긴한데 systemd로 부팅설정을 하고 자주 껐다키면 VM 시작 시간이 느려지거나, 메모리가 적은 시스템에서는 메모리 사용이 과도할 수 있을 것이다.