본문으로 바로가기

본 문서는 Openstack에서 qcow2 운영체제 이미지를 만드는 방법에 대해서 설명합니다.

사전 준비

  • 리눅스 계열의 운영체제
    • 본 문서에서는 Ubuntu 22.04 Desktop 에서 작업하는 과정을 기준으로 작성되었습니다.
  • 이미지 생성관련 모듈 설치
    • qemu-kvm : KVM 하이퍼바이저에 대한 하드웨어 에뮬레이션을 제공
    • libvirt-daemon-system : libvirt 데몬을 시스템 서비스로 실행하는 구성 파일
    • libvirt-clients : 가상화 플랫폼을 관리하기위한 소프트웨어
    • bridge-utils : 이더넷 브리지를 구성하기위한 명령 줄 도구 세트
    • virtinst : 가상 머신을 만들기위한 명령 줄 도구 집합
    • virt-manager : 사용하기 쉬운 GUI 인터페이스와 libvirt를 통해 가상 머신을 관리하기위한 명령 줄 유틸리티
    • virtctl guestfs : 명령과 해당 하위 명령을 사용하여 PVC에서 VM 디스크를 수정, 검사 및 디버깅
root@ubuntu:~# sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager guestfs-tools
root@ubuntu:~# kvm --version
  • 가상머신 생성을 위한 그룹에 사용자 계정 추가
root@ubuntu:~# sudo usermod -aG libvirt $USER
root@ubuntu:~# sudo usermod -aG kvm $USER

Ubuntu 22.04 live server qcow2 이미지 만들기

Ubuntu 홈페이지에서 live server iso 파일을 다운로드합니다.

참고 문서 : https://docs.openstack.org/image-guide/ubuntu-image.html

부팅 이미지와 디스크 생성

root@ubuntu:~# ll /var/lib/libvirt/boot/
total 8
drwx--x--x 2 root root 4096  8월  4  2023 ./
drwxr-xr-x 7 root root 4096  3월 29 19:09 ../

root@ubuntu:~# mv /home/ygkim/Downloads/ubuntu-22.04.4-live-server-amd64.iso /var/lib/libvirt/boot/

root@ubuntu:~# chown libvirt-qemu:kvm /var/lib/libvirt/boot/ubuntu-22.04.4-live-server-amd64.iso 

root@ubuntu:~# qemu-img create -f qcow2 /var/lib/libvirt/images/ubuntu-22.04.4-live-server-amd64.qcow2 10G
Formatting '/var/lib/libvirt/images/ubuntu-22.04.4-live-server-amd64.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16

root@ubuntu:~# chown libvirt-qemu:kvm /var/lib/libvirt/images/ubuntu-22.04.4-live-server-amd64.qcow2 

root@ubuntu:~# virt-install --virt-type kvm --name ubuntu-22.04.4-live-server-amd64 --ram 2048 --cdrom=/var/lib/libvirt/boot/ubuntu-22.04.4-live-server-amd64.iso --disk /var/lib/libvirt/images/ubuntu-22.04.4-live-server-amd64.qcow2,bus=virtio,size=10,format=qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=ubuntu22.04
WARNING  --os-type is deprecated and does nothing. Please stop using it.

Starting install...
Creating domain...                                                                                                             |    0 B  00:00:00     

Domain is still running. Installation may be in progress.
You can reconnect to the console to complete the installation process.
root@ubuntu:~# virt-install --virt-type kvm --name ubuntu-22.04.4-live-server-amd64 --ram 2048 --cdrom=/var/lib/libvirt/boot/ubuntu-22.04.4-live-server-amd64.iso --disk /var/lib/libvirt/images/ubuntu-22.04.4-live-server-amd64.qcow2,bus=virtio,size=10,format=qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-variant=ubuntu22.04
ERROR    Disk /var/lib/libvirt/images/ubuntu-22.04.4-live-server-amd64.qcow2 is already in use by other guests ['ubuntu-22.04.4-live-server-amd64']. (Use --check path_in_use=off or --check all=off to override)
root@ubuntu:~# 


root@ubuntu:~# virsh list
 Id   Name                               State
--------------------------------------------------
 1    ubuntu-22.04.4-live-server-amd64   running


root@ubuntu:~# virsh net-list
 Name      State    Autostart   Persistent
--------------------------------------------
 default   active   yes         yes

# virsh net-start default

root@ubuntu:~# 


root@ubuntu:~# virt-manager

운영체제 설치

