2008년 7월 2일 수요일

coLinux - 윈도우와 리눅스를 동시에 사용하기 (coLinux - use windows and linux simultaneously)

가상화 기술(virtual machine)이 많이 발전해서 요새는 자신이 사용하는 OS(호스트 OS)상에서 다른 OS(타켓 OS)를 실행시키는 경우가 많아졌다.

많이 사용되는 소프트웨어로는 VMWare, Parallels 같은 것들이 있다. 이 소프트웨어들은 호스트OS 위에 완전한 가상의 컴퓨터를 에뮬레이션 해 주기 때문에 이론적으로 가상 환경에 제공되는 디바이스에 대한 디바이스 드라이버만 있다면 그 프로세서를 지원하는 모든 OS를 설치할 수 있다. 단점은 컴퓨터의 아주 로우레벨까지 완벽하게 에뮬레이션을 해 줘야 하기 때문에 상당한 성능 저하를 피할 수가 없다.

사용자 삽입 이미지
이에 비해 coLinux(cooperative Linux)는 다른 접근방식을 사용한다. coLinux는 "리눅스가 모든 프로세서 아키텍쳐에 포팅될 수 있다면 그런 방식으로 다른 OS에는 포팅을 할 수 없을까?"라는 기본적인 질문에서 탄생하게 되었다.

http://www.colinux.org

coLinux는 단일 컴퓨터 상에서 다른 OS와 함께 돌아갈 수 있게 리눅스 커널을 포팅한 것이다. 물론 오픈소스이고 무료로 사용할 수 있다.

VMWare같은 가상화 솔루션은 타겟 OS를 User mode에서 실행시키는데 비해 coLinux는 호스트 OS에 특수한 드라이버를 만들어서 커널이 privileged mode(a.k.a. supervisor mode or ring 0)에서 실행될 수 있게 해 준다.

지속적으로 프로세서의 상태를 호스트 OS와 coLinux커널 상태로 스위칭 해 줌으로서 자신에게 할당된 주소영역에서 MMU에 대한 완전한 통제권을 가질 수 있어서 coLinux 커널이 호스트 OS로 실행되는것과 같이 동작할 수 있게 해 주기 때문에 컴퓨터에서 리눅스만 사용하는 경우와 비교했을 때 거의 유사한 성능과 기능을 제공해 줄 수 있게된다.

* coLinux는 호스트 OS와 함께 하드웨어를 공유하기 위해 I/O디바이스를 직접 억세스하지 않는다. 대신 호스트 OS에 있는 coLinux 드라이버에 의해 제공되는 에뮬레이트 된 가상 하드웨어를 사용한다. 예를 들면 윈도우의 일반 파일이 coLinux에서는 블럭 디바이스로 사용될 수 있다. 모든 실제 하드웨어 인터럽트는 호스트 OS에 투명하게 전달되기 때문에 호스트 OS가 실제 하드웨어를 제어하는데 아무 방해가 되지 않는다.

* 단 coLinux는 현재 비디오 카드에 대한 가상 어댑터가 없기 때문에 X server를 지원하지 않는다. X 윈도우를 사용하려면 윈도우에서 Cygwin/X, Xming, eXceed, X manager같은 X server를 사용해서 X session을 열어주면 된다. 다른 방법으로는 coLinux에 Xvnc를 실행시키고 윈도우에서 VNC client를 사용할수도 있다.

작업 특성상 리눅스와 윈도우를 같이 사용해야 하는 경우에 coLinux는 훌륭한 선택이 될 수 있을 것이다.

--

coLinux 설치하기

먼저 coLinux사이트로부터 2개의 파일을 다운받아야 한다. 최신버젼의 coLinux-0.7.*.exe파일(이 글을 쓰는 시점의 최신버젼은 coLinux-0.7.3.exe이다.) 과 리눅스 시스템이 pre-install 되어 있는 실제 파일시스템이다. 파일시스템은 여러가지중에 선택할 수 있다.

coLinux-0.7.3.exe를 다운받은 다음 실행해서 설치해 준다. 디폴트 설치 디렉토리는 c:\program files\colinux로 되어 있지만 이걸 c:\colinux로 바꿔주는 것이 좋고 설치하면서는 파일시스템 이미지를 다운받지 않게 해 줘야 한다.

설치가 끝난 다음 c:\colinux 디렉토리를 보면 다음의 파일이 설치되어 있을 것이다.

