[VirtualBox] CentOS 7.3 VM template 이미지 제작 & 활용하기
특정 작업을 수행하기 위해 VirtualBox 내에 동일한 OS로 비슷한 스펙을 가진 VM을 여러 개 만들어야 할 일이 있을 것이다. 매번 OS를 설치하고 기본 패키지를 다운로드, 설치/설정을 반복하는 일이 번거롭고 시간을 뻇기는 부담으로 느껴진다면 이 방법을 한 번 써 봐도 좋겠다는 생각에서 정리해 둔다.
사전 준비
* VirtualBox가 설치된 호스트 머신
* template에 설치할 OS 이미지(ISO) 파일 준비, 여기서는 CentOS 7.3(1611) Minimal ISO
VirtualBox VM template 제작
1. 적당한 스펙의 VM(CPU1, Memory 1GB)을 새로 만들기
가상하드디스크는 VMDK 또는 VDI 형식을 선택
2. 저장소의 CDROM에 CentOS 7.3 ISO 파일 연결
3. VM 선택 후 시작(전원 켜기)
4. CentOS 7.3 설치
5. Network Manager 제거
# systemctl stop NetworkManager
# systemctl disable NetworkManager
6. 네트워크 설정 & reboot, 인터넷 연결 정상여부 확인
# vi /etc/sysconfig/network-script/ifcfg-eth0
BOOTPROTO=static
TYPE=Ethernet
DEVICE=eth0
IPADDR=a.b.c.d
NETMASK=255.255.255.0
GATEWAY=a.b.c.x
DNS1=a.b.c.y
DNS2=a.b.c.z
ONBOOT=yes
7. 기본 업데이트 및 패키지(epel repo 사용을 전제로 함) 설치 & reboot
# yum update -y
# yum install -y epel-release
# yum install -y net-tools bind-utils nc bzip2 yum-utils gcc kernel-devel kernel-headers dkms wget chrony nfs-utils nfs-utils-lib fping jq git bash-completion bash-completion-extras
(gcc, kernel-devel, dkms는 linux용 VirtualBox Guest Addon을 빌드하기 위한 필수 패키지)
(reboot) Linux 커널 버전이 정확히 맞춰지도록 여기서 재부팅 수행
8. VirtualBox Menu > Insert Guest Addon CD image
# mount /dev/cdrom /mnt
# sh /mnt/VBoxLinuxAdditions.run
(reboot) 변경 된 Linux 커널 모듈이 로딩되도록 리부팅 수행
9. VM sealing(template 화 하기위한 봉인 작업. VMware에서의 template 작업과 비슷하지만 약간 다름)
# vi seal.sh
#!/bin/bash
#stop logging services
/sbin/service rsyslog stop
/sbin/service auditd stop
#remove old kernels
/bin/package-cleanup -y --oldkernels --count=1
#clean yum cache
/usr/bin/yum clean all
#force logrotate to shrink logspace and remove old logs as well as truncate logs
/usr/sbin/logrotate -f /etc/logrotate.conf
/bin/rm -f /var/log/*-???????? /var/log/*.gz
/bin/rm -f /var/log/dmesg.old
/bin/rm -rf /var/log/anaconda
/bin/cat /dev/null > /var/log/audit/audit.log
/bin/cat /dev/null > /var/log/wtmp
/bin/cat /dev/null > /var/log/lastlog
/bin/cat /dev/null > /var/log/grubby
#remove udev hardware rules
/bin/rm -f /etc/udev/rules.d/70*
#remove SSH host keys
/bin/rm -f /etc/ssh/*key*
#remove root users shell history
/bin/rm -f ~root/.bash_history
unset HISTFILE
#remove root users SSH history
/bin/rm -rf ~root/.ssh/
# chmod +x seal.sh
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=dhcp
TYPE=Ethernet
DEVICE=eth0
#IPADDR=a.b.c.d
#NETMASK=255.255.255.0
#GATEWAY=a.b.c.x
#DNS1=a.b.c.y
#DNS2=a.b.c.z
ONBOOT=yes
# ./seal.sh
# rm -rf /var/cache/yum
# rm -f seal.sh
# history -c
# sys-unconfig
10. 만들어진 VM 이미지 파일(예를 들어 cent73-template.vdi 파일)을 ~/VirtualBox VMs/Cent73 template 디렉토리에서 /MyOSTemplates/ 등의 별도 디렉토리를 만들어서 복사해 두고, 해당 VM은 VirtualBox 콘솔에서 삭제한다.
VirtualBox VM template 을 활용한 VM 찍어내기
1. 원하는 스펙의 VM을 새로 만들기(VritualBox 콘솔)
하드디스크 선택 단계에서 '기존 가상 하드 디스크 파일 사용' 선택 직후, 반드시 아래 단계를 정확히 진행
1-1. 윈도우 탐색기, MacOS Finder 등을 실행하여, 앞서 저장해 둔 template 파일을 현재 만들어지고 있는 VM의 이미지 저장 디렉토리로 복사해 온다. 즉,
* Source 파일(예): /MyOSTemplates/cent73-template.vdi
* Destination 디렉토리(예): ~/VirtualBox VMs/Test VM from template - 1
1-2. 터미널 또는 커맨드 창에서 아래의 명령을 수행하여, 복사해 온 VM Image에 대한 UUID를 교체
# VBoxManage internalcommands sethduuid ~/VirtualBox\ VMs/Test VM from template - 1/cent73-template.vdi
* Windows 계열의 호스트에서는 VBoxManage.exe 의 path 가 등록되어 있지 않으므로 다음과 같이 실행
# C:\>"c:\Program Files\Oracle\VirtualBox\vboxmanage.exe" internalcommands sethduuid ~/VirtualBox\ VMs\Test VM from template - 1\cent73-template.vdi
2. VirtualBox 콘솔로 다시 넘어가서
폴더 아이콘을 클릭하여 복사해 온 이미지파일(cent73-template.vdi) 선택, 만들기 클릭
3. VM 생성 전 단계에서 네트워크는 네트워크>어댑터 탭>고급>무작위모드>가상머신에 허용(또는 모두 허용)으로 설정
4. 모든 설정이 완료 되었으면 '시작'(전원 켜기) & VM 사용
- Barracuda -