기본 계정을 설정하고 cloud-init 모듈을 설치합니다.

login linux
ubuntu / ******

ubuntu@ubuntu:~# sudo -i

root@ubuntu:~# apt install cloud-init

-- root@ubuntu:~# dpkg-reconfigure cloud-init

 root@ubuntu:~# /sbin/shutdown -h now

qcow2 이미지 정리

qcow2 이미지 디스크에 존재하는 MAC 주소와 로그들을 정리합니다. 그리고 virsh에 등록된 가상머신을 해제합니다.

# MAC 주소 및 로그 삭제
# Clean up (remove MAC address details)¶

root@ubuntu:~# virt-sysprep -d ubuntu-22.04.4-live-server-amd64
[   0.0] Examining the guest ...
[   4.9] Performing "abrt-data" ...
[   4.9] Performing "backup-files" ...
[   5.0] Performing "bash-history" ...
[   5.0] Performing "blkid-tab" ...
[   5.1] Performing "crash-data" ...
[   5.1] Performing "cron-spool" ...
[   5.1] Performing "dhcp-client-state" ...
[   5.1] Performing "dhcp-server-state" ...
[   5.1] Performing "dovecot-data" ...
[   5.1] Performing "ipa-client" ...
[   5.1] Performing "kerberos-hostkeytab" ...
[   5.2] Performing "logfiles" ...
[   5.2] Performing "machine-id" ...
[   5.2] Performing "mail-spool" ...
[   5.2] Performing "net-hostname" ...
[   5.3] Performing "net-hwaddr" ...
[   5.3] Performing "pacct-log" ...
[   5.3] Performing "package-manager-cache" ...
[   5.3] Performing "pam-data" ...
[   5.4] Performing "passwd-backups" ...
[   5.4] Performing "puppet-data-log" ...
[   5.4] Performing "rh-subscription-manager" ...
[   5.4] Performing "rhn-systemid" ...
[   5.4] Performing "rpm-db" ...
[   5.5] Performing "samba-db-log" ...
[   5.5] Performing "script" ...
[   5.5] Performing "smolt-uuid" ...
[   5.5] Performing "ssh-hostkeys" ...
[   5.5] Performing "ssh-userdir" ...
[   5.5] Performing "sssd-db-log" ...
[   5.6] Performing "tmp-files" ...
[   5.6] Performing "udev-persistent-net" ...
[   5.6] Performing "utmp" ...
[   5.6] Performing "yum-uuid" ...
[   5.6] Performing "customize" ...
[   5.6] Setting a random seed
[   5.7] Setting the machine ID in /etc/machine-id
[   5.7] Performing "lvm-uuids" ...


# 등록된 가상머신 해제
# Undefine the libvirt domain¶
root@ubuntu:~# virsh undefine ubuntu-22.04.4-live-server-amd64
Domain 'ubuntu-22.04.4-live-server-amd64' has been undefined

# 등록 상태 확인
root@ubuntu:~# virsh list
 Id   Name   State
--------------------

qcow2 이미지를 virsh에 등록하기

# qcow2 이미지를 virsh에 등록하기
root@ubuntu:~# virt-install \
                    --name ubuntu-22.04.4-live-server-amd64 \
                    --ram 2048 \
                    --disk /var/lib/libvirt/images/ubuntu-22.04.4-live-server-amd64.qcow2 \
                    --import \
                    --osinfo detect=on,require=off

Ubuntu 22.04 Desktop qcow2 이미지 만들기

부팅 이미지와 디스크 생성

root@ubuntu:~# mv /home/ygkim/Downloads/ubuntu-22.04.4-desktop-amd64.iso /var/lib/libvirt/boot/

root@ubuntu:~# chown libvirt-qemu:kvm /var/lib/libvirt/boot/ubuntu-22.04.4-desktop-amd64.iso 

root@ubuntu:~# qemu-img create -f qcow2 /var/lib/libvirt/images/ubuntu-22.04.4-desktop-amd64.qcow2 20G
Formatting '/var/lib/libvirt/images/ubuntu-22.04.4-desktop-amd64.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=21474836480 lazy_refcounts=off refcount_bits=16

root@ubuntu:~# chown libvirt-qemu:kvm /var/lib/libvirt/images/ubuntu-22.04.4-desktop-amd64.qcow2 

