본문 바로가기

Ryu's Tech

오픈스택 CentOS Cloud 이미지 만들기

 

 

 

본 내용은 Openstack 에 CentOS 에 Cloud-init 이 설치된 이미지를 올리는 내용입니다.

 

내용은 KVM에서 만드는 내용입니다.

http://docs.openstack.org/image-guide/centos-image.html

해당 문서에 이미 모든 내용이 나와있지만 좀 더 빠르게 끝내기 위해 작성합니다.

 

VMware workstation에서도 가능하긴 한데 vm 생성시 disk를 vmdk 파일로 split 이 아닌 single file로 작업 한 뒤 vmdk를 qcow2로 변환하면 가능합니다.

 

VIRVM은 동일한 텍스트를 반복 입력해야 하기 때문에 변수로 설정하여 편하게 쓰기 위함입니다.

 

VIRVM=cloudimg
qemu-img create -f qcow2 /tmp/$VIRVM.qcow2 10G

virt-install --virt-type kvm --name $VIRVM --ram 2048 --disk /tmp/$VIRVM.qcow2,format=qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7 --location=/data/isos/CentOS-7-x86_64-Minimal-1511.iso

 

위와 같이 생성하여 tightvnc로 접속해서 최초 설치를 진행합니다.

설치 완료 후 아래 화면에서 Reboot 를 누르시기 전에

  virsh attach-disk --type cdrom --mode readonly $VIRVM "" hda

를 통해 디스크를 빼주도록 합니다. 보통의 위의 커맨드로 하면 되나 virsh dumpxml $VIRVM 을 통해 설치 이미지(ISO)가 연결된 target dev를 확인하셔야 할 수 도 있습니다.

 

 

Reboot를 누르면 VM이 종료되는데

virsh start $VIRVM 으로 다시 켜 준 뒤 tightvnc로 접속하면 prompt 를 확인 할 수 있습니다.

 

 yum install -y acpid epel-release.noarch cloud-init

systemctl enable acpid
sed -i 's/disable_root: 0/disable_root: 1/g' /etc/cloud/cloud.cfg
sed -i 's/ssh_pwauth: 1/ssh_pwauth: 0/g' /etc/cloud/cloud.cfg
sed -i 's/GRUB_CMDLINE_LINUX/#GRUB_CMDLINE_LINUX/g' /etc/default/grub
echo "NOZEROCONF=yes" >> /etc/sysconfig/network

echo 'GRUB_CMDLINE_LINUX="crashkernel=auto console=tty0 console=ttyS0,115200n8"' >> /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg

 

오픈스택 메뉴얼에서는 각각의 커맨드에 대한 설명이 있으나 편의상 위와같이 줄여서 쓰는 중입니다.

 

중간의 disable_root: 0 및 ssh_pwauth: 1 은 설치 이후 로그인에 대한 내용으로

클라우드 img를 받아서 사용해 보시면 일반 로그인은 불가능하고 keypair를 통해서만 접속이 가능합니다.

저는 주로 테스트 환경이라 이를 제외하기 위해서 해당 기능을 다 끄고 진행했습니다.

 

혹시나 KVM에서 네트워크 인터페이스를 하나 이상 연결할경우 ifcfg의 ONBOOT를 꼭 확인해주셔야 되고 오히려 ifcfg-ethXX 파일을 다 지워버린채로 저장하는 것이 더 좋습니다.

 

위 작업 후 shutdown -h now로 시스템을 종료하고

 

virt-sysprep -d $VIRVM

는 맥값과 같은 이미지 클론시 문제가 되는 부분을 삭제하는 커맨드 입니다. 이를 실행해 주면

/tmp/XXXXX.qcow2 를 복사하셔서 사용하시면 됩니다.