* colinux-bridged-net-daemon.exe

* colinux-console-fltk.exe

* colinux-console-nt.exe

* colinux-daemon.exe

* colinux-net-daemon.exe

* colinux-slirp-net-daemon.exe

* example.conf

* initrd.gz

* linux.sys

* cofs.txt

* colinux-daemon.txt

* news.txt

* README.txt

* Uninstall.exe

* vmlinux

* vmlinux-modules.tar.gz

* [netdriver]

colinux의 설치가 끝났으면 파일 시스템을 설치해줘야 한다. 여러가지중에 선택할 수 있지만 여기서는 debian을 기준으로 설명하겠다. Sourceforge 사이트에서 다운받을 수 있는 debian root image를 사용하겠다. "Root Filesystem Images - 2.6.x-based" 아래에 있는 "Debian-3.0r0.ext3.1gb.bz2"을 다운받으면 된다. 파일 크기는 18MB로 압축을 풀면 1GB가 된다. 다운받은 파일을 c:\colinux에서 풀어준다. 압축이 풀리면 "Debian-3.0r0.ext3.1gb"이란 파일이 생성된다. 이 이름을 configuration file에 넣어줘야 한다.

파일 시스템의 크기가 작은 경우 toporesize.zip을 이용해서 크기를 늘려줄 수 있다.

다음으로 고정된 크기의 스왑 파일을 만들어 줘야 한다. 이 파일 크기가 스왑 파티션의 용량이 된다. http://gniarf.nerim.net/colinux/swap/에서 적당한 크기(실제 시스템에 꼽혀있는 램 용량정도)의 더미 스왑파일(파일네임의 크기는 MB단위이다)을 다운받아 역시 c:\colinux에서 압축을 풀어주면 된다. 압축을 풀면 swapXXXMb 같은 이름의 파일이 생긴다. 이 이름도 configuration file에 넣어줘야 한다.

Configuration file

coLinux는 configuration file이 필요하다. c:\colinux에 보면 example.conf라는 예제 파일이 있다. 이걸 다른 이름으로 저장(ex. colinux.conf)한 다음 수정해 주면 된다.

# The default kernel

kernel=vmlinux

# File contains the root file system.

cobd0="c:\coLinux\Debian-3.0r0.ext3.1gb"

# Swap device, should be an empty file with 128..512MB.

cobd1="c:\coLinux\swap_512Mb"

# Tell kernel the name of root device

root=/dev/cobd0

# Additional kernel parameters (ro = rootfs mount read only)

ro

# Initrd installs modules into the root file system.

initrd=initrd.gz

# Maximal memory for linux guest

mem=64

# Slirp for internet connection (outgoing)

eth0=slirp

# Tuntap as private network between guest and host on second linux device

eth1=tuntap


configuration file은 기본적으로 위와 같은 내용을 담고 있다. 위에서 압축을 해제한 루트 파일 시스템과 스왑 파일 이름을 변경해주고 colinux가 사용할 메모리 크기를 변경해줘야 한다.

네트웍을 사용하려면 eth0=slirp를 활성화(이 문장 앞의 '#'를 없애준다) 시켜줘야 한다. 또한 인터넷 공유( Internet Sharing)을 위해 TAP-Win32를 사용하려면 eth1=tuntap을 활성화 시켜준다.

모든 변경이 끝났으면 파일을 저장해준다.

네트웍 설정

coLinux의 네트웍카드는 가상 디바이스이기 때문에 coLinux와 다른 네트웍 장치와의 연결 역시 가상의 연결이다. coLinux 모니터는 coLinux OS에 가상 네트웍카드를 제공해주고 다른 디바이스에 연결하기 위해 TAP, winPcap 또는 Slirp를 사용한다. 가상 네트웍 카드가 연결될 수 있는 것들로는 다음이 있다.

  • MS 루프백 어댑터 (winpcap)
  • TAP 가상 어댑터 (TAP)
  • 실제 이더넷 카드 (winpcap)
  • SLIRP 가상 어댑터 (slirp)
