1273823Sgjb# 2273823Sgjb# $FreeBSD: releng/11.0/release/Makefile.vm 300776 2016-05-26 21:08:44Z 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 18300761SgjbCLOUDWARE?= EC2 \ 19277458Sgjb GCE \ 20285722Sbrd VAGRANT-VIRTUALBOX \ 21285722Sbrd VAGRANT-VMWARE 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} 34285722SbrdVAGRANT-VIRTUALBOX_FORMAT= vmdk 35285722SbrdVAGRANT-VIRTUALBOX_DESC= Vagrant Image for VirtualBox 36285722SbrdVAGRANT-VIRTUALBOX_DISK= ${OSRELEASE}.vbox.${VAGRANT_FORMAT} 37285722SbrdVAGRANT-VMWARE_FORMAT= vmdk 38285722SbrdVAGRANT-VMWARE_DESC= Vagrant Image for VMWare 39285722SbrdVAGRANT-VMWARE_DISK= ${OSRELEASE}.vmware.${VAGRANT_FORMAT} 40277458Sgjb 41277458Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 42277458Sgjb. for _CW in ${CLOUDWARE} 43279249SgjbCLOUDTARGETS+= cw-${_CW:tl} 44279249SgjbCLEANDIRS+= cw-${_CW:tl} 45277458SgjbCLEANFILES+= ${_CW:tl}.img \ 46277458Sgjb ${_CW:tl}.${${_CW:tu}_FORMAT} \ 47279257Sgjb ${_CW:tl}.${${_CW:tu}_FORMAT}.raw \ 48279257Sgjb cw${_CW:tl}-package 49279257SgjbCLOUDPACKAGE+= cw${_CW:tl}-package 50277458Sgjb${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT} 51277458Sgjb. if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF) 52277458Sgjb${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf 53277458Sgjb. endif 54277458Sgjb 55279249Sgjbcw-${_CW:tl}: 56277458Sgjb mkdir -p ${.OBJDIR}/${.TARGET} 57277458Sgjb env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 58277458Sgjb ${.CURDIR}/scripts/mk-vmimage.sh \ 59277458Sgjb -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 60277458Sgjb -i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \ 61277458Sgjb -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF} 62277458Sgjb touch ${.TARGET} 63279249Sgjb 64279257Sgjbcw${_CW:tl}-package: 65279257Sgjb @# Special target to handle packaging cloud images in the formats 66279257Sgjb @# specific to each hosting provider. 67279257Sgjb.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh) 68279257Sgjb env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 69279257Sgjb ${.CURDIR}/tools/${_CW:tl}-package.sh \ 70279257Sgjb -D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR} 71279257Sgjb.endif 72279257Sgjb touch ${.TARGET} 73279257Sgjb 74277458Sgjb. endfor 75277458Sgjb.endif 76277458Sgjb 77273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 78273823SgjbCLEANDIRS+= ${VMTARGETS} 79273823Sgjb. for FORMAT in ${VMFORMATS} 80277609SgjbCLEANFILES+= ${FORMAT}.img 81273823SgjbCLEANFILES+= ${VMBASE}.${FORMAT} 82273823Sgjb. endfor 83273823Sgjb.endif 84273823Sgjb 85277458Sgjbvm-base: vm-image 86273823Sgjb 87277458Sgjbvm-image: 88273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 89277458Sgjb. for FORMAT in ${VMFORMATS} 90277458Sgjb mkdir -p ${.OBJDIR}/${.TARGET} 91273823Sgjb env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 92277458Sgjb ${.CURDIR}/scripts/mk-vmimage.sh \ 93277458Sgjb -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 94277609Sgjb -i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \ 95277458Sgjb -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT} 96277458Sgjb. endfor 97273823Sgjb.endif 98273823Sgjb touch ${.TARGET} 99273823Sgjb 100277458Sgjbvm-cloudware: ${CLOUDTARGETS} 101277458Sgjb 102277458Sgjblist-vmtargets: list-cloudware 103277458Sgjb @${ECHO} 104277458Sgjb @${ECHO} "Supported virtual machine disk image formats:" 105277458Sgjb.for FORMAT in ${VMFORMATS:tu} 106277458Sgjb @${ECHO} " ${FORMAT:tl}: ${${FORMAT}_DESC}" 107277458Sgjb.endfor 108277458Sgjb 109277458Sgjblist-cloudware: 110277458Sgjb.if !empty(CLOUDWARE) 111277458Sgjb @${ECHO} 112277458Sgjb @${ECHO} "Supported cloud hosting provider images:" 113277458Sgjb. for _CW in ${CLOUDWARE} 114277458Sgjb @${ECHO} " ${_CW:tu}: ${${_CW:tu}_DESC}" 115277458Sgjb. endfor 116277458Sgjb.endif 117277458Sgjb 118277458Sgjbvm-install: 119273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 120277458Sgjb mkdir -p ${DESTDIR}/vmimages 121277458Sgjb. for FORMAT in ${VMFORMATS} 122277458Sgjb cp -p ${VMBASE}.${FORMAT} \ 123277458Sgjb ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 124277458Sgjb. endfor 125277458Sgjb. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES) 126273823Sgjb. for FORMAT in ${VMFORMATS} 127277458Sgjb # Don't keep the originals. There is a copy in ${.OBJDIR} if needed. 128278926Srpaulo ${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 129273823Sgjb. endfor 130273823Sgjb. endif 131289337Sgjb cd ${DESTDIR}/vmimages && sha512 ${OSRELEASE}* > \ 132289337Sgjb ${DESTDIR}/vmimages/CHECKSUM.SHA512 133277458Sgjb cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \ 134277458Sgjb ${DESTDIR}/vmimages/CHECKSUM.SHA256 135273823Sgjb.endif 136277536Sgjb 137277536Sgjbvm-release: 138277536Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 139277536Sgjb ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS} 140277536Sgjb.endif 141277536Sgjb 142277536Sgjbcloudware-release: 143277536Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 144277536Sgjb ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS} 145277536Sgjb.endif 146279249Sgjb 147280928Scperciva.include "${.CURDIR}/Makefile.ec2" 148284567Sgjb.include "${.CURDIR}/Makefile.azure" 149284882Sgjb.include "${.CURDIR}/Makefile.gce" 150284893Sbrd.include "${.CURDIR}/Makefile.vagrant" 151