Makefile.vm revision 282111
1151497Sru# 2151497Sru# $FreeBSD: stable/10/release/Makefile.vm 282111 2015-04-27 19:41:40Z gjb $ 3151497Sru# 4151497Sru# 5151497Sru# Makefile for building virtual machine and cloud provider disk images. 6151497Sru# 7151497Sru 8151497SruVMTARGETS= vm-image 9151497SruVMFORMATS?= vhd vmdk qcow2 raw 10151497SruVMSIZE?= 20G 11151497SruVMBASE?= vm 12151497Sru 13151497SruVHD_DESC= Azure, VirtualPC, Hyper-V, Xen disk image 14151497SruVMDK_DESC= VMWare, VirtualBox disk image 15151497SruQCOW2_DESC= Qemu, KVM disk image 16151497SruRAW_DESC= Unformatted raw disk image 17151497Sru 18151497SruCLOUDWARE?= AZURE \ 19151497Sru EC2 \ 20151497Sru GCE \ 21151497Sru OPENSTACK 22151497SruAZURE_FORMAT= vhdf 23151497SruAZURE_DESC= Microsoft Azure platform image 24151497SruAZURE_DISK= ${OSRELEASE}.${AZURE_FORMAT} 25151497SruEC2_FORMAT= raw 26151497SruEC2_DESC= Amazon EC2 image 27151497SruEC2_DISK= ${OSRELEASE}.${EC2_FORMAT} 28151497SruGCE_FORMAT= raw 29151497SruGCE_DESC= Google Compute Engine image 30151497SruGCE_DISK= disk.${GCE_FORMAT} 31151497SruOPENSTACK_FORMAT=qcow2 32151497SruOPENSTACK_DESC= OpenStack platform image 33151497SruOPENSTACK_DISK= ${OSRELEASE}.${OPENSTACK_FORMAT} 34151497Sru 35151497Sru.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 36151497Sru. for _CW in ${CLOUDWARE} 37151497SruCLOUDTARGETS+= cw-${_CW:tl} 38151497SruCLEANDIRS+= cw-${_CW:tl} 39151497SruCLEANFILES+= ${_CW:tl}.img \ 40151497Sru ${_CW:tl}.${${_CW:tu}_FORMAT} \ 41151497Sru ${_CW:tl}.${${_CW:tu}_FORMAT}.raw \ 42151497Sru cw${_CW:tl}-package 43151497SruCLOUDINSTALL+= cw${_CW:tl}-install 44151497SruCLOUDPACKAGE+= cw${_CW:tl}-package 45151497Sru${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT} 46151497Sru. if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF) 47151497Sru${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf 48151497Sru. endif 49151497Sru 50151497Srucw-${_CW:tl}: 51151497Sru mkdir -p ${.OBJDIR}/${.TARGET} 52151497Sru env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 53151497Sru ${.CURDIR}/scripts/mk-vmimage.sh \ 54151497Sru -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 55151497Sru -i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \ 56151497Sru -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF} 57151497Sru touch ${.TARGET} 58151497Sru 59151497Srucw${_CW:tl}-install: 60151497Sru mkdir -p ${DESTDIR}/${_CW:tl} 61151497Sru cp -p ${${_CW}IMAGE} \ 62151497Sru ${DESTDIR}/${_CW:tl}/${${_CW}_DISK} 63151497Sru cd ${DESTDIR}/${_CW:tl} && sha256 ${${_CW}_DISK}* > \ 64151497Sru ${DESTDIR}/${_CW:tl}/CHECKSUM.SHA256 65151497Sru cd ${DESTDIR}/${_CW:tl} && md5 ${${_CW}_DISK}* > \ 66151497Sru ${DESTDIR}/${_CW:tl}/CHECKSUM.MD5 67151497Sru 68151497Srucw${_CW:tl}-package: 69151497Sru @# Special target to handle packaging cloud images in the formats 70151497Sru @# specific to each hosting provider. 71151497Sru.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh) 72151497Sru env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 73151497Sru ${.CURDIR}/tools/${_CW:tl}-package.sh \ 74151497Sru -D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR} 75151497Sru.endif 76151497Sru touch ${.TARGET} 77151497Sru 78151497Sru. endfor 79151497Sru.endif 80151497Sru 81151497Sru.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 82151497SruCLEANDIRS+= ${VMTARGETS} 83151497Sru. for FORMAT in ${VMFORMATS} 84151497SruCLEANFILES+= ${FORMAT}.img 85151497SruCLEANFILES+= ${VMBASE}.${FORMAT} 86151497Sru. endfor 87151497Sru.endif 88151497Sru 89151497Sruvm-base: vm-image 90151497Sru 91151497Sruvm-image: 92151497Sru.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 93151497Sru. for FORMAT in ${VMFORMATS} 94151497Sru mkdir -p ${.OBJDIR}/${.TARGET} 95151497Sru env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 96151497Sru ${.CURDIR}/scripts/mk-vmimage.sh \ 97151497Sru -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 98151497Sru -i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \ 99151497Sru -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT} 100151497Sru. endfor 101151497Sru.endif 102151497Sru touch ${.TARGET} 103151497Sru 104151497Sruvm-cloudware: ${CLOUDTARGETS} 105151497Sru 106151497Srulist-vmtargets: list-cloudware 107151497Sru @${ECHO} 108151497Sru @${ECHO} "Supported virtual machine disk image formats:" 109151497Sru.for FORMAT in ${VMFORMATS:tu} 110151497Sru @${ECHO} " ${FORMAT:tl}: ${${FORMAT}_DESC}" 111151497Sru.endfor 112151497Sru 113151497Srulist-cloudware: 114151497Sru.if !empty(CLOUDWARE) 115151497Sru @${ECHO} 116151497Sru @${ECHO} "Supported cloud hosting provider images:" 117151497Sru. for _CW in ${CLOUDWARE} 118151497Sru @${ECHO} " ${_CW:tu}: ${${_CW:tu}_DESC}" 119151497Sru. endfor 120151497Sru.endif 121151497Sru 122151497Sruvm-install: 123151497Sru.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 124151497Sru mkdir -p ${DESTDIR}/vmimages 125151497Sru. for FORMAT in ${VMFORMATS} 126151497Sru cp -p ${VMBASE}.${FORMAT} \ 127151497Sru ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 128151497Sru. endfor 129151497Sru. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES) 130151497Sru. for FORMAT in ${VMFORMATS} 131151497Sru # Don't keep the originals. There is a copy in ${.OBJDIR} if needed. 132151497Sru ${XZCMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 133151497Sru. endfor 134151497Sru. endif 135151497Sru cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \ 136151497Sru ${DESTDIR}/vmimages/CHECKSUM.SHA256 137151497Sru cd ${DESTDIR}/vmimages && md5 ${OSRELEASE}* > \ 138151497Sru ${DESTDIR}/vmimages/CHECKSUM.MD5 139151497Sru.endif 140151497Sru 141151497Sruvm-release: 142151497Sru.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 143151497Sru ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS} 144151497Sru.endif 145151497Sru 146151497Srucloudware-release: 147151497Sru.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 148151497Sru ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS} 149151497Sru.endif 150151497Sru 151151497Srucloudware-install: 152151497Sru.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 153151497Sru ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDINSTALL} 154151497Sru.endif 155151497Sru 156151497Sru.include "${.CURDIR}/Makefile.ec2" 157151497Sru