root@ubuntu:~# virt-install \
       --virt-type kvm \
       --name ubuntu-22.04.4-desktop-amd64 \
       --ram 2048 \
       --cdrom=/var/lib/libvirt/boot/ubuntu-22.04.4-desktop-amd64.iso \
       --disk /var/lib/libvirt/images/ubuntu-22.04.4-disktop-amd64.qcow2,bus=virtio,size=20,format=qcow2 \
       --network network=default \
       --graphics vnc,listen=0.0.0.0 \
       --noautoconsole \
       --os-variant=ubuntu22.04

Starting install...
Allocating 'ubuntu-22.04.4-disktop-amd64.qcow2'                                                                                |    0 B  00:00:00 ... 
Creating domain...                                                                                                             |    0 B  00:00:00     

Domain is still running. Installation may be in progress.
You can reconnect to the console to complete the installation process.
root@ubuntu:~# virsh list
 Id   Name                           State
----------------------------------------------
 1    ubuntu-22.04.4-desktop-amd64   running

root@ubuntu:~# virt-manager
root@ubuntu:~# 

운영체제 설치

아래의 이미지를 참고하여 기본 계정을 설정하고 cloud-init 모듈을 설치합니다.

ubuntu@ubuntu:~# sudo -i

root@ubuntu:~# apt install cloud-init

-- root@ubuntu:~# dpkg-reconfigure cloud-init

 root@ubuntu:~# /sbin/shutdown -h now

qcow2 이미지 정리

qcow2 이미지 디스크에 존재하는 MAC 주소와 로그들을 정리합니다. 그리고 virsh에 등록된 가상머신을 해제합니다.

# Clean up (remove MAC address details)
root@ubuntu:~# virt-sysprep -d ubuntu-22.04.4-desktop-amd64
[   0.0] Examining the guest ...
[   5.4] Performing "abrt-data" ...
[   5.4] Performing "backup-files" ...
[   5.8] Performing "bash-history" ...
[   5.8] Performing "blkid-tab" ...
[   5.8] Performing "crash-data" ...
[   5.8] Performing "cron-spool" ...
[   5.8] Performing "dhcp-client-state" ...
[   5.9] Performing "dhcp-server-state" ...
[   5.9] Performing "dovecot-data" ...
[   5.9] Performing "ipa-client" ...
[   5.9] Performing "kerberos-hostkeytab" ...
[   5.9] Performing "logfiles" ...
[   6.2] Performing "machine-id" ...
[   6.2] Performing "mail-spool" ...
[   6.2] Performing "net-hostname" ...
[   6.2] Performing "net-hwaddr" ...
[   6.3] Performing "pacct-log" ...
[   6.3] Performing "package-manager-cache" ...
[   6.4] Performing "pam-data" ...
[   6.4] Performing "passwd-backups" ...
[   6.5] Performing "puppet-data-log" ...
[   6.5] Performing "rh-subscription-manager" ...
[   6.5] Performing "rhn-systemid" ...
[   6.5] Performing "rpm-db" ...
[   6.6] Performing "samba-db-log" ...
[   6.6] Performing "script" ...
[   6.6] Performing "smolt-uuid" ...
[   6.6] Performing "ssh-hostkeys" ...
[   6.6] Performing "ssh-userdir" ...
[   6.6] Performing "sssd-db-log" ...
[   6.6] Performing "tmp-files" ...
[   6.7] Performing "udev-persistent-net" ...
[   6.7] Performing "utmp" ...
[   6.7] Performing "yum-uuid" ...
[   6.7] Performing "customize" ...
[   6.7] Setting a random seed
[   6.8] Setting the machine ID in /etc/machine-id
[   6.8] Performing "lvm-uuids" ...

# 가상머신 등록 해제
root@ubuntu:~# virsh undefine ubuntu-22.04.4-desktop-amd64
Domain 'ubuntu-22.04.4-desktop-amd64' has been undefined

root@ubuntu:~# 

root@ubuntu:~# virsh undefine ubuntu-22.04.4-desktop-amd64
Domain 'ubuntu-22.04.4-desktop-amd64' has been undefined

root@ubuntu:~# virsh list
 Id   Name   State
--------------------

Openstack Desktop 인스턴스 생성하기

Openstack에서 인스턴스 생성시에 사용자 계정을 초기화하므로 사용자 계정을 추가하도록 “구성” 과정에 아래와 같이 사용자 정의 스크립트를 추가합니다. 이 때 최상단의 #cloud-config 주석을 삭제하면 안됩니다. Openstack에서 사용자 정의스크립트로 인식하지 않습니다.

참고 : https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/8/html/configuring_and_managing_cloud-init_for_rhel_8/adding-additional-sudoers-with-cloud-init_configuring-cloud-init

