2년 정도 OS X를 개발환경으로 사용했더니, 얼마 전 이직한 회사의 Windows 10 환경이 낯설게만 느껴졌다. Shell이 제일 불편했고, 각종 오픈소스 문서에 나오는 설정을 따라 하는데 Windows의 경우 설명이 친절하지 않은 경우가 많았다.

집에서는 Mac을 사용하다 보니 매번 다른 환경이 적응 안되기도 하고 남들 다 윈도우 PC 쓰는데 혼자만 Mac 사달라고 할 수도 없고 git bash로 근근이 버티고 있었는데, Windows 10에 Windows Subsystem for Linux(WSL)라는 반가운 기능이 생긴 걸 알게 되어 그 방법에 관해 설명한다. (아마도 윈도우는 공인인증서 쓸 때만 쓰다 보니 혼자만 몰랐던 듯..)

설치하기

윈도우 빌드 정보 확인

WSL 기능을 사용하려면 Windows 10의 빌드 버전이 14316 이상이어야 한다. 버전 확인은 [설정] -> [정보] -> [OS 빌드]를 확인하자.
image

개발자 모드 설정

[설정] -> [업데이트 및 보안] -> [개발자용] -> [개발자 모드] 선택
image

윈도우 기능 켜기

[제어판] -> 프로그램 및 기능 -> [Windows 기능 켜기/끄기] -> [Linux용 Windows 하위 시스템] 체크 후 재부팅
image

리눅스 설치

cmd를 관리자권한으로 열고 프롬프트에 bash를 치면 아래와 같이 https://aka.me/webstore 로 가라는 메시지가 나온다.

1
2
3
4
5
C:\windows\system32>bash
Linux용 Windows 하위 시스템에 배포가 설치되어 있지 않습니다.
아래의 Windows 스토어에서 배포를 설치할 수 있습니다.
https://aka.ms/wslstore
계속하려면 아무 키나 누르세요...

브라우저에서 위의 주소로 접속하여 Store를 열고 마음에 드는 리눅스 배포판을 선택한다. Utuntu를 선택하여 다운로드해주었다.
image

다운로드가 완료되면 실행을 눌러 설치한다.
image
설치가 진행되며 우분투에서 쓸 username과 password를 입력하면 곧바로 bash 셸을 만날 수 있다.

Hyper 설치

Windows 10의 기본 터미널 프로그램(cmd)은 칙칙한 게 별로다. OS X에서는 iterm을 사용했었는데 Windows 용으로는 나오지 않으니 Hyper라는 Web 기반 기술로 만들어진 터미널을 설치하자.

Hyper는 오픈소스 터미널이고 다양한 OS를 지원한다. 그리고 무엇보다 예쁘다. 설치는 간단한데 공식 사이트에 들어가서 다운로드하면 되고, 여러 가지 Theme과 plugin을 제공한다.

나는 아래와 같이 몇가지 설정(ctrl + ,)만 바꾸어 사용한다.

1
2
3
4
5
6
updateChannel: 'canary',
shell: 'C:\\Windows\\System32\\cmd.exe',
shellArgs: ['--login', '-i', '/c wsl'],
plugins: [
'hyper-material-theme',
],

image

ZSH와 Oh my zsh 설치

bash는 뭔가 밋밋하고, 자동완성도 별로라 linux 초보인 나를 더 힘들게 한다. zsh 셸로 갈아타 보자.

1
2
sudo apt-get install zsh
chsh -s /usr/bin/zsh # 기본 쉘 변경

zsh를 설치했으면 oh my zsh도 설치해서 더 강력한 셸로 만들자.

1
wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O - | sh

테마 설치

vi로 ~/.zshrc를 열어 아래와 같이 테마를 변경한다. 다른 테마를 원하면 여기를 참고하자.

1
ZSH_THEME="agnoster"

source ~/.zshrc 명령으로 적용하면 아래와 같이 글자가 깨지는 것을 볼 수있다. agnoster 테마가 이모티콘을 사용하는데 폰트가 없어서 그런것이니 폰트도 설치하자.
image

