실제 Ubuntu 서버와 개발을 위해서 Windows 에서도 이와 유사한 개발 환경을 설치할 필요가 있다. 그 동안 Windows 상에서 Cygwin 을 많이 사용했고, 최근에서는 Microsoft 에서 WSL (Windows Subsystem for Linux)를 제공하고 있어 설치해보기로 한다. Cygwin은 그동안 많은 사용자들이 사용하고 있어 안정적이고 대부분의 리눅스 기능을 이미 지원하고 있고, WSL은 최근에 개발된 것이라 나름 기능이 powerful 할 것으로 예상된다.
하고자 하는 것:
- Windows 10 에서 bash 셀 실행하고 우분투 명령어 (e.g. ls) 사용 및 개발 tool (gcc, python) 설치하기
- 우분투PC에서 gcc 로 빌드한 실행파일을 Windows 10 의 WSL에서 실행하기
1. Cygwin 과 WSL 비교
Cygwin | WSL (Windows Subsystem for Linux) |
Window 에서 Cygwin 설치, Linux 용 실행 파일을 EXE/DLL 형식으로 설치 |
우분투 커널을 Virtual Machine으로 동작 우분투의 파일 시스템을 그대로 mount 하는 것으로 보인다. |
우분투 실행 파일 실행 불가, Cygwin 환경에서 빌드한 실행 파일만 실행가능 |
우분투 실행 파일 실행 가능, Cygwin 환경에서 빌드한 실행 파일 실행 불가 |
Cygwin에서 빌드한 실행 파일을 다른 PC에서 설치하는 경우 Cygwin DLL 필수 | WSL 에서 빌드한 실행파일을 다른 PC 설치하는 경우 WSL 환경 필요 |
회사 내부 보안때문에 Windows 10 MS store를 막아 놓아 WSL 설치가 불가능 경우 |
WSL은 Microsoft Document에 의하면 WSL 아래와 같이 소개되어 있다.
Linux용 Windows 하위 시스템을 사용하면 개발자가 가상 머신의 오버헤드 없이 대부분의 명령줄 도구, 유틸리티 및 애플리케이션이 포함된 수정되지 않은 GNU/Linux 환경을 Windows에서 직접 실행할 수 있습니다.
다음을 수행할 수 있습니다.
1. Microsoft Store에서 즐겨 찾는 GNU/Linux 배포를 선택합니다.
2. grep, sed, awk 또는 다른 ELF-64 이진 파일과 같은 일반적인 무료 명령줄 소프트웨어를 실행합니다.
3. 다음을 포함하여 Bash 셸 스크립트 및 GNU/Linux 명령줄 애플리케이션을 실행합니다.
- 도구: vim, emacs, tmux
- 언어: Javascript/node.js, Ruby, Python, C/C++, C# 및 F#, Rust, Go 등
- 서비스: sshd, MySQL, Apache, lighttpd
4. 자체 GNU/Linux 배포 패키지 관리자를 사용하여 추가 소프트웨어를 설치합니다.
5. Unix와 같은 명령줄 셸을 사용하여 Windows 애플리케이션을 호출합니다.
6. Windows에서 GNU/Linux 애플리케이션을 호출합니다.
WSL으로도 불가능한 것은 아래 같다. 커널 드라이버 자체는 업데이트 불가능하고, OPEN GL App은 구동이 안 되는 것으로 보인다.
1. Docker와 같은 컨테이너류와 가상화 기술은 지원하지 않을것으로 보인다. WSL 조차도 실시간 상호 연동 가능한 가벼운 가상 머신 정도로 생각할 수 있겠다(Docker 기술과 가장 유사하다).
2. 커널 드라이브, 커널 컴파일 및 업데이트는 불가능하다.
3. 그 밖의 OpenGL, SDL등의 멀티미디어 기능이 불가능하다.
☆ WSL 참고 사이트:
https://docs.microsoft.com/ko-kr/windows/wsl/about?context=/windows/dev-environment/dev-environment-context
https://webdir.tistory.com/540
2. Cygwin 설치 방법
Cygwin 사이트 (https://cygwin.com ) 에서 setup-x86_64.exe 을 다운로드하여서 실행하자. 최근 4GB RAM 이상의 PC인 경우에는 64bit 버전을 추전 드립니다.
Setup 옵션은 1) Install from Internet 설정하고, Next 누른다음 2) Cygwin64 폴더를 지정한다. ( 시스템 속성 > 고급 > 환경변수 > Path 에 추가하면 편하다.)
개발에 필요한 package를 추가 선택한다. 예를 들어 gcc 가 필요한 경우 gcc 차아서 gcc-g++ 를 추가하면 된다.
Cygwin 설치가 끝나면 /cygwin/bin 에 필요한 파일이 설치가되어 있다. Windows PATH가 지정되어 있다면 cmd 창에서 linux 명령어 실행이 가능하다. 추후 package를 추가/삭제 업데이트를 위해서 setup-x86_64.exe 을 Cygwin 설치 폴더에 같이 저장하는 것이 편하다.
3. WSL (Windows Subsystem Linux) 설치 방법
아래와 같이 '제어판 > 프로그램 > 프로그램 및 기능 - Windows 기능 켜기/끄기'를 선택하고 Linux용 Windows 하위 시스템의 체크박스를 활성화하면 재부팅이 되면서 기능 설치가 이루어진다
Windows 가상 머신 활성화
또는 Powershell에서 아래 command를 사용해서 활성화할 수 있다.
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
☆ WSL 설치는 Microsoft 홈페이지에 https://docs.microsoft.com/ko-kr/windows/wsl/install-win10 에 설명되어 있습니다.
☆ WSL 설치는 Window 10 Home 버전에 안되고 Pro 버전부터 된다는 글이 있었는데, 최신 Windos 10 Home 버전(1909)에서 설치해보니 잘된다.
3.1 Ubuntu 이미지 다운로드(Microsoft Store)
Microsoft Store 에서 Ubuntu 배포판을 다운로드한다. (Ubunt 20.04 설치). Mirosoft Store가 서버가 너무 느리다. (1시간 이상). 이 경우 Manual Microsoft 사이트나 Ubuntu 사이트에서는 받는 것이 매우 빠르다 (10분 이내)
3.2. Ubuntu 이미지 다운로드(Manual-Microsoft 사이트 활용)
Microsoft store가 접속이 불가능한 경우 아래와 같이 Manual 로 다운로드 가능하다. Microsoft Store 보다는 다운로드 속도가 빠르기 때문에 Manual download 가 기다리는 시간을 줄일 수 있다.
#Power Shell 에서 실행
# 우분투 이미지 다운로드
Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile Ubuntu1804.appx -UseBasicParsing
# 또는 curl 로 다운로드
curl.exe -L -o Ubuntu1804.appx https://aka.ms/wsl-ubuntu-1804
#Install
Add-AppxPackage .\Ubuntu1804.appx
☆ 참고 사이트) https://docs.microsoft.com/ko-kr/windows/wsl/install-manual
3.3. Ubuntu 이미지 다운로드(Manual - Ubuntu 사이트 활용)
회사 보안으로 Microsoft 사이트가 접속이 불가능 한 경우 Ubuntu 사이트에서 직접 다운로드 가능하다. https://cloud-images.ubuntu.com/releases/focal/release 에서 ubuntu-20.04-server-cloudimg-amd64-wsl.rootfs.tar.gz 을 다운로드 한다.
Power shell 에서 아래 command 를 실행한다.
# cloud image 설치
wsl --import Ubuntu-20.04 ubuntu-20.04-server-cloudimg-amd64-wsl.rootfs.tar.gz
#wsl list 확인
wsl --list
#wsl 실행
wsl -d Ubuntu_20.04
설치 후에는 바탕화면에서 C:\Windows\System32\cmd.exe /C "wsl -d Ubuntu-20.04 명령어로 바로가기를 만들면 편하게 사용 가능하다.
4. Windows 에서 Ubuntu command 확인
Window 우분투를 실행하면 bash를 통해서 git 설치나 gcc 설치 가능하다. 실제 Ubuntu에서 빌드한 실행파일을 WSL 상에서도 실행되는지는 확인 예정이다. 진짜 잘된다. Ubuntu 12.04 버전에서 gcc로 컴파일한 실행파일을 Windows 10의 WSL Ubuntu18.04 에서 실행해보니 동작 잘된다. 하지만 sshfs 로 원격 서버에 연결을 해보니 fuse 의 insmode 를 실패한다. WSL 은 파일 시스템 관련해서는 지원하지 않는 것으로 보인다.
$ modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.0-43-Microsoft/modules.dep.bin'
$ modprobe: FATAL: Module fuse not found in directory /lib/modules/4.4.0-43-Microsoft
5. WSL 설치 후 우분투 파일 시스템 찾기
Micrsoft Store 에서 WSL 용 Ubuntu 20.04 버전을 설치하고 파일 시스템을 찾아보니 계정 Profile 의 Packages 하위에서 우분트 파일들이 설치된다. 실제 우분투의 100% 동일하다. 만일 Manual 설치했다면 ubuntu-20.04-server-cloudimg-amd64-wsl.rootfs.tar.gz 파일과 같은 폴더위치에 압축이 풀려 있고 그 폴더가 Root 파일시스템 위치이다. WSL 1.0 에서는 Kernel 자체를 수정이 불가하다고 하니, root 파일 시스템은 임의로 수정하면 안 될 것이다.
C:\Users\*****\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs
그리고, C 드라이브와 D 드라이브는 /mnt/c 와 /mnt/d 로 mount 하기 때문에 Windows 파일과 공용으로 사용할 수 있다.
# C 드라이브
/mnt/c
#D 드라이브
/mnt/d
6. WSL 2.0
WSL 2.0 정식은 아직배포가 안되었고, WSL 1.0 보다 Full 커널을 사용하고, file system 성능향상, 호환성이 좋아졌다고 하네요. 공식 배포 후 확인할 예정입니다. https://docs.microsoft.com/ko-kr/windows/wsl/compare-versions
<관련 글>
1. Windows 10 과 Ubuntu 20.4 설치하기
2. Windows 10 에서 Cygwin 또는 WSL 설치
3. Ubuntu 에서 개발 환경 설치
4. Window 와 Ubuntu 파일 공유하기
5. Windows 10 Insider Preview 설치 (WSL 2.0 설치)
6. WSL 2.0 으로 가능한 기능 확인
댓글