#cloud-config
users:
  - default
  - name: ubuntu
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    groups: ubuntu
    ssh_pwauth: True
chpasswd:
  list: |
    root:changeit
    ubuntu:changeit
  expire: False

 

AnyDesk 접속시 옵션 설정

AnyDesk 설치 후 디스플레이를 표시할 수 없는 경우에는 아래의 링크를 참조하여 인스턴스의 디스플레이 설정을 수정합니다.

 

참고 : https://www.anyviewer.com/how-to/anydesk-display-server-not-supported-2578.html

 


Windows 10 qcow2 이미지 만들기

부팅 이미지와 디스크 생성

KVM에 사용가능한 Windows 드라이버를 VirtIO 사이트에서 다운로드 합니다. 가상머신 생성시 Ubuntu 이미지 생성과 다르게 Virtio-win-0.1.xxx.iso 파일을 CDROM 디스크로 추가 등록해야 합니다.

VirtIO Win 다운로드 : https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

참조 페이지 : https://docs.openstack.org/image-guide/windows-image.html

cd /var/lib/libvirt/images
root@ubuntu:/var/lib/libvirt/images# qemu-img create -f qcow2 /var/lib/libvirt/images/windows-10-pro-64bit-korean.qcow2 30G
Formatting '/var/lib/libvirt/images/windows-10-pro-64bit-korean.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=32212254720 lazy_refcounts=off refcount_bits=16

root@ubuntu:/var/lib/libvirt/images# chown libvirt-qemu:kvm windows-10-pro-64bit-korean.qcow2 


root@ubuntu:/var/lib/libvirt/images# cp /media/ygkim/Document/PROGRAM/SW_DVD9_Win_Pro_10_2004_64BIT_Korean_Pro_Ent_EDU_N_MLF_-2_X22-29763.iso ../boot/
root@ubuntu:/var/lib/libvirt/images# chown libvirt-qemu:kvm ../boot/SW_DVD9_Win_Pro_10_2004_64BIT_Korean_Pro_Ent_EDU_N_MLF_-2_X22-29763.iso 

root@ubuntu:# virt-install \
       --virt-type kvm \
       --name windows-10-pro-64bit \
       --ram 4096 \
       --cdrom=/var/lib/libvirt/boot/SW_DVD9_Win_Pro_10_2004_64BIT_Korean_Pro_Ent_EDU_N_MLF_-2_X22-29763.iso \
       --disk /var/lib/libvirt/images/windows-10-pro-64bit-korean.qcow2,bus=virtio,size=30,format=qcow2 \
       --disk /var/lib/libvirt/boot/virtio-win-0.1.248.iso,device=cdrom \
       --network network=default \
       --graphics vnc,listen=0.0.0.0 \
       --noautoconsole \
       --os-variant=win10


root@ubuntu:# virt-manager

운영체제 설치

운영체제를 설치합니다.

운영체제 설치 이후에 다음의 명령을 수행하여 cloudbase-init 모듈을 설치합니다. 드라이버 등록시 INF 파일은 운영체제 버전별로 경로가 다르니 설치된 운영체제에 따라 다르게 설정합니다.

Install Windows 10 and load driver in virtio-win.iso

C:\pnputil -i -a E:\virtio-win-0.1XX\viostor\2k12\amd64\*.INF

C:\powershell
C:\Set-ExecutionPolicy Unrestricted

C:\Invoke-WebRequest -UseBasicParsing https://cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi -OutFile cloudbaseinit.msi
C:\.\cloudbaseinit.msi

Cloudbase-init 프로그램 실행 시에 Administrator 계정 정보를 등록하고 Serial Port는 COM1을 선택합니다.

In the configuration options window, change the following settings:

Username: Administrator

Network adapter to configure: Red Hat VirtIO Ethernet Adapter

Serial port for logging: COM1

Cloudbase-init 프로그램 종료시에 Sysprep와 종료 체크박스를 선택하여 마무리합니다.

qcow2 이미지 정리

# 가상 이미지 등록해제
root@ubuntu:/var/lib/libvirt/images# virsh undefine windows-10-pro-64bit
Domain 'windows-10-pro-64bit' has been undefined

 

 

참고

VirtIO Win 다운로드 : https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

윈도우 이미지 설정 : https://docs.openstack.org/image-guide/windows-image.html

Ubuntu 이미지 설정 : https://docs.openstack.org/image-guide/ubuntu-image.html

728x90