Makefile.vm revision 284882
1273823Sgjb# 2273823Sgjb# $FreeBSD: head/release/Makefile.vm 284882 2015-06-27 01:29:59Z gjb $ 3273823Sgjb# 4273823Sgjb# 5273823Sgjb# Makefile for building virtual machine and cloud provider disk images. 6273823Sgjb# 7273823Sgjb 8277458SgjbVMTARGETS= vm-image 9273823SgjbVMFORMATS?= vhd vmdk qcow2 raw 10273823SgjbVMSIZE?= 20G 11273823SgjbVMBASE?= vm 12273823Sgjb 13277458SgjbVHD_DESC= Azure, VirtualPC, Hyper-V, Xen disk image 14277458SgjbVMDK_DESC= VMWare, VirtualBox disk image 15277458SgjbQCOW2_DESC= Qemu, KVM disk image 16277458SgjbRAW_DESC= Unformatted raw disk image 17277458Sgjb 18277458SgjbCLOUDWARE?= AZURE \ 19280879Scperciva EC2 \ 20277458Sgjb GCE \ 21277458Sgjb OPENSTACK 22277458SgjbAZURE_FORMAT= vhdf 23277458SgjbAZURE_DESC= Microsoft Azure platform image 24279249SgjbAZURE_DISK= ${OSRELEASE}.${AZURE_FORMAT} 25280879ScpercivaEC2_FORMAT= raw 26280879ScpercivaEC2_DESC= Amazon EC2 image 27280879ScpercivaEC2_DISK= ${OSRELEASE}.${EC2_FORMAT} 28277458SgjbGCE_FORMAT= raw 29277458SgjbGCE_DESC= Google Compute Engine image 30279249SgjbGCE_DISK= disk.${GCE_FORMAT} 31277458SgjbOPENSTACK_FORMAT=qcow2 32277458SgjbOPENSTACK_DESC= OpenStack platform image 33279249SgjbOPENSTACK_DISK= ${OSRELEASE}.${OPENSTACK_FORMAT} 34277458Sgjb 35277458Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 36277458Sgjb. for _CW in ${CLOUDWARE} 37279249SgjbCLOUDTARGETS+= cw-${_CW:tl} 38279249SgjbCLEANDIRS+= cw-${_CW:tl} 39277458SgjbCLEANFILES+= ${_CW:tl}.img \ 40277458Sgjb ${_CW:tl}.${${_CW:tu}_FORMAT} \ 41279257Sgjb ${_CW:tl}.${${_CW:tu}_FORMAT}.raw \ 42279257Sgjb cw${_CW:tl}-package 43279249SgjbCLOUDINSTALL+= cw${_CW:tl}-install 44279257SgjbCLOUDPACKAGE+= cw${_CW:tl}-package 45277458Sgjb${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT} 46277458Sgjb. if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF) 47277458Sgjb${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf 48277458Sgjb. endif 49277458Sgjb 50279249Sgjbcw-${_CW:tl}: 51277458Sgjb mkdir -p ${.OBJDIR}/${.TARGET} 52277458Sgjb env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 53277458Sgjb ${.CURDIR}/scripts/mk-vmimage.sh \ 54277458Sgjb -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 55277458Sgjb -i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \ 56277458Sgjb -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF} 57277458Sgjb touch ${.TARGET} 58279249Sgjb 59279249Sgjbcw${_CW:tl}-install: 60279249Sgjb mkdir -p ${DESTDIR}/${_CW:tl} 61279249Sgjb cp -p ${${_CW}IMAGE} \ 62279249Sgjb ${DESTDIR}/${_CW:tl}/${${_CW}_DISK} 63279249Sgjb cd ${DESTDIR}/${_CW:tl} && sha256 ${${_CW}_DISK}* > \ 64279249Sgjb ${DESTDIR}/${_CW:tl}/CHECKSUM.SHA256 65279249Sgjb cd ${DESTDIR}/${_CW:tl} && md5 ${${_CW}_DISK}* > \ 66279249Sgjb ${DESTDIR}/${_CW:tl}/CHECKSUM.MD5 67279249Sgjb 68279257Sgjbcw${_CW:tl}-package: 69279257Sgjb @# Special target to handle packaging cloud images in the formats 70279257Sgjb @# specific to each hosting provider. 71279257Sgjb.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh) 72279257Sgjb env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 73279257Sgjb ${.CURDIR}/tools/${_CW:tl}-package.sh \ 74279257Sgjb -D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR} 75279257Sgjb.endif 76279257Sgjb touch ${.TARGET} 77279257Sgjb 78277458Sgjb. endfor 79277458Sgjb.endif 80277458Sgjb 81273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 82273823SgjbCLEANDIRS+= ${VMTARGETS} 83273823Sgjb. for FORMAT in ${VMFORMATS} 84277609SgjbCLEANFILES+= ${FORMAT}.img 85273823SgjbCLEANFILES+= ${VMBASE}.${FORMAT} 86273823Sgjb. endfor 87273823Sgjb.endif 88273823Sgjb 89277458Sgjbvm-base: vm-image 90273823Sgjb 91277458Sgjbvm-image: 92273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 93277458Sgjb. for FORMAT in ${VMFORMATS} 94277458Sgjb mkdir -p ${.OBJDIR}/${.TARGET} 95273823Sgjb env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 96277458Sgjb ${.CURDIR}/scripts/mk-vmimage.sh \ 97277458Sgjb -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 98277609Sgjb -i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \ 99277458Sgjb -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT} 100277458Sgjb. endfor 101273823Sgjb.endif 102273823Sgjb touch ${.TARGET} 103273823Sgjb 104277458Sgjbvm-cloudware: ${CLOUDTARGETS} 105277458Sgjb 106277458Sgjblist-vmtargets: list-cloudware 107277458Sgjb @${ECHO} 108277458Sgjb @${ECHO} "Supported virtual machine disk image formats:" 109277458Sgjb.for FORMAT in ${VMFORMATS:tu} 110277458Sgjb @${ECHO} " ${FORMAT:tl}: ${${FORMAT}_DESC}" 111277458Sgjb.endfor 112277458Sgjb 113277458Sgjblist-cloudware: 114277458Sgjb.if !empty(CLOUDWARE) 115277458Sgjb @${ECHO} 116277458Sgjb @${ECHO} "Supported cloud hosting provider images:" 117277458Sgjb. for _CW in ${CLOUDWARE} 118277458Sgjb @${ECHO} " ${_CW:tu}: ${${_CW:tu}_DESC}" 119277458Sgjb. endfor 120277458Sgjb.endif 121277458Sgjb 122277458Sgjbvm-install: 123273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 124277458Sgjb mkdir -p ${DESTDIR}/vmimages 125277458Sgjb. for FORMAT in ${VMFORMATS} 126277458Sgjb cp -p ${VMBASE}.${FORMAT} \ 127277458Sgjb ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 128277458Sgjb. endfor 129277458Sgjb. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES) 130273823Sgjb. for FORMAT in ${VMFORMATS} 131277458Sgjb # Don't keep the originals. There is a copy in ${.OBJDIR} if needed. 132278926Srpaulo ${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 133273823Sgjb. endfor 134273823Sgjb. endif 135277458Sgjb cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \ 136277458Sgjb ${DESTDIR}/vmimages/CHECKSUM.SHA256 137277458Sgjb cd ${DESTDIR}/vmimages && md5 ${OSRELEASE}* > \ 138277458Sgjb ${DESTDIR}/vmimages/CHECKSUM.MD5 139273823Sgjb.endif 140277536Sgjb 141277536Sgjbvm-release: 142277536Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 143277536Sgjb ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS} 144277536Sgjb.endif 145277536Sgjb 146277536Sgjbcloudware-release: 147277536Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 148277536Sgjb ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS} 149277536Sgjb.endif 150279249Sgjb 151279249Sgjbcloudware-install: 152279249Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 153279249Sgjb ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDINSTALL} 154279249Sgjb.endif 155280928Scperciva 156280928Scperciva.include "${.CURDIR}/Makefile.ec2" 157284567Sgjb.include "${.CURDIR}/Makefile.azure" 158284882Sgjb.include "${.CURDIR}/Makefile.gce" 159