Makefile.vm revision 284943
1108768Strhodes# 2108768Strhodes# $FreeBSD: stable/10/release/Makefile.vm 284943 2015-06-30 00:51:43Z gjb $ 3108768Strhodes# 4108768Strhodes# 5133338Ssimon# Makefile for building virtual machine and cloud provider disk images. 6108768Strhodes# 7108768Strhodes 8108768StrhodesVMTARGETS= vm-image 9108768StrhodesVMFORMATS?= vhd vmdk qcow2 raw 10108768StrhodesVMSIZE?= 20G 11108768StrhodesVMBASE?= vm 12158762Sbrueffer 13158762SbruefferVHD_DESC= Azure, VirtualPC, Hyper-V, Xen disk image 14158762SbruefferVMDK_DESC= VMWare, VirtualBox disk image 15158762SbruefferQCOW2_DESC= Qemu, KVM disk image 16158762SbruefferRAW_DESC= Unformatted raw disk image 17158762Sbrueffer 18158762SbruefferCLOUDWARE?= AZURE \ 19158762Sbrueffer EC2 \ 20158762Sbrueffer GCE \ 21158762Sbrueffer OPENSTACK 22158762SbruefferAZURE_FORMAT= vhdf 23158762SbruefferAZURE_DESC= Microsoft Azure platform image 24158762SbruefferAZURE_DISK= ${OSRELEASE}.${AZURE_FORMAT} 25158762SbruefferEC2_FORMAT= raw 26108768StrhodesEC2_DESC= Amazon EC2 image 27108768StrhodesEC2_DISK= ${OSRELEASE}.${EC2_FORMAT} 28108768StrhodesGCE_FORMAT= raw 29108768StrhodesGCE_DESC= Google Compute Engine image 30108768StrhodesGCE_DISK= disk.${GCE_FORMAT} 31108768StrhodesOPENSTACK_FORMAT=qcow2 32108768StrhodesOPENSTACK_DESC= OpenStack platform image 33108768StrhodesOPENSTACK_DISK= ${OSRELEASE}.${OPENSTACK_FORMAT} 34111447Sru 35111447Sru.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 36133336Ssimon. for _CW in ${CLOUDWARE} 37111447SruCLOUDTARGETS+= cw-${_CW:tl} 38111447SruCLEANDIRS+= cw-${_CW:tl} 39111447SruCLEANFILES+= ${_CW:tl}.img \ 40111447Sru ${_CW:tl}.${${_CW:tu}_FORMAT} \ 41133336Ssimon ${_CW:tl}.${${_CW:tu}_FORMAT}.raw \ 42111447Sru cw${_CW:tl}-package 43111447SruCLOUDINSTALL+= cw${_CW:tl}-install 44111447SruCLOUDPACKAGE+= cw${_CW:tl}-package 45111447Sru${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT} 46111447Sru. if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF) 47111447Sru${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf 48111447Sru. endif 49111447Sru 50111447Srucw-${_CW:tl}: 51111447Sru mkdir -p ${.OBJDIR}/${.TARGET} 52111447Sru env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 53111447Sru ${.CURDIR}/scripts/mk-vmimage.sh \ 54111447Sru -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 55111447Sru -i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \ 56111447Sru -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF} 57111447Sru touch ${.TARGET} 58111447Sru 59111447Srucw${_CW:tl}-install: 60111447Sru mkdir -p ${DESTDIR}/${_CW:tl} 61111447Sru cp -p ${${_CW}IMAGE} \ 62111447Sru ${DESTDIR}/${_CW:tl}/${${_CW}_DISK} 63111447Sru cd ${DESTDIR}/${_CW:tl} && sha256 ${${_CW}_DISK}* > \ 64111447Sru ${DESTDIR}/${_CW:tl}/CHECKSUM.SHA256 65108768Strhodes cd ${DESTDIR}/${_CW:tl} && md5 ${${_CW}_DISK}* > \ 66108768Strhodes ${DESTDIR}/${_CW:tl}/CHECKSUM.MD5 67108768Strhodes 68108768Strhodescw${_CW:tl}-package: 69108768Strhodes @# Special target to handle packaging cloud images in the formats 70108768Strhodes @# specific to each hosting provider. 71108768Strhodes.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh) 72108768Strhodes env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 73108768Strhodes ${.CURDIR}/tools/${_CW:tl}-package.sh \ 74111447Sru -D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR} 75108768Strhodes.endif 76111447Sru touch ${.TARGET} 77108768Strhodes 78108768Strhodes. endfor 79108768Strhodes.endif 80108768Strhodes 81108768Strhodes.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 82108768StrhodesCLEANDIRS+= ${VMTARGETS} 83108768Strhodes. for FORMAT in ${VMFORMATS} 84108768StrhodesCLEANFILES+= ${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 ${XZCMD} ${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.include "${.CURDIR}/Makefile.azure" 158.include "${.CURDIR}/Makefile.gce" 159