1# 2# $FreeBSD: stable/10/release/Makefile.vm 330243 2018-03-01 16:41:37Z gjb $ 3# 4# 5# Makefile for building virtual machine and cloud provider disk images. 6# 7 8VMTARGETS= vm-image 9VMFORMATS?= vhd vmdk qcow2 raw 10VMSIZE?= 30G 11SWAPSIZE?= 1G 12VMBASE?= vm 13 14VHD_DESC= Azure, VirtualPC, Hyper-V, Xen disk image 15VMDK_DESC= VMWare, VirtualBox disk image 16QCOW2_DESC= Qemu, KVM disk image 17RAW_DESC= Unformatted raw disk image 18 19CLOUDWARE?= EC2 \ 20 GCE \ 21 VAGRANT-VIRTUALBOX \ 22 VAGRANT-VMWARE 23AZURE_FORMAT= vhdf 24AZURE_DESC= Microsoft Azure platform image 25AZURE_DISK= ${OSRELEASE}.${AZURE_FORMAT} 26EC2_FORMAT= raw 27EC2_DESC= Amazon EC2 image 28EC2_DISK= ${OSRELEASE}.${EC2_FORMAT} 29GCE_FORMAT= raw 30GCE_DESC= Google Compute Engine image 31GCE_DISK= disk.${GCE_FORMAT} 32OPENSTACK_FORMAT=qcow2 33OPENSTACK_DESC= OpenStack platform image 34OPENSTACK_DISK= ${OSRELEASE}.${OPENSTACK_FORMAT} 35VAGRANT-VIRTUALBOX_FORMAT= vmdk 36VAGRANT-VIRTUALBOX_DESC= Vagrant Image for VirtualBox 37VAGRANT-VIRTUALBOX_DISK= ${OSRELEASE}.vbox.${VAGRANT_FORMAT} 38VAGRANT-VMWARE_FORMAT= vmdk 39VAGRANT-VMWARE_DESC= Vagrant Image for VMWare 40VAGRANT-VMWARE_DISK= ${OSRELEASE}.vmware.${VAGRANT_FORMAT} 41 42.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 43. for _CW in ${CLOUDWARE} 44CLOUDTARGETS+= cw-${_CW:tl} 45CLEANDIRS+= cw-${_CW:tl} 46CLEANFILES+= ${_CW:tl}.img \ 47 ${_CW:tl}.${${_CW:tu}_FORMAT} \ 48 ${_CW:tl}.${${_CW:tu}_FORMAT}.raw \ 49 cw${_CW:tl}-package 50CLOUDINSTALL+= cw${_CW:tl}-install 51CLOUDPACKAGE+= cw${_CW:tl}-package 52${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT} 53. if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF) 54${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf 55. endif 56 57cw-${_CW:tl}: 58 mkdir -p ${.OBJDIR}/${.TARGET} 59 env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \ 60 ${.CURDIR}/scripts/mk-vmimage.sh \ 61 -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 62 -i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW:tu}_FORMAT} \ 63 -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW:tu}IMAGE} -c ${${_CW:tu}CONF} 64 touch ${.TARGET} 65 66cw${_CW:tl}-install: 67 mkdir -p ${DESTDIR}/${_CW:tl} 68 cp -p ${${_CW}IMAGE} \ 69 ${DESTDIR}/${_CW:tl}/${${_CW}_DISK} 70 cd ${DESTDIR}/${_CW:tl} && sha512 ${${_CW}_DISK}* > \ 71 ${DESTDIR}/${_CW:tl}/CHECKSUM.SHA512 72 cd ${DESTDIR}/${_CW:tl} && sha256 ${${_CW}_DISK}* > \ 73 ${DESTDIR}/${_CW:tl}/CHECKSUM.SHA256 74 75cw${_CW:tl}-package: 76 @# Special target to handle packaging cloud images in the formats 77 @# specific to each hosting provider. 78.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh) 79 env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 80 ${.CURDIR}/tools/${_CW:tl}-package.sh \ 81 -D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR} 82.endif 83 touch ${.TARGET} 84 85. endfor 86.endif 87 88.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 89CLEANDIRS+= ${VMTARGETS} 90. for FORMAT in ${VMFORMATS} 91CLEANFILES+= ${FORMAT}.img 92CLEANFILES+= ${VMBASE}.${FORMAT} 93. endfor 94.endif 95 96vm-base: vm-image 97 98vm-image: 99.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 100. for FORMAT in ${VMFORMATS} 101 mkdir -p ${.OBJDIR}/${.TARGET} 102 env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \ 103 ${.CURDIR}/scripts/mk-vmimage.sh \ 104 -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 105 -i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \ 106 -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT} 107. endfor 108.endif 109 touch ${.TARGET} 110 111vm-cloudware: ${CLOUDTARGETS} 112 113list-vmtargets: list-cloudware 114 @${ECHO} 115 @${ECHO} "Supported virtual machine disk image formats:" 116.for FORMAT in ${VMFORMATS:tu} 117 @${ECHO} " ${FORMAT:tl}: ${${FORMAT}_DESC}" 118.endfor 119 120list-cloudware: 121.if !empty(CLOUDWARE) 122 @${ECHO} 123 @${ECHO} "Supported cloud hosting provider images:" 124. for _CW in ${CLOUDWARE} 125 @${ECHO} " ${_CW:tu}: ${${_CW:tu}_DESC}" 126. endfor 127.endif 128 129vm-install: 130.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 131 mkdir -p ${DESTDIR}/vmimages 132. for FORMAT in ${VMFORMATS} 133 cp -p ${VMBASE}.${FORMAT} \ 134 ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 135. endfor 136. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES) 137. for FORMAT in ${VMFORMATS} 138 # Don't keep the originals. There is a copy in ${.OBJDIR} if needed. 139 ${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 140. endfor 141. endif 142 cd ${DESTDIR}/vmimages && sha512 ${OSRELEASE}* > \ 143 ${DESTDIR}/vmimages/CHECKSUM.SHA512 144 cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \ 145 ${DESTDIR}/vmimages/CHECKSUM.SHA256 146.endif 147 148vm-release: 149.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 150 ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS} 151.endif 152 153cloudware-release: 154.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 155 ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS} 156.endif 157 158cloudware-install: 159.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 160 ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDINSTALL} 161.endif 162 163.include "${.CURDIR}/Makefile.ec2" 164.include "${.CURDIR}/Makefile.azure" 165.include "${.CURDIR}/Makefile.gce" 166.include "${.CURDIR}/Makefile.vagrant" 167