6.1. VM 템플릿 생성

리눅스 배포판의 공식 클라우드 이미지로 VM 템플릿을 생성합니다.



VM 생성

다음 정보로 VM을 생성합니다.

  • General
    • VM ID: 100
    • Name: ubuntu24-tpl
  • OS
    • Do not use any media
    • Guest OS: Linux / 6.x Kernel
  • Disk
    • Format: QEMU image format (qcow2)
    • Discard: check
    • Disk size (GiB): 10
  • CPU
    • Cores: 4
    • Total Cores: 4
    • Type: x86-64-v2-AES 혹은 host
  • Memory
    • Memory (MiB): 4096
    • Ballooning Device: un-check
  • Network
    • Bridge: vmbr0
    • Model: VirtIO


Cloud-Init 드라이브 추가

Cloud-init은 클라우드 인스턴스 초기화 도구로, 운영 체제 부팅 시점에 사용자 데이터와 설정을 자동으로 적용하여 인스턴스를 초기화하는 역할을 합니다. 이 기능을 활성화 하기 위해 하드웨어에서 CloudInit 드라이브를 추가합니다.


Serial Port 추가 (선택 사항)

하드웨어에서 Serial Port 를 추가하면, VM에서 텍스트 타입의 콘솔(xterm.js)도 이용할 수 있습니다.

  • noVNC: VM의 RGB 비디오 렌더링, 복사/붙여넣기 안됨
  • xterm.js: 텍스트 기반 콘솔, 웹브라우저에서 문자열 선택, 복사/붙여넣기 가능


공식 클라우드 이미지로 교체

리눅스 배포판 사이트에서 공식 클라우드 이미지를 다운로드하여 VM의 이미지를 교체합니다.


# cd /var/lib/vz/images/100

# ls -alh
-rw-r----- 1 root root 193K vm-100-disk-0.qcow2

# IMG=vm-100-disk-0.qcow2
# qemu-img info $IMG
image: vm-100-disk-0.qcow2
file format: qcow2
virtual size: 10 GiB (10737418240 bytes)
disk size: 196 KiB

# wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img

# IMG=noble-server-cloudimg-amd64.img
# qemu-img info $IMG
image: noble-server-cloudimg-amd64.img
file format: qcow2
virtual size: 3.5 GiB (3758096384 bytes)

# qemu-img resize $IMG 10G
Image resized.

# virt-customize -a $IMG --run-command "growpart /dev/sda 1; resize2fs /dev/sda1;"

# mv noble-server-cloudimg-amd64.img vm-100-disk-0.qcow2


이미지 조작

libguestfs-tools 도구를 통해 VM 디스크 이미지를 조작합니다.

  • virt-customize : 설치, 명령 실행
  • virt-copy-in : 파일 복사
  • virt-edit : 텍스트 파일 수정 
cd /var/lib/vz/images/100
IMG=vm-100-disk-0.qcow2
virt-customize -a $IMG --install qemu-guest-agent,net-tools,curl,tree,vim,wget,zsh,...
virt-copy-in -a $IMG <some_file_in_host> <directory_path_in_image>


필요한 경우, VM을 구동하여 패키지를 설치합니다. 그 후 Sysprep 을 통해 시스템의 고유 정보를 삭제합니다.

IMG=vm-100-disk-0.qcow2
virt-sysprep -a $IMG


템플릿으로 변환

VM을 템플릿으로 변환합니다.

# ls /var/lib/vz/images/100
base-100-disk-0.qcow2