[SPICE Protocol]

SPICE(Simple Protocol for Independent Computing Environments) 프로토콜은 가상머신 전용 원격 접근 프로토콜로 오픈소스이다.(https://www.spice-space.org/)
비슷한 종류의 프로토콜로는 RDP, VNC 등이 있다.
SPICE의 특징으로는 QEMU와 같이 동작하기 때문에 가상머신에 별도의 프로그램을 설치하지 않고 QEMU를 통해 가상머신을 실행시키면 원격 접속할 수 있다.
SPICE 프로토콜을 통해 클라이언트 원격 접속 프로그램으로  원격제어가 가능하며 웹 상에도 클라이언트 라이브러리가 존재하기 때문에 가상머신 제어가 가능하다.

[SPICE 프로토콜을 이용한 웹 상에서의 원격제어]

  • 실습 환경
    • Google Cloud Platform n1-standard-4(vCPU 4, RAM 15GB)
    • Ubuntu 18.04 Server
    • Node.js 8.10.0
 

kvm 설치

해당 명령어의 실행결과는 가상화 기능을 지원하는 CPU의 갯수를 출력해준다.
만약 0이 나온다면 가상화를 지원하는 CPU가 없으므로 가상머신의 성능이 떨어진다.
가상화를 지원하는 CPU인데 0이 나온다면 BIOS 설정에 들어가 가상화 확장 기능을 활성화 해준다.
 
이후 아래 명령들을 통해 kvm을 설치한다.
sudo apt-get install qemu-kvm libvirt-bin bridge-utils ubuntu-vm-builder
sudo apt-get install virt-manager
(virt-manager는 우분투 서버버전에서는 사용 불가능하니 서버버전을 사용중이라면 GUI를 설치한다.)
sudo apt-get install ubuntu-desktop
아래 명령어를 통해 아래와 같은 결과가 나온다면 성공적으로 kvm이 설치되었다.

kvm에 윈도우 설치(virt-manager사용)

sudo virt-manager
 

 

virt-manager를 통해 버츄얼박스에 윈도우 설치하듯 설치한다.

 

kvm-spice설치

 
sudo apt-get install qemu-kvm-spice
kvm-spice를 설치하고 가상머신을 동작시킨다.
아래 명령으로 가상머신을 동작시킨다.
sudo kvm-spice -enable-kvm -hda /var/lib/libvirt/images/win10.qcow2 -spice port=5900,disable-ticketing -m 8192 -net nic -net user -usb -device usb-tablet
 
명령에서 가상머신의 이미지 경로는 virt-manager에 IDE Disk1 탭에서 얻을 수 있고 포트는 5900으로 열어준다.
-m 옵션은 메모리 설정이다.
  • qcow2파일은 QEMU Copy On Write의 약자로 가상머신 디스크의 이미지 저장 형식이다. 
  • 버츄얼 박스, vmware의 vmdk파일과 같은 역할이라고 보면된다.
이후 ubuntu 기본 원격 프로그램 remote viewer를 통해 접속해본다.
 
 
가상머신에 원활히 접속된다면 kvm-spice를 통해 정상적으로 가상머신이 작동한다는 뜻이다.
 

Nginx 설치

sudo apt-get install nginx
 

Spice-html5 다운

nginx 기본 웹 루트인 /var/www/html에 https://gitlab.freedesktop.org/spice/spice-html5에서 클론을 받는다.

Websockify 실행

npm install node-websockify
위 명령을 통해 node-websockify패키지를 설치한다.
node-websockify는 웹소캣 트래픽을 일반 소캣 트래픽으로 전송해 준다고 나와있는데 그냥 포트포워딩 정도로 생각하고싶다.
위 코드를 실행시키면 서버에서는 websockify가 동작하고있다.
 

웹 접속

현재까지 kvm에 윈도우 설치이후 작동시키는것, websockify 실행, nginx 웹서버 구동이 끝났고 
이제 웹을 통해 접속하여 가상머신을 제어할 수 있다.
아래 host와 port 적어주는 부분이 있는데 공인 ip와 8080포트를 적어주면 websockify가 웹소켓 패킷을 일반 소켓 패킷으로 전송해주고 
5900포트로 전송되어 kvm-spice를 동작시킬 때 입력했던 5900포트로 연결되어 가상머신 화면을 받아온다.
 

virsh를 이용한 가상머신 관리 [참고]

가상머신 리스트 출력
virsh list --all 
가상머신 켜기(추천하지 않는다.)
virsh start 가상머신이름(virt-manager기준)
  • Windows10기준 qemu-system-x86_64를 통해 켤때 부팅속도가 30초이상 차이났다.
가상머신 스냅샷 찍기
virsh snapshot-create-as --domain 가상머신이름(virt-manager기준) --name “스냅샷명"
가상머신 스냅샷 돌리기
virsh snapshot-revert 가상머신이름(virt-manager기준) 스냅샷명
 

+ Recent posts