가능한 통신 패스로는 다음이 있다.
  • coLinux 가상 네트웍 카드 -> Slirp 가상 네트웍 어댑터 -> LAN (인터넷)
  • coLinux 가상 네트웍 카드 -> MS 루프백 어댑터 (winpcap을 사용해서) -> 호스트 OS
  • coLinux 가상 네트웍 카드 -> TAP 가상 네트웍 어댑터 -> 호스트 OS
  • coLinux 가상 네트웍 카드 -> 실제 이더넷 카드 (winpcap을 사용해서) -> LAN (인터넷)
  • coLinux 가상 네트웍 카드 -> TAP 가상 네트웍 어댑터 -> MS 소프트웨어 브릿지 -> 실제 이더넷 카드 -> LAN (인터넷)
  • coLinux 가상 네트웍 카드 -> TAP 가상 네트웍 어댑터 -> 윈도우 인터넷 연결 공유(ICS) -> 실제 이더넷 카드 -> LAN (인터넷)
  • coLinux 가상 네트웍 카드 -> MS 루프백 어댑터 -> MS 가상 브릿지 -> 무선랜 카드 -> LAN (인터넷)

연결 방법을 성능순으로 보면 WinPCAP 브릿지, TAP 커넥터, Slirp 순이다.

coLinux의 모든 네트웍 카드는 물론 가상 디바이스이다. 때로는 윈도우에서도 추가적인 가상 네트웍 카드를 만들어 주는게 좋을수도 있다. 윈도우 루프백 어댑터는 윈도우에 따라오는 가상 네트웍 어댑터로 아무때나 설치할 수 있다. coLinux 가상 네트웍 카드와 윈도우 루프백 가상 네트웍 카드를 연결하려면 WinPcap을 사용한다. coLinux에 따라오는 TAP 가상 네트웍 카드 소프트웨어는 다른 종류의 가상 네트웍 카드로 역시 윈도우에 설치할 수 있다.

coLinux를 네트웍에 연결하는 가장 쉬운 방법은 coLinux에 따라오는 SLIRP를 사용하는 것이다. 가장 일반적으로 coLinux 가상 네트웍 카드를 실제 네트웍에 연결하는데 사용되는 방법은 WinPcap을 사용하는 것으로 이 경우 coLinux가 DHCP 서버나 홈 라우터에서 IP 어드레스를 요구할 수 있게 해 준다. 또 다른 방법으로는 coLinux 가상 어댑터를 TAP 가상 네트웍 어댑터에 연결해서 네트웍 연결을 공유하기 위해 윈도우 인터넷 연결 공유(ICS)를 사용하는 것이다.

성능향상을 위한 목적으로라면 coLinux OS에 2개의 가상 네트웍 어댑터를 사용하는게 좋다. 하나는 호스트 OS와 직접 연결을 위해 사용하고 다른 하나는 LAN 또는 인터넷 연결에 사용한다. 이 경우 일반적으로 4개의 네트웍 카드가 사용된다는 의미이고 이 중 3개는 가상 네트웍 어댑터이다.

ICS는 NAT의 형태가 된다. NAT는 일부 프로토콜의 동작을 방해하기 때문에 coLinux OS에서 실행되는 서비스를 억세스하기 힘들게 만든다. 네트웍 프로바이더(다이얼-업, DSL, 케이블 모뎀)가 단 한개의 ip 어드레스만 제공하고 홈 라우터가 없는 경우 coLinux를 NAT를 사용해서 실행하면 여러개의 private IP 어드레스가 할당받은 한개의 ip 어드레스를 공유할 수 있게 해 준다.

권장하는 설정

모든 경우에 사용할 수 있는 네트워킹 설정으로는 coLinux에 2개의 가상 어댑터를 사용하는 것이다. 한개의 어댑터는 LAN 또는 인터넷에 연결하고 다른 어댑터는 호스트OS와 고속 연결에 사용한다.

  1. coLinux OS에서 하나의 어댑터는 호스트 OS와의 연결을 위해 설정한다. TAP - 호스트 OS와의 Private 연결 부분을 참조
  2. coLinux OS에서 두번째 어댑터는 인터넷 또는 LAN과 연결을 위해 설정한다. Network#Slirp(쉽고 무선랜과 문제를 덜 일으키지만 느림), Network#WinPcap (복잡한 설정이 필요하고 무선랜과 문제를 일으킬 가능성이 많지만 빠름) 을 참조

* 네트웍 설정 방법에 대해서는 다음 글에서 자세히 설명하도록 하겠다.

coLinux Network 설정하기 (http://techblog.textcube.com/40)

댓글 없음:

댓글 쓰기