Windows Subsystem for Linux a.k.a Bash on Ubuntu on Windows

16년 7월 배포된 윈도 10 레드스톤 버전에는 같은 해 4월에 MS Build 컨퍼런스에서 뜬금포 공개된 WSL이 들어있다.

그동안 CygWin이니 MinGW니 최근의 Babun이니 해서 Windows 내에서 Linux 전체 또는 일부를 사용할 수 있게 하는 프로젝트가 여럿 있었고, 각자 제 성과를 거두어온 바 있었다. 문제는 갖가지 방식 모두 Linux에서 쓰던 바이너리를 그대로 쓰진 못하고, Windows용으로 새롭게 포팅(맞나?)해야 하는 한계? 귀찮음? 이 있었다.

새로 탑재된 WSL이 위의 기존 방식들과 다른 점은, Linux 바이너리를 그대로 쓰면서 바이너리의 시스템 콜을 "커널" 단에서 에뮬레이션(틀렸지만 넘어갈게요. 이 글 누가 본다고..)해준다는 점이다. 그 덕분에, 우분투의 리눅스 시스템용 기존 소프트웨어 저장소를 그대로 쓸 수 있다!

아직 256색조차 제대로 지원이 안 되고, 한글 입력이 뭔가 어설프고 해서 여러 가지로 갈 길이 멀다. 그러나, Unix-like BSD 시스템을 바탕으로 해서 리눅스와 잘 어울리는 macOS의 자리를 뺐을 시도를 할 수 있게 된 점에서 큰 의의가 있다. 네이티브 Linux 지원이라니, 이전 스티브 발머 CEO 시절이라면 상상도 할 수 없는 일일 것이다.

안 되는 점

  • 256색 이상 지원 (X11로 별도의 터미널 에뮬레이터 창을 띄우면 해결)
  • Loop 장치 마운트 -- EXT4 파티션 이미지 같은 것들 마운트가 안 된다
  • Chromium 기반 프로그램들 (?) -- 잘 모르겠지만 어쨌든 실행이 안 되고 죽는다
  • GPU 지원 -- CUDA, TensorFlow 등등이 안 돌아간다.
  • 시작 시 자동 실행 -- 몇몇 꼼수가 있으나 그리 좋아 보이진 않는다.
  • SSH 데몬, 웹 서버 등 구동하기 -- 자동 시작이 안 되서 불편하고, 보안 취약점이 왕왕 존재할 수 있다.
  • 등등

Synopsys, Cadence 등 업체의 반도체 설계를 위한 EDA 툴 설치/실행

갖가지 안 되는 것들을 빼면 사실상 우분투 리눅스이기 때문에, 실 PC 또는 가상머신에서 돌아가는 프로그램이면 윈도 Bash에서도 돌아는 간다. 연산 결과가 죄다 틀린다던지, 어떤 오류가 있을지는 모르지만...

그래서, Synopsys Design Compiler를 윈도 Bash에서 돌려보았다.

  • Synopsys Solvnet 홈페이지에서 Installer 및 Design Compiler 설치 프로그램을 받아서, 안내대로 설치한다...
  • 라이선스 (나는 학교 것으로...), PATH 등 환경 변수를 설정해준다.

$ vim ~/.bashrc

export LM_LICENSE_FILE=blahblah

export PATH=/usr/synopsys/blah:$PATH

  • 실행해보면 동적 라이브러리가 없다고 오류가 발생한다. 정식 지원 환경인 Redhat이 아니기 때문일 텐데...

$ dc_shell

/usr/synopsys/blahblah/common_shell_exec: error while loading shared libraries: libblah.so.?: cannot open shared object file: No such file or directory

  • ldd 명령을 쓰면 바이너리 실행에 필요한 어떤 라이브러리가 없는지 알 수 있다.
  • 예로 든 dc_shell은 스크립트이고, 스크립트 내에서 common_shell_exec 바이너리를 실행한다. 그러니<

$ ldd /usr/synopsys/path/to/binary/common_shell_exec

  • 이제 없는 라이브러리 파일이 어떤 패키지에 들어있는지 알아낸 후 apt 명령으로 열심히 설치하면 된다.<
    • 구글에서 바이너리 이름으로 검색하거나
    • "apt-cache search " 명령으로 검색할 수 있다.
  • 아래 라이브러리를 설치했다. 그 전에 이것저것 더 깔았기 때문에, 실제로 설치가 필요한 패키지는 이보다 더 많을 수 있다.<

    $ sudo apt-get install libxss1 libsm6 libice6 libxft2 libjpeg62 libtiff5 libmng2

  • 문제는 최신 버전에 없는 구형 라이브러리를 요구하는 경우가 있는데...
    • 안타깝게도 libtiff3, libmng1이 libtiff5, libmng2으로 업그레이드되었다.
    • 대충 최신 라이브러리 파일을 예전 라이브러리 파일 이름으로 심볼릭 링크를 걸어본다.

      $ sudo ln -s /usr/lib/x86_64-linux-gnu/libtiff.so.5 /usr/lib/x86_64-linux-gnu/libtiff.so.3

      $ sudo ln -s /usr/lib/x86_64-linux-gnu/libmng.so.2 /usr/lib/x86_64-linux-gnu/libmng.so.1

  • 이제 실행해보면 잘 돌아간다. 그런데 정말 잘 돌아가는걸까?

+ Recent posts