OMV5 cockpit 적응기 (KVM / QEMU / LibVirt)

category 서버/리눅스 서버 2019. 11. 18. 18:32

안녕하세요? OMV 캇픽 프론트엔드를 사용해 보면서 시행착오를 공유합니다.


아래의 OMV Extras 에 있는 cockpit 입니다.






1. Web UI 접근하기


일단 Cockpit 시스템을 접근하려면 IP:9090 으로 접근해야합니다.


접근하면 아래의 계정 입력창이 나오고 root / 비번 으로 로그인 하시면 됩니다.




컨테이너야 docker 기반으로 CLI 로 쓰는게 더 편하다 보니 실제로 사용하지는 않습니다만, 이때 WebUI 기반으로 가상머신을 사용할 수 있는 부분이 있습니다. 


기본적으로 설정은 다 되어 있습니다. 남은 용량 부분은 / 경로의 남은 용량을 가지고 오게 되어 있어서 docker 경로를 하드디스크로 옮기더라도 용량 반영이 되지 않습니다. 


아무래도 차후에 수정이 되지 않을까 하네요. 아니면 직접 webui 소스를 고치는 방법 밖에 없어 보입니다.



가상머신 부분입니다. 아래와 같이 CreateVM 을 통해서 작업이 가능합니다.






2. 가상머신 생성 시, 용량 부족 문제 해결하기


한편, 가상머신을 생성할 때 아래와 같은 설정을 할 수 있습니다. 매우 간단한 설정만 가능한데요. 이때 저장용량이 부족하다는 메시지를 보게 됩니다. 



pool 용량이 부족하다는 에러인데 이 경로는 본래 아래의 경로로 되어 있습니다.


/var/lib/libvirt/images


상기 경로를 다른 곳으로 이동해주기 위해서 아래의 설정파일을 건들이시면 경로 이동이 가능합니다.


root@openmediavault:~# vim /etc/libvirt/storage/default.xml 


  8 <pool type='dir'>

  9   <name>default</name>

 10   <uuid>71309211-18fd-4d34-959a-eff7b7857486</uuid>

 11   <capacity unit='bytes'>0</capacity>

 12   <allocation unit='bytes'>0</allocation>

 13   <available unit='bytes'>0</available>

 14   <source>

 15   </source>

 16   <target>

 17     <path>/sharedfolders/libvirt/images</path>

 18   </target>

 19 </pool>


기본적으로 설정된 pool 이 dir 임으로 상기 path 만 수정하고 libvirt 를 재시작하면 되겠습니다.


root@openmediavault:~# service libvirtd status

● libvirtd.service - Virtualization daemon

   Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)

   Active: active (running) since Mon 2019-11-18 12:56:01 KST; 5h 15min ago

     Docs: man:libvirtd(8)

           https://libvirt.org

 Main PID: 876 (libvirtd)

    Tasks: 24 (limit: 32768)

   Memory: 46.9M

   CGroup: /system.slice/libvirtd.service

           ├─  876 /usr/sbin/libvirtd

           └─12288 /usr/bin/qemu-system-x86_64 -name guest=win7,debug-threads=on -S -object secret,id=masterKey0,for





3. 브릿지 어댑터 설정하기


기본적으로는 virsh 명령을 통해 net-attach ~~~~.xml 로 활성화를 해야합니다만, 일단 브릿지 설정은 그 설정이 없이 바로 할 수 있습니다.


기본 default net 설정을 없애지 않아도 활용이 가능함으로 없애는 부분은 생각하지 않고 진행해 보도록 하겠습니다.


일단, 브릿지 어댑터를 생성하기 위해서는 systemd-networkd 를 활용하는 것으로 debian10 부터 바뀌었음으로 그것을 활용하여 설정을 반영해 보겠습니다.


root@openmediavault:/etc/systemd/network# apt install bridge-utils

Reading package lists... Done

Building dependency tree       

Reading state information... Done

bridge-utils is already the newest version (1.6-2).

0 upgraded, 0 newly installed, 0 to remove and 72 not upgraded.



root@openmediavault:/etc/systemd/network# cat bridge.netdev 

