Makefile.vm revision 285722
1273823Sgjb# 2273823Sgjb# $FreeBSD: head/release/Makefile.vm 285722 2015-07-20 16:27:44Z brd $ 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 \ 21284893Sbrd OPENSTACK \ 22285722Sbrd VAGRANT-VIRTUALBOX \ 23285722Sbrd VAGRANT-VMWARE 24277458SgjbAZURE_FORMAT= vhdf 25277458SgjbAZURE_DESC= Microsoft Azure platform image 26279249SgjbAZURE_DISK= ${OSRELEASE}.${AZURE_FORMAT} 27280879ScpercivaEC2_FORMAT= raw 28280879ScpercivaEC2_DESC= Amazon EC2 image 29280879ScpercivaEC2_DISK= ${OSRELEASE}.${EC2_FORMAT} 30277458SgjbGCE_FORMAT= raw 31277458SgjbGCE_DESC= Google Compute Engine image 32279249SgjbGCE_DISK= disk.${GCE_FORMAT} 33277458SgjbOPENSTACK_FORMAT=qcow2 34277458SgjbOPENSTACK_DESC= OpenStack platform image 35279249SgjbOPENSTACK_DISK= ${OSRELEASE}.${OPENSTACK_FORMAT} 36285722SbrdVAGRANT-VIRTUALBOX_FORMAT= vmdk 37285722SbrdVAGRANT-VIRTUALBOX_DESC= Vagrant Image for VirtualBox 38285722SbrdVAGRANT-VIRTUALBOX_DISK= ${OSRELEASE}.vbox.${VAGRANT_FORMAT} 39285722SbrdVAGRANT-VMWARE_FORMAT= vmdk 40285722SbrdVAGRANT-VMWARE_DESC= Vagrant Image for VMWare 41285722SbrdVAGRANT-VMWARE_DISK= ${OSRELEASE}.vmware.${VAGRANT_FORMAT} 42277458Sgjb 43277458Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 44277458Sgjb. for _CW in ${CLOUDWARE} 45279249SgjbCLOUDTARGETS+= cw-${_CW:tl} 46279249SgjbCLEANDIRS+= cw-${_CW:tl} 47277458SgjbCLEANFILES+= ${_CW:tl}.img \ 48277458Sgjb ${_CW:tl}.${${_CW:tu}_FORMAT} \ 49279257Sgjb ${_CW:tl}.${${_CW:tu}_FORMAT}.raw \ 50279257Sgjb cw${_CW:tl}-package 51279249SgjbCLOUDINSTALL+= cw${_CW:tl}-install 52279257SgjbCLOUDPACKAGE+= cw${_CW:tl}-package 53277458Sgjb${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT} 54277458Sgjb. if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF) 55277458Sgjb${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf 56277458Sgjb. endif 57277458Sgjb 58279249Sgjbcw-${_CW:tl}: 59277458Sgjb mkdir -p ${.OBJDIR}/${.TARGET} 60277458Sgjb env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 61277458Sgjb ${.CURDIR}/scripts/mk-vmimage.sh \ 62277458Sgjb -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 63277458Sgjb -i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \ 64277458Sgjb -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF} 65277458Sgjb touch ${.TARGET} 66279249Sgjb 67279249Sgjbcw${_CW:tl}-install: 68279249Sgjb mkdir -p ${DESTDIR}/${_CW:tl} 69279249Sgjb cp -p ${${_CW}IMAGE} \ 70279249Sgjb ${DESTDIR}/${_CW:tl}/${${_CW}_DISK} 71279249Sgjb cd ${DESTDIR}/${_CW:tl} && sha256 ${${_CW}_DISK}* > \ 72279249Sgjb ${DESTDIR}/${_CW:tl}/CHECKSUM.SHA256 73279249Sgjb cd ${DESTDIR}/${_CW:tl} && md5 ${${_CW}_DISK}* > \ 74279249Sgjb ${DESTDIR}/${_CW:tl}/CHECKSUM.MD5 75279249Sgjb 76279257Sgjbcw${_CW:tl}-package: 77279257Sgjb @# Special target to handle packaging cloud images in the formats 78279257Sgjb @# specific to each hosting provider. 79279257Sgjb.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh) 80279257Sgjb env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 81279257Sgjb ${.CURDIR}/tools/${_CW:tl}-package.sh \ 82279257Sgjb -D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR} 83279257Sgjb.endif 84279257Sgjb touch ${.TARGET} 85279257Sgjb 86277458Sgjb. endfor 87277458Sgjb.endif 88277458Sgjb 89273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 90273823SgjbCLEANDIRS+= ${VMTARGETS} 91273823Sgjb. for FORMAT in ${VMFORMATS} 92277609SgjbCLEANFILES+= ${FORMAT}.img 93273823SgjbCLEANFILES+= ${VMBASE}.${FORMAT} 94273823Sgjb. endfor 95273823Sgjb.endif 96273823Sgjb 97277458Sgjbvm-base: vm-image 98273823Sgjb 99277458Sgjbvm-image: 100273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 101277458Sgjb. for FORMAT in ${VMFORMATS} 102277458Sgjb mkdir -p ${.OBJDIR}/${.TARGET} 103273823Sgjb env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 104277458Sgjb ${.CURDIR}/scripts/mk-vmimage.sh \ 105277458Sgjb -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 106277609Sgjb -i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \ 107277458Sgjb -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT} 108277458Sgjb. endfor 109273823Sgjb.endif 110273823Sgjb touch ${.TARGET} 111273823Sgjb 112277458Sgjbvm-cloudware: ${CLOUDTARGETS} 113277458Sgjb 114277458Sgjblist-vmtargets: list-cloudware 115277458Sgjb @${ECHO} 116277458Sgjb @${ECHO} "Supported virtual machine disk image formats:" 117277458Sgjb.for FORMAT in ${VMFORMATS:tu} 118277458Sgjb @${ECHO} " ${FORMAT:tl}: ${${FORMAT}_DESC}" 119277458Sgjb.endfor 120277458Sgjb 121277458Sgjblist-cloudware: 122277458Sgjb.if !empty(CLOUDWARE) 123277458Sgjb @${ECHO} 124277458Sgjb @${ECHO} "Supported cloud hosting provider images:" 125277458Sgjb. for _CW in ${CLOUDWARE} 126277458Sgjb @${ECHO} " ${_CW:tu}: ${${_CW:tu}_DESC}" 127277458Sgjb. endfor 128277458Sgjb.endif 129277458Sgjb 130277458Sgjbvm-install: 131273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 132277458Sgjb mkdir -p ${DESTDIR}/vmimages 133277458Sgjb. for FORMAT in ${VMFORMATS} 134277458Sgjb cp -p ${VMBASE}.${FORMAT} \ 135277458Sgjb ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 136277458Sgjb. endfor 137277458Sgjb. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES) 138273823Sgjb. for FORMAT in ${VMFORMATS} 139277458Sgjb # Don't keep the originals. There is a copy in ${.OBJDIR} if needed. 140278926Srpaulo ${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 141273823Sgjb. endfor 142273823Sgjb. endif 143277458Sgjb cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \ 144277458Sgjb ${DESTDIR}/vmimages/CHECKSUM.SHA256 145277458Sgjb cd ${DESTDIR}/vmimages && md5 ${OSRELEASE}* > \ 146277458Sgjb ${DESTDIR}/vmimages/CHECKSUM.MD5 147273823Sgjb.endif 148277536Sgjb 149277536Sgjbvm-release: 150277536Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 151277536Sgjb ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS} 152277536Sgjb.endif 153277536Sgjb 154277536Sgjbcloudware-release: 155277536Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 156277536Sgjb ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS} 157277536Sgjb.endif 158279249Sgjb 159279249Sgjbcloudware-install: 160279249Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 161279249Sgjb ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDINSTALL} 162279249Sgjb.endif 163280928Scperciva 164280928Scperciva.include "${.CURDIR}/Makefile.ec2" 165284567Sgjb.include "${.CURDIR}/Makefile.azure" 166284882Sgjb.include "${.CURDIR}/Makefile.gce" 167284893Sbrd.include "${.CURDIR}/Makefile.vagrant" 168