1# 2# $FreeBSD$ 3# 4# 5# Makefile for building virtual machine and cloud provider disk images. 6# 7 8VMTARGETS= vm-image 9VMFORMATS?= vhd vmdk qcow2 raw 10VMSIZE?= 20G 11VMBASE?= vm 12 13VHD_DESC= Azure, VirtualPC, Hyper-V, Xen disk image 14VMDK_DESC= VMWare, VirtualBox disk image 15QCOW2_DESC= Qemu, KVM disk image 16RAW_DESC= Unformatted raw disk image 17 18CLOUDWARE?= AZURE \ 19 EC2 \ 20 GCE \ 21 OPENSTACK 22AZURE_FORMAT= vhdf 23AZURE_DESC= Microsoft Azure platform image 24AZURE_DISK= ${OSRELEASE}.${AZURE_FORMAT} 25EC2_FORMAT= raw 26EC2_DESC= Amazon EC2 image 27EC2_DISK= ${OSRELEASE}.${EC2_FORMAT} 28GCE_FORMAT= raw 29GCE_DESC= Google Compute Engine image 30GCE_DISK= disk.${GCE_FORMAT} 31OPENSTACK_FORMAT=qcow2 32OPENSTACK_DESC= OpenStack platform image 33OPENSTACK_DISK= ${OSRELEASE}.${OPENSTACK_FORMAT} 34 35.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 36. for _CW in ${CLOUDWARE} 37CLOUDTARGETS+= cw-${_CW:tl} 38CLEANDIRS+= cw-${_CW:tl} 39CLEANFILES+= ${_CW:tl}.img \ 40 ${_CW:tl}.${${_CW:tu}_FORMAT} \ 41 ${_CW:tl}.${${_CW:tu}_FORMAT}.raw \ 42 cw${_CW:tl}-package 43CLOUDINSTALL+= cw${_CW:tl}-install 44CLOUDPACKAGE+= cw${_CW:tl}-package 45${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT} 46. if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF) 47${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf 48. endif 49 50cw-${_CW:tl}: 51 mkdir -p ${.OBJDIR}/${.TARGET} 52 env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 53 ${.CURDIR}/scripts/mk-vmimage.sh \ 54 -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 55 -i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \ 56 -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF} 57 touch ${.TARGET} 58 59cw${_CW:tl}-install: 60 mkdir -p ${DESTDIR}/${_CW:tl} 61 cp -p ${${_CW}IMAGE} \ 62 ${DESTDIR}/${_CW:tl}/${${_CW}_DISK} 63 cd ${DESTDIR}/${_CW:tl} && sha256 ${${_CW}_DISK}* > \ 64 ${DESTDIR}/${_CW:tl}/CHECKSUM.SHA256 65 cd ${DESTDIR}/${_CW:tl} && md5 ${${_CW}_DISK}* > \ 66 ${DESTDIR}/${_CW:tl}/CHECKSUM.MD5 67 68cw${_CW:tl}-package: 69 @# Special target to handle packaging cloud images in the formats 70 @# specific to each hosting provider. 71.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh) 72 env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 73 ${.CURDIR}/tools/${_CW:tl}-package.sh \ 74 -D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR} 75.endif 76 touch ${.TARGET} 77 78. endfor 79.endif 80 81.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 82CLEANDIRS+= ${VMTARGETS} 83. for FORMAT in ${VMFORMATS} 84CLEANFILES+= ${FORMAT}.img 85CLEANFILES+= ${VMBASE}.${FORMAT} 86. endfor 87.endif 88 89vm-base: vm-image 90 91vm-image: 92.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 93. for FORMAT in ${VMFORMATS} 94 mkdir -p ${.OBJDIR}/${.TARGET} 95 env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 96 ${.CURDIR}/scripts/mk-vmimage.sh \ 97 -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 98 -i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \ 99 -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT} 100. endfor 101.endif 102 touch ${.TARGET} 103 104vm-cloudware: ${CLOUDTARGETS} 105 106list-vmtargets: list-cloudware 107 @${ECHO} 108 @${ECHO} "Supported virtual machine disk image formats:" 109.for FORMAT in ${VMFORMATS:tu} 110 @${ECHO} " ${FORMAT:tl}: ${${FORMAT}_DESC}" 111.endfor 112 113list-cloudware: 114.if !empty(CLOUDWARE) 115 @${ECHO} 116 @${ECHO} "Supported cloud hosting provider images:" 117. for _CW in ${CLOUDWARE} 118 @${ECHO} " ${_CW:tu}: ${${_CW:tu}_DESC}" 119. endfor 120.endif 121 122vm-install: 123.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 124 mkdir -p ${DESTDIR}/vmimages 125. for FORMAT in ${VMFORMATS} 126 cp -p ${VMBASE}.${FORMAT} \ 127 ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 128. endfor 129. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES) 130. for FORMAT in ${VMFORMATS} 131 # Don't keep the originals. There is a copy in ${.OBJDIR} if needed. 132 ${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 133. endfor 134. endif 135 cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \ 136 ${DESTDIR}/vmimages/CHECKSUM.SHA256 137 cd ${DESTDIR}/vmimages && md5 ${OSRELEASE}* > \ 138 ${DESTDIR}/vmimages/CHECKSUM.MD5 139.endif 140 141vm-release: 142.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 143 ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS} 144.endif 145 146cloudware-release: 147.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 148 ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS} 149.endif 150 151cloudware-install: 152.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 153 ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDINSTALL} 154.endif 155 156.include "${.CURDIR}/Makefile.ec2" 157