[NetDev]

Name=br0

Kind=bridge



root@openmediavault:/etc/systemd/network# cat bridge-bind.network 
[Match]
Name=enp2s0

[Network]
Bridge=br0

root@openmediavault:/etc/systemd/network# cat bridge.network 
[Match]
Name=br0

[Network]
DHCP=ipv4


상기와 같은 방법으로 생성을 해줍니다. 기본적으로 올라오는 네트워크 이더넷이 enp2s0로 가정한 파일입니다.


리부팅을 하면, 아래와 같이 br0가 잘 올라와있는 것을 알 수 있으며, 혹시 랜덤 MAC으로 설정이 되어 공유기쪽에서 받던 아이피가 아닐 수 있습니다. 


이때 이전 IP로 접근이 되지 않아서 발생하는 당황스러움을 억제하시길 바랍니다.


root@openmediavault:/etc/systemd/network# ifconfig

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.0.56  netmask 255.255.255.0  broadcast 192.168.0.255

        ether 4e:bf:3a:e0:43:dc  txqueuelen 1000  (Ethernet)

        RX packets 532696  bytes 549099230 (523.6 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 321515  bytes 171368425 (163.4 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255

        ether 02:42:66:f0:dc:bb  txqueuelen 0  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 443  bytes 28824 (28.1 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        ether 00:e0:4c:68:46:33  txqueuelen 1000  (Ethernet)

        RX packets 1021471  bytes 1162751947 (1.0 GiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 787547  bytes 272264270 (259.6 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 1000  (Local Loopback)

        RX packets 101618  bytes 223013393 (212.6 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 101618  bytes 223013393 (212.6 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


vetha0261f3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        ether 92:32:71:50:77:e8  txqueuelen 0  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 3  bytes 202 (202.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        ether fe:54:00:4d:92:a1  txqueuelen 1000  (Ethernet)

        RX packets 401445  bytes 96330610 (91.8 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 498619  bytes 599920428 (572.1 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


root@openmediavault:/etc/systemd/network# brctl show

bridge name bridge id STP enabled interfaces

br0 8000.4ebf3ae043dc no         enp2s0

vnet0





4. 가상 머신에 브릿지 어댑터 설정하기


일단 default.xml 파일로 네트워크가 생성이 되었을 것입니다.


혹시 default.xml 파일로 생성이 되지 않았다면, 그리고 로그가 dnsmasq 로 에러가 난다면, 아래의 조치를 취하시길 바랍니다.


root@openmediavault:/etc/systemd/network# apt install dnsmasq

Reading package lists... Done

Building dependency tree       

Reading state information... Done

dnsmasq is already the newest version (2.80-1).

0 upgraded, 0 newly installed, 0 to remove and 72 not upgraded.


root@openmediavault:/etc/systemd/network# virsh net-start default

root@openmediavault:/etc/systemd/network# virsh net-autostart default


상기 명령으로 네트워크를 다시 시작해 주시면 가상머신이 시작될 것입니다.


시작이 된 후, 브릿지 어댑터로 바꿔끼려면 아래의 명령을 줍니다.


root@openmediavault:/etc/systemd/network# virsh edit win7 


 67     <controller type='pci' index='0' model='pci-root'/>

 68     <controller type='ide' index='0'>

 69       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>

 70     </controller>

 71     <interface type='bridge'>

 72       <mac address='52:54:00:4d:92:a1'/>

 73       <source bridge='br0'/>

 74       <model type='virtio'/>

 75       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>

 76     </interface>

 77     <serial type='pty'>

 78       <target type='isa-serial' port='0'>

 79         <model name='isa-serial'/>

 80       </target>

 81     </serial>


interface type 에 bridge 라고 주시고 source bridge 설정만 해주시면 정상 작동을 할 것입니다. 

이후 가상머신을 shutdown 했다가 시작하고 설정 파일을 다시 열어보면 랜덤 MAC 이 부여되어 있을 것입니다.


model type 의 경우 지정을 하지 않으면 본래 랜카드의 r8169 드라이버가 사용되고, 성능이 저하될 수 있어서 virtio 로 설정을 따로 하였습니다.





5. 가상머신 브릿지 어댑터 교체 후, 인터넷 안됨 문제 해결


이 부분은 debian10 부터 사용하는 netfilter 와 관련이 있습니다.


아래의 sysctl 설정으로 해결을 해줍니다.


root@openmediavault:/etc/systemd/network# cat >> /etc/sysctl.conf <<EOF

net.bridge.bridge-nf-call-ip6tables = 0

net.bridge.bridge-nf-call-iptables = 0

net.bridge.bridge-nf-call-arptables = 0

EOF


root@openmediavault:/etc/systemd/network# sysctl --system
* Applying /etc/sysctl.conf ...
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0


상기 명령어로 설정이 반영되는 것을 확인할 수 있습니다.





6. virtio 드라이버 설치를 위한 ISO 파일 교체


virsh 명령으로 명령쉘로 이동하여 아래와 같이 change-media 옵션을 사용합니다.


root@openmediavault:/etc/systemd/network# virsh

Welcome to virsh, the virtualization interactive terminal.


Type:  'help' for help with commands

       'quit' to quit


virsh # domblklist win7

 Target   Source

------------------------------------------------------

 hda      /sharedfolders/libvirt/images/win7-1.qcow2

 hdb      /sharedfolders/data/virtio-win-0.1.171.iso


virsh # change-media win7 hdb --eject

Successfully ejected media.

virsh # domblklist win7

 Target   Source

------------------------------------------------------

 hda      /sharedfolders/libvirt/images/win7-1.qcow2

 hdb      -


virsh # change-media win7 hdb /sharedfolders/data/

ko_windows_7_starter_k_with_sp1_x86_dvd_u_678554.iso  virtio-win-0.1.171.iso

virsh # change-media win7 hdb /sharedfolders/data/ko_windows_7_starter_k_with_sp1_x86_dvd_u_678554.iso --insert

Successfully inserted media.

virsh # domblklist win7

 Target   Source

------------------------------------------------------------------------------------

 hda      /sharedfolders/libvirt/images/win7-1.qcow2

 hdb      /sharedfolders/data/ko_windows_7_starter_k_with_sp1_x86_dvd_u_678554.iso


virsh # 


하기에 실행중인 가상머신에 반응이 왔습니다.


Cockpit 에서는 Console 을 지원하며 웹 기반으로 VNC SPICE 를 통해 콘솔 작업이 가능합니다.



정상적으로 가상머신에서 확인하면 ISO 이미지가 바뀌었음을 알 수 있습니다. 상기 글은 이미 있는 상태에서 설치 이미지로 바꿔 본 것으로 virtio iso 이미지를 아래에서 받아서 잘 넣어주시길 바랍니다.


https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html


장치관리자에서 장치 선택 후 수동설치를 통해 잡아주시면 됩니다. 한가지 PCI 장치라고 안잡히는 드라이버가 있는데 이는 Balloon 드라이버로써 CD 에서 찾아서 설치해 주시면 잘 작동합니다.






7. 잠시 써본 후기...


생각보다 처음은 어렵습니다. 아직 WebUI 에서 모든 컨트롤이 되지 않기 때문에 조금 어려울 수 있으나, virsh 가 굉장히 직관적으로 만들어져 있어서.. 정말 좋은 것 같습니다.


명령어 기반이라서 어려울 수 있지만, 반면에 확실하게 커스텀적으로 작성이 가능하고 마음대로 가능하다는 장점이 있습니다.


docker 도 portainer 라는 좋은게 있지만, 저는 그냥 shell 에서 작업하는 이유도 그런 이유일까 합니다.


VirtualBox 보다는 약간 빠르다는 느낌이 듭니다만, 알고보면 어차피 리눅스용 Virtualbox 도 KVM 기반인데 속도차이가 날까? 이런 의문도 생깁니다.


혹시 처음 시작에 어려움을 겪으시는 부분이 있다면 이 글로 많은 부분이 해소되었으면 좋겠습니다.


감사합니다.







댓글을 달아 주세요