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