2. Windows Subsystem for Linux(WSL)
WSL은 Windows 10 Mobile에서 Android를 실행하는 "Project Astria"에
서 파생했다고 한다. Astria는 Android 호환 환경을 만들어 Windows 10
Mobile에서 Android 앱을 그대로 이용 가능하게 하는 "브리지"프로젝트였
다.
그러나 Astria는 2016년 2월 공식 중단되었다.
Astria 때문에 마이크로 소프트는 Linux 호환 환경을 만들 필요가 있으며 이
것은 ARM 프로세서를 사용하여 Windows 10 Mobile에서도 작동할 필요가
있었다.
이 때문에 마이크로 소프트가 Windows 10에 도입한 것이 pico 프로세스로
불리는 것이다.
3. 이것은 마이크로소프트 리서치에서 "Drawbridge"으로 개발된 기술의 일부.
pico 프로세스는 1종의 컨테이너로 특정 서브 시스템에 의존하지 않는 프로
세스이다.
보통의 Win32 프로세스와 비교하면 Pico 프로세스는 “투명한 프로세스"라
고 해도 좋다. 다만 어디까지나 NT 커널이 관리하는 프로세스로 Win32 프
로세스처럼 메모리 등이 관리되고 스케줄링 된다.
WSL의 크기는 1MB 미만이라고 한다
5. 차이는 Windows 서브 시스템 등,
어느 서브 시스템용으로도 초기화
되지 않는 점이다.
Drawbridge 아이디어는 이 투명한
Pico 프로세스 속에 OS의 커널에
상당하는 기능을 라이브러리(혹은
DLL)를 마련하여 과거의 Windows
호환 환경을 실현하는 것이었다.
이 라이브러리화 된 OS(혹은 커널)
는 Pico 프로세스가 가진 “Pal”이라
고 불리는 모듈을 통해서 NT 커널
측에 실제로 처리를 의뢰한다.
https://www.microsoft.com/en-
us/research/project/drawbridge/
6. Project Astria로 가상 머신이 아닌 컨테이너를 이용한 것은 PC에 비하면 성
능이 약하고 메모리 등의 자원이 작은 32비트 ARM 프로세서(Windows 10
Mobile은 아직 ARM의 64비트 환경에 비대응)에서 가상 머신을 움직이는
것은 퍼포먼스 등의 점에서 문제가 있었다고 생각된다.
여기서 사용된 것이 마이크로 소프트 리서치에서 개발된 Drawbridge 였던
셈이다.
7. WSL은 커널 모드 측에 Linux를 지원하기 위한 드라이버(LXSS.SYS와
LXCORE.SYS)를 준비하고 Linux 커널 API를 처리한다.
원래 Windows NT는 POSIX, UNIX 서브 시스템 등을 지원하기 위한 대/소문
자를 구분하는 파일 시스템의 기능이나 UNIX 고유 folk(실행 중인 프로세스
의 사본을 만들어 양쪽을 재개하여 한 프로세스에서 또 다른 프로세스를 생
성하는 API)에 해당하는 기능을 가지고 있었다.
8. 이들은 Win32 API에서는 불필요해서 사용되지 않은 상황에서 커널 자체에
는 기능이 남아 있었던 셈이다.
종래의 POSIX 서브 시스템이나 SUA는 실행 파일 형식은 Windows 독자적인
것을 이용했다(당시는 UNIX 시스템 간의 바이너리 호환성은 없었다. 동일
CPU 아키텍처의 바이너리 호환성이 가능하게 되는 것은 Linux부터지만 현
재도 완전한 바이너리 호환성이 있는 것은 아니다).
이 때문에 실제로는 Windows 서브 시스템 측에 의존했던 부분이 있었다.
WSL이 다른 점 중 하나는 실행 파일 형식은 Ubuntu Linux의 바이너리 그대
로 라는 점이다.
9. bash.exe는 순수한 Windows 애플리케이션에서 보통의 콘솔 응용 소프트웨
어로서 동작하며 Windows측에 있는 Linux Session Manager 서비스와 통
신을 실시한다.
Linux Session Manager는 커널 모드에 있는 LXSS.SYS, LXCORE.SYS를 호출.
LXSS/LXCORE는 Windows 커널 기능 등을 써서 pico 프로세스를 생성한다.
10. 여기에는 Linux 호환 환경이 조성되고, 보통의 Linux 구조를 사용하여 init 프
로세스가 실행되면서 거기서 bash를 기동한다.
bash는 쉘로 애플리케이션 기동 등은 Linux API를 호출하지만 이것들은
LXSS/LXCORE 나 Windows 커널 기능을 병용해서 처리된다.
23. 한글에서 영문으로 바꾸기
locale
locale -a
sudo update-locale LANG=en_US.UTF8
cat /etc/default/locale
현재의 locale 설정을 출력
사용할 수 있는 locale 리스트 출력
영문으로 변경
locale 출력
27. $ sudo apt-get install terminator
$ terminator
한글 깨어짐 해결
$ sudo apt-get install unifont
한글 입력
$ sudo apt install uim uim-xim uim-anthy
$ export XMODIFIERS="@im=uim"
$ export GTK_IM_MODULE=uim
$ export QT_IM_MODULE=uim
linux chrome 한글 띄어쓰기 버그 수정 -1 uim설치
http://springofmylife.tistory.com/122
28. 벨 소리 안나게 하기
echo 'set bell-style none' >>~/.inputrc
.inputrc는 bash의 행 읽기 기능(Readline)을 제어하는 파일이다.
29. Windows 네이티브 SSH 서버 정지하기
WSL를 위해 개발자 모드를 유효하게 하면 자동적으로 Windows에서 SSH서
버 서비스(Windows기본 SSH 서버 서비스)가 동작한다.
SSH는 "Secure SHell"의 약어로, 암호화된 통신에 의한 네트워크 호스트에 리
모트 로그인 하여 쉘을 이용하는 기능이다.
접속하면 CMD.EXE가 쉘로 구동한다.
SSH은 접속 시에 인증을 실시하여 통신은 암호화되고 있어 비교적 안전한 프
로토콜이지만, 내부 LAN에 접속한 채 쓴다면 문제가 없지만 외부 연결이 된
PC라면 위험하다.
30. 이 SSH 서비스를 동작시키지 않으려면 "서비스를 중지한다“ "방화벽의 SSH
관련 설정을 금지한다"의 2가지 설정이 필요하다.
SSH 서비스를 막으려면 "시작"→"모든 앱"→"Windows 관리 툴"→"서비스"를
열어 "SSH"에서 비롯된 2개의 서비스
SSH Server Broker
SSH Server Proxy
2개의 서비스를 정지하고 스타트 업 종류를 무효화 한다.
31. 다음으로 제어판에서 「Windows 방화벽」을 열고、좌측의 트리 표시에서 「수
신 규칙」을 선택, 우측의 리스트에서 「SSH Server Proxy Service」를 선택하고,
우 클릭 메뉴에서 「규칙 무효화」를 선택한다.
32. Setting up a Shiny Development
Environment within Linux on Windows 10
https://www.hanselman.com/blog/SettingUpAShinyDevelopmentEnvironmentWithinLinuxOnWindows10.aspx
ANSI escape code와 VT시퀸스 지원
vim, emacs, Midnight Commander, tmux, htop
등의 TUI 애플리케이션의 리치한 UI를 그릴 수
있다.
35. SSH 설정
# service ssh start
# update-rc.d ssh defaults
# update-rc.d -f ssh enable 2 3 4 5
# update-rc.d ssh remove
# service ssh status
36.
37.
38. Bash on Windows에 Ubuntu 외 Fedora,
openSUSE도 대응.
Windows Store에서 쉽게 도입 가능하게.
- Build 2017
https://blogs.msdn.microsoft.com/commandline/2017/05/11/new-distros-coming-to-bashwsl-via-windows-store/
39.
40. 각각의 Linux 디스트리뷰션은 하나의 Windows 10 에서 동시에
공존하고 따로 실행이 가능하다.
"이로써 4개의 개성(Windows, Ubuntu, SUSE, Fedora)가 같은
1개의 OS상에서 실현하게 되었다. Windows 애플리케이션도
Linux 애플리케이션도 실행할 수 있는 최고의 개발 환경이 되
는 유일한 OS의 실현"(Windows&Devices 담당)
41. Windows Server에도 "Bash on Windows"장착.
Windows Server도 가상 머신을 사용하지 않고
Linux 바이너리를 실행 가능하게.
- Build 2017
https://blogs.technet.microsoft.com/hybridcloud/2017/05/10/windows-server-for-developers-news-from-microsoft-build-2017 /
Windows Subsystem for Linux(WSL), 보통 Bash on Windows로 알려진 기능
을 Windows Server에도 탑재.
이 독특한 조합에 의해서 개발자와 애플리케이션 관리자는 그동안 Linux 컨
테이너에서 사용하던 것과 같은 스크립트, 도구, 절차, 컨테이너 이미지를
Windows Server Container의 호스트에서도 사용할 수 있게 되었다.