DejaVu Sans Mono에서 폰트(.ttf)를 내려받고 더블클릭하여 윈도우에 설치하자.

그리고 hyper config(ctrl + ,)을 눌러 폰트를 변경하면 된다.

1
fontFamily: '"DejaVu Sans Mono for Powerline", ...'

image

Python 개발환경 설치

WSL에서는 python 버전 관리를 위해 [pyenv](https://github.com/pyenv/pyenv)도 사용할 수 있다.

pyenv

먼저 필요한 패키지를 설치한다. (참고)

1
2
3
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev

다음 명령어로 pyenv를 설치한다.

1
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

그 후 ~/.zshrc 파일을 열어 맨 아래 path를 적어준다.

1
2
3
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

pyenv-virtualenv

아래 명령으로 설치한다.

1
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

그 후 ~/.zshrc 파일을 열어 맨 아래 다음 구문을 적어준다.

1
eval "$(pyenv virtualenv-init -)"

간단한 사용 방법은 간단하고 편하다.

1
2
3
4
pyenv install 3.6.4 # python 3.6.4 버전 설치
pyenv virtualenv 3.6.4 myenv # 3.6.4 버전을 기반으로 myenv라는 가상환경 생성
pyenv shell myenv # myenv라는 가상환경 activate
pyenv versions # 설치된 python 버전 목록 출력

autoenv

autoenv까지 설치하면 유용한데, 특정 프로젝트 디렉터리에 진입하면 자동으로 스크립트를 실행시킬 수 있기 때문이다. 이 기능을 활용해 pyenv shell xxxenv와 같이 특정 python 환경을 자동으로 activate 할 수 있다.

까먹고 activate 안 한 경험 누구나 한 번쯤 있을 것이다.

다음의 명령으로 설치한다.

1
git clone git://github.com/kennethreitz/autoenv.git ~/.autoenv

그 후 ~/.zshrc 파일을 열어 맨 아래 다음 구문을 적어준다.

1
source ~/.autoenv/activate.sh

원하는 디렉터리에 .env 파일을 만들고 스크립트를 적어놓으면 그 디렉터리 접근 시 자동으로 스크립트가 실행된다.
.env 파일은 종종 다른 라이브러리의 환경설정 파일과 이름이 겹친다. 그래서 나는 .autoenv로 이름을 바꾸어 사용하는데 그러려면 ~/.zshrc 파일에 추가한다.

1
export AUTOENV_ENV_FILENAME=".autoenv"

위에 추가한 source ~/.autoenv/activate.sh 보다 위에 추가해야 한다.

처음 디렉터리에 접근 시 1번은 확인하는 구문이 나온다. y를 누르면 지정한 스크립트가 실행되는 것을 볼 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
$ cd blog
autoenv:
autoenv: WARNING:
autoenv: This is the first time you are about to source /mnt/d/work/documents/blog/.autoenv:
autoenv:
autoenv: --- (begin contents) ---------------------------------------
autoenv: echo "hello"$
autoenv:
autoenv: --- (end contents) -----------------------------------------
autoenv:
autoenv: Are you sure you want to allow this? (y/N) y
hello

Node.js npm

역시 apt-get이 있으니 간편하다. 아래 스크립트의 setup_x.x 부분에 설치하고 싶은 버전을 적으면 된다.

1
2
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

docker 설치

WSL에는 아쉽게도 docker engine을 설치할 수 없는 것 같다.
윈도우에 docker engine을 설치하고 WSL에는 client만 설치하여 사용하는 방법을 선택하자.

1
curl -sSL https://get.docker.com/ | sudo sh

설치 후 docker ps 명령을 쳐보면 docker에 연결할 수 없다고 나온다.

1
2
$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

윈도우 docker를 열고 Expose daemon on tcp://localhost:2375 without TLS 옵션을 선택한다.
image

그 후 ~/.zshrcDOCKER_HOST를 다음과 같이 설정한다.

1
export DOCKER_HOST='tcp://0.0.0.0:2375'