우분투(Ubuntu) 가상머신(Virtual Machine) 서버 환경 구축


개요

kvm+qemm+virt-manager.png
[PNG image (218.33 KB)]


Ubuntu 18.04 Server LTS 기준으로 가상머신 서버환경을 구축하는 방법을 소개합니다.

영문버젼으로 기본설치한 경우를 기준으로 설명합니다.

필자는 "xfce4", "xrdp", "libvirt-bin", "virt-manager" 설치 조합을 권장드린다는 점 먼저 말씀드리며 윈도우 PC에 모두 있는 "원격 데스크톱 연결" 프로그램으로 가상머신 서버에 접속해서 "Virtual Machine Manager" UI를 통해서 KVM을 제어한다는 구성이라는 설명과 함께 읽어주시면 좋겠습니다.

설치

먼저 Ubuntu 18.04 Server LTS 배포판을 설치합니다. (본 문서는 18.04 기준으로 작성되었으나 14.04, 16.04 에서도 설치되는 것을 확인했습니다.)
  • 설치 직후 최신 패키지 업그레이드를 반영합니다. (권장사항)
    $ sudo apt-get update
    $ sudo apt-get upgrade
    


최소한의 설치를 위해서 불필요한 패키지(Package)들은 모두 제거(Uninstall) 합니다. (필요에 의해서 삭제를 원치 않는 경우 적절히 생략하시고 진행하세요)
  • nano 편집기 (선택사항)
    $ sudo apt-get remove nano
    
  • vim tiny 편집기 (선택사항, vim-basic 이 있기 때문에 vim-tiny 는 삭제해도 됩니다.)
    $ sudo apt-get remove vim-tiny
    $ sudo apt-get install vim
    


apt-repository 를 활성화 합니다. (필수사항)
$ sudo add-apt-repository main
$ sudo add-apt-repository universe
$ sudo add-apt-repository restricted
$ sudo add-apt-repository multiverse
$ sudo apt-get update


시간동기화 클라이언트 설치 (선택사항)
  • ntp daemon 설치
    $ sudo apt-get install ntp
    
  • "/etc/ntp.conf" 에 하기 항목 추가/수정
    server 0.asia.pool.ntp.org
    server 1.asia.pool.ntp.org
    server 2.asia.pool.ntp.org
    server 3.asia.pool.ntp.org
    
  • timezone 설정 (대한민국 시간대로 설정)
    $ sudo timedatectl set-timezone Asia/Seoul
    


원격데스크탑(rdp, TCP/3389) 서버 설치 (권장사항, 일반 Microsoft Windows 의 "원격 데크스톱 연결"을 통해서 UI접속을 하실 수 있게 됩니다.)
  • Windows Manager(Gnome, KDE 등) 가 설치되어 있는 경우
    $ sudo apt-get install xrdp
    
  • Windows Manager가 설치되어 있지 않고 최소한으로만 설치하고자 하는 경우
    $ sudo apt-get install xfce4 xfce4-terminal
    $ sudo apt-get install libfontenc1 libxfont2 xfonts-encodings xfonts-utils xfonts-base xfonts-75dpi
    $ sudo apt-get install xrdp
    
    설치 완료 후 "/etc/xrdp/startwm.sh" 를 수정합니다. => 마지막 부분의 Xsession을 실행(exec)하는 부분은 모두 주석처리 또는 제거하시고 대신 그 위치에 "exec xfce4-session" 을 추가
    >>>
        exec xfce4-session
        #test -x /etc/X11/Xsession && exec /etc/X11/Xsession
        #exec /bin/sh /etc/X11/Xsession
    <<<
    
  • 한글 환경 설치
    • 언어팩 설치
      $ sudo apt-get install language-pack-ko
      
    • 은폰트(unfonts) 설치
      $ sudo apt-get install fonts-unfonts-core fonts-unfonts-extra 
      
    • 백묵폰트(baekmuk) 설치
      $ sudo apt-get install fonts-baekmuk
      
    • 나눔폰트(nanum) 설치
      $ sudo apt-get install fonts-nanum fonts-nanum-coding fonts-nanum-extra
      
    • 한글 입력기 설치
      $ sudo apt-get install ibus ibus-hangul im-config zenity
      
      => 설치 후 설정사항 (im, ibus, ibus-hangul, Autostart 설정)
        - "im-config" 를 실행하여 "ibus"을 선택합니다.
        - "ibus-setup" 을 실행하여 "Input Method" 에 "Korean - Hangul"을 추가해줍니다.
        - 매 접속마다 한글 입력기가 실행되어야 하므로 "설정(Settings)" > "Session and Startup" 메뉴에서 "Application Autostart" 항목에 "/usr/bin/ibus-daemon -drx" 명령이 실행될 수 있도록 추가해주세요.
      
  • 크롬브라우져(chromium browser)
    $ sudo apt-get install chromium-browser
    


xrdp.png
[PNG image (33.49 KB)]



KVM + QEMM 가상서버 설치
  • KVM + QEMM 및 기반유틸 설치
    $ sudo apt-get install qemu-kvm libvirt-bin ovmf ubuntu-vm-builder bridge-utils
    
  • 특정 계정에게 사용권한을 할당하려면 다음과 같이 libvirtd group에 userid 를 추가해줍니다. (만약 현재 로그인한 계정에서 추가했다면 다시 로그인해야 권한이 반영됩니다.)
    $ sudo adduser `id -un` libvirtd
    Adding user '<username>' to group 'libvirtd' ...
    
  • KVM + QEMM 설치 확인
    • Intel VT-x 와 AMD-V 중에서 H/W 가속이 지원 가능한 경우 0보다 큰 값이 출력됩니다.
      $ egrep -c '(vmx|svm)' /proc/cpuinfo
      
  • KVM+QEMM 관리 UI 프로그램인 virt-manager 설치 (강력추천, 윈도우상의 "시스템" 메뉴에 보시면 "Virtual Machine Manager"가 설치되며 이를 실행하여 손쉽게 가상환경을 다루실 수 있습니다.)
    $ sudo apt-get install virt-manager
    
  • 올바르게 설치되었다면 다음과 같이 나올겁니다.
    $ virsh list --all
     Id Name                 State
    ----------------------------------
    
    $
    
  • 만약 설치에 문제가 있다면 다음과 비슷하게 나올겁니다.
    $ virsh list --all
    libvir: Remote error : Permission denied
    error: failed to connect to the hypervisor
    $
    


VirtualBox 설치 (선택사항)
$ sudo apt-get install virtualbox


KVM : passthrough

그래픽 카드(GPU)나 기타 PCI 장치를 passthrough 하는 방법을 소개합니다.

먼저 필수적으로 BIOS 설정에서 "VT-d (Intel)" 또는 "AMD IOMMU (AMD)" 관련 옵션이 있으면 활성(Enable)해주세요.

  >>> grub 파일을 수정합니다. (Intel CPU 인 경우는 "intel_iommu=on", AMD CPU 인경우는 "amd_iommu=on")
$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="intel_iommu=on"

  >>> grub 설정의 변경사항을 반영합니다.
  >>> 하기 명령 또는 "sudo grub-mkconfig -o /boot/grub/grub.cfg"
$ sudo update-grub

  >>> PCI 목록에서 passthrough 할 장치의 ID를 확인해둡니다.
  >>> 저의 경우는 passthrough 할 그래픽 카드의 PCI ID 가 "10de:0638" 이네요.
$ sudo lspci -nn | grep -i nvidia 
07:00.0 VGA compatible controller [0300]: NVIDIA Corporation G94GL [Quadro FX 1800] [10de:0638] (rev a1)

  >>> passthrough 할 PCI 장치의 ID를 vfio.conf 파일을 만들어서 ids의 값으로 편집합니다.
  >>> 만약 장치가 여러개라면 PCI 장치의 ID를 콤마(,)로 구분하여 쭉 넣어줍니다.
$ sudo vi /etc/modprobe.d/vfio.conf
options vfio-pci ids=10de:0638

  >>> vfio-pci 모듈 설정 활성화
$ sudo echo 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf

  >>> 재부팅 필요
$ sudo reboot


  >>> 재부팅 된 후 부팅메세지(dmsg)를 보시면 "DMAR" 또는 "IOMMU" 라는 문자열을 포함한 메세지가 확인된다면 준비된 것입니다. (이제 해당 PCI 장치는 가상머신에게 모든 권한을 위임할 준비가 된 자원이 됩니다.)
$ sudo dmesg | grep -E "DMAR|IOMMU" 
[    0.000000] ACPI: DMAR 0x00000000BF77E0C0 000100 (v01 AMI    OEMDMAR  00000001 MSFT 00000097)
[    0.000000] DMAR: IOMMU enabled
[    0.000000] DMAR-IR: This system BIOS has enabled interrupt remapping
[    1.271828] DMAR: Host address width 40
[    1.271916] DMAR: DRHD base: 0x000000fbffe000 flags: 0x1
[    1.272041] DMAR: dmar0: reg_base_addr fbffe000 ver 1:0 cap c90780106f0462 ecap f020f6
[    1.272167] DMAR: RMRR base: 0x000000000ed000 end: 0x000000000effff
[    1.272262] DMAR: RMRR base: 0x000000bf7ed000 end: 0x000000bf7fffff
[    1.272356] DMAR: ATSR flags: 0x0
[    1.272756] DMAR: dmar0: Using Queued invalidation
[    1.272860] DMAR: Setting RMRR:
[    1.273164] DMAR: Setting identity map for device 0000:00:1a.0 [0xbf7ed000 - 0xbf7fffff]
[    1.273537] DMAR: Setting identity map for device 0000:00:1a.7 [0xbf7ed000 - 0xbf7fffff]
[    1.273895] DMAR: Setting identity map for device 0000:00:1d.0 [0xbf7ed000 - 0xbf7fffff]
[    1.274257] DMAR: Setting identity map for device 0000:00:1d.1 [0xbf7ed000 - 0xbf7fffff]
[    1.274618] DMAR: Setting identity map for device 0000:00:1d.2 [0xbf7ed000 - 0xbf7fffff]
[    1.275036] DMAR: Setting identity map for device 0000:00:1d.7 [0xbf7ed000 - 0xbf7fffff]
[    1.275179] DMAR: Setting identity map for device 0000:00:1a.0 [0xed000 - 0xeffff]
[    1.275315] DMAR: Setting identity map for device 0000:00:1a.7 [0xed000 - 0xeffff]
[    1.275450] DMAR: Setting identity map for device 0000:00:1d.0 [0xed000 - 0xeffff]
[    1.275585] DMAR: Setting identity map for device 0000:00:1d.1 [0xed000 - 0xeffff]
[    1.275720] DMAR: Setting identity map for device 0000:00:1d.2 [0xed000 - 0xeffff]
[    1.275855] DMAR: Setting identity map for device 0000:00:1d.7 [0xed000 - 0xeffff]
[    1.275992] DMAR: Prepare 0-16MiB unity mapping for LPC
[    1.276402] DMAR: Setting identity map for device 0000:00:1f.0 [0x0 - 0xffffff]
[    1.276713] DMAR: Intel(R) Virtualization Technology for Directed I/O

  >>> 또한 vfio-pci 모듈이 잘 활성화(Enabled) 되었는지 확인하면 됩니다.
$ sudo dmesg | grep -i vfio 
[    8.015119] VFIO - User Level meta-driver version: 0.3
[    8.034941] vfio-pci 0000:07:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=none
[    8.052303] vfio_pci: add [10de:0638[ffff:ffff]] class 0x000000/00000000
[  567.518237] vfio-pci 0000:07:00.0: enabling device (0140 -> 0143)
[127997.152879] vfio-pci 0000:07:00.0: enabling device (0400 -> 0403)



아래 화면은 제 그래픽 카드를 passthrough 설정하여 가상머신에서 사용하도록 설정하는 화면입니다.
kvm+qemm+virt-manager+passthrough.png
[PNG image (210.02 KB)]


유틸 사용법

다른 VM disk image를 KVM용 qcow2 로 변환하는 방법
$ qemu-img convert -O qcow2 MyVMdisk1.vmdk MyVMdisk1.qcow2


명령행에서 KVM 다루기 (명령행 번거롭습니다. virt-manager 사용을 권합니다.)
$ virsh --help





/*
[ FrontPage | PrintView | RawView | RSS ]

Copyright ⓒ MINZKN.COM
All Rights Reserved.

MINZKN
*/