window에서는 linux 친화적인 코드는 프레임 워크는 돌아가지 않는다.
보통 linux의 POSIX 계열 함수가 들어가있으면 수행이 안되는 경우가 있는데
이는 종속성의 문제가 있다.
그래서 windows에서 docker를 사용할 때도 보통 docker desktop을 사용하는데 눈에는 안보이지만 자연스럽게 백그라운드에서 돌아갈 wsl2가 깔린다.
보통 windows에서 가상화 서비스를 이용할 떄는 호스트 컴퓨터에서 여러개의 가상화 머신을 띄우는게 가능하고 커널 명령을 직접적으로 포팅하는 하이퍼 바이저 형식을 사용한다.
MS에서는 hyper-v 라는 가상화 기술을 지원하기에 이 hyper-v 를 활성화를 해주는게 먼저이다.
왜냐하면 우리가 직접 사용할 WSL2는 Hyper-V를 사용하여 Linux 커널을 실행하는 경량 가상 머신을 생성하고 이를 관리해야하기에 hyper-v를 활성화 하지 않으면 가상 머신기반 프로그램의 사용이 어려워진다.
진부한 이야기를 더 하자면 wsl2 또한 설명했듯이 가상 머신 내에 하나의 커널을 사용한다. 그래서 아무리 wsl --install -d <버전> 식으로 다운 받아도 커널은 하나를 이용한다.
하나의 커널이 windows 운영체제와 일하는 것이기에 병목현상이 발생 할 수 있다.
근데 막상 생각보다 사용해보면 엄청 호환성이 좋은걸 체감할 수 있는데 생각보다 신기한건 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 로 config 설정을 바꿔서 부팅시 systemd 로 부팅해줘야한다.
그냥 exit로 나가는 것이 아니라 wsl인스턴스 프로그램 자체를 재시작해줘야하므로 --terminate나 shutdown해줘야할 것이다.
생각보다 관련 한국어 자료가 많이 없어서 이거를 보고 삽질을 덜 했으면 하는 바람이다.
systemd가 무조건 좋아서 사용하는 것 보다는 우리가 사용하는 방식에 익숙해서 사용하는게 맞는거니까......
뭐.... 실제로 그냥 wsl을 껐다 키는것 자체가 엄청 빠르긴한데 systemd로 부팅설정을 하고 자주 껐다키면 설정 값 자체가 커서 VM 시작 시간이 느려지거나, 메모리가 적은 시스템에서는 메모리 사용이 과도할 수 있을 것이다.
'일상,취미' 카테고리의 다른 글
[TIL 43일차] 리눅스 파일 시스템 관련 명령어 (0) | 2024.09.12 |
---|---|
[TIL 37일차] 비동기 (0) | 2024.08.25 |
[TIL 36일차] 쓰레드 프로그래밍 (0) | 2024.08.15 |
[TIL 35일차] 운영체제의 가상화 (0) | 2024.08.14 |
[TIL 34일차] linux -> window 포팅에 대한 나의 생각 , 지난 한 주를 돌아보며 (0) | 2024.08.10 |