16513e474SGlen Barber# 26513e474SGlen Barber# $FreeBSD$ 36513e474SGlen Barber# 46513e474SGlen Barber# 56513e474SGlen Barber# Makefile for building virtual machine and cloud provider disk images. 66513e474SGlen Barber# 76513e474SGlen Barber 81e7c1f17SGlen BarberVMTARGETS= vm-image 96513e474SGlen BarberVMFORMATS?= vhd vmdk qcow2 raw 10e89ef062SGlen BarberVMSIZE?= 30G 11eb46c987SNavdeep ParharSWAPSIZE?= 1G 126513e474SGlen BarberVMBASE?= vm 13d08ce983SGlen Barber 1485311c29SGlen BarberVHD_DESC= Azure, VirtualPC, Hyper-V, Xen disk image 1585311c29SGlen BarberVMDK_DESC= VMWare, VirtualBox disk image 1685311c29SGlen BarberQCOW2_DESC= Qemu, KVM disk image 1785311c29SGlen BarberRAW_DESC= Unformatted raw disk image 1885311c29SGlen Barber 19f1d219a6SGlen BarberCLOUDWARE?= EC2 \ 205f87b8f5SGlen Barber GCE \ 21a54bd595SBrad Davis VAGRANT-VIRTUALBOX \ 22a54bd595SBrad Davis VAGRANT-VMWARE 23f27438c7SGlen BarberAZURE_FORMAT= vhdf 2499e908c9SGlen BarberAZURE_DESC= Microsoft Azure platform image 250e44fa6cSGlen BarberAZURE_DISK= ${OSRELEASE}.${AZURE_FORMAT} 26f65557efSColin PercivalEC2_FORMAT= raw 27f65557efSColin PercivalEC2_DESC= Amazon EC2 image 28f65557efSColin PercivalEC2_DISK= ${OSRELEASE}.${EC2_FORMAT} 295f87b8f5SGlen BarberGCE_FORMAT= raw 305f87b8f5SGlen BarberGCE_DESC= Google Compute Engine image 310e44fa6cSGlen BarberGCE_DISK= disk.${GCE_FORMAT} 32573e7ccaSGlen BarberOPENSTACK_FORMAT=qcow2 3399e908c9SGlen BarberOPENSTACK_DESC= OpenStack platform image 340e44fa6cSGlen BarberOPENSTACK_DISK= ${OSRELEASE}.${OPENSTACK_FORMAT} 35a54bd595SBrad DavisVAGRANT-VIRTUALBOX_FORMAT= vmdk 36a54bd595SBrad DavisVAGRANT-VIRTUALBOX_DESC= Vagrant Image for VirtualBox 37a54bd595SBrad DavisVAGRANT-VIRTUALBOX_DISK= ${OSRELEASE}.vbox.${VAGRANT_FORMAT} 38a54bd595SBrad DavisVAGRANT-VMWARE_FORMAT= vmdk 39a54bd595SBrad DavisVAGRANT-VMWARE_DESC= Vagrant Image for VMWare 40a54bd595SBrad DavisVAGRANT-VMWARE_DISK= ${OSRELEASE}.vmware.${VAGRANT_FORMAT} 41d08ce983SGlen Barber 42*1ecaa3f7SColin Percivalemulator-portinstall: 43*1ecaa3f7SColin Percival.if ${TARGET_ARCH} != ${MACHINE_ARCH} 44*1ecaa3f7SColin Percival.if ( ${TARGET_ARCH} != "i386" ) || ( ${MACHINE_ARCH} != "amd64" ) 45*1ecaa3f7SColin Percival.if !exists(/usr/local/bin/qemu-${TARGET_ARCH}-static) 46*1ecaa3f7SColin Percival.if exists(${PORTSDIR}/emulators/qemu-user-static/Makefile) 47*1ecaa3f7SColin Percival env - PATH=$$PATH make -C ${PORTSDIR}/emulators/qemu-user-static BATCH=1 all install clean 48*1ecaa3f7SColin Percival.else 49*1ecaa3f7SColin Percival.if !exists(/usr/local/sbin/pkg-static) 50*1ecaa3f7SColin Percival env ASSUME_ALWAYS_YES=yes pkg bootstrap -y 51*1ecaa3f7SColin Percival.endif 52*1ecaa3f7SColin Percival env ASSUME_ALWAYS_YES=yes pkg install -y emulators/qemu-user-static 53*1ecaa3f7SColin Percival.endif 54*1ecaa3f7SColin Percival.endif 55*1ecaa3f7SColin Percival 56*1ecaa3f7SColin PercivalQEMUSTATIC=/usr/local/bin/qemu-${TARGET_ARCH}-static 57*1ecaa3f7SColin Percival.endif 58*1ecaa3f7SColin Percival.endif 59*1ecaa3f7SColin Percival 60d08ce983SGlen Barber.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 61d08ce983SGlen Barber. for _CW in ${CLOUDWARE} 620e44fa6cSGlen BarberCLOUDTARGETS+= cw-${_CW:tl} 630e44fa6cSGlen BarberCLEANDIRS+= cw-${_CW:tl} 64d08ce983SGlen BarberCLEANFILES+= ${_CW:tl}.img \ 65d08ce983SGlen Barber ${_CW:tl}.${${_CW:tu}_FORMAT} \ 66dc1c4500SGlen Barber ${_CW:tl}.${${_CW:tu}_FORMAT}.raw \ 67dc1c4500SGlen Barber cw${_CW:tl}-package 68dc1c4500SGlen BarberCLOUDPACKAGE+= cw${_CW:tl}-package 69f27438c7SGlen Barber${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT} 70d08ce983SGlen Barber. if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF) 71d08ce983SGlen Barber${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf 72d08ce983SGlen Barber. endif 7348096f81SColin Percival 74*1ecaa3f7SColin Percivalcw-${_CW:tl}: emulator-portinstall 7548096f81SColin Percival mkdir -p ${.OBJDIR}/${.TARGET} 76ea18fc2fSGlen Barber env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \ 77*1ecaa3f7SColin Percival QEMUSTATIC=${QEMUSTATIC} \ 7848096f81SColin Percival ${.CURDIR}/scripts/mk-vmimage.sh \ 7948096f81SColin Percival -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 80bdc6b35aSBrad Davis -i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW:tu}_FORMAT} \ 812c4227aaSGlen Barber -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW:tu}IMAGE} -c ${${_CW:tu}CONF} 8248096f81SColin Percival touch ${.TARGET} 830e44fa6cSGlen Barber 84dc1c4500SGlen Barbercw${_CW:tl}-package: 85dc1c4500SGlen Barber @# Special target to handle packaging cloud images in the formats 86dc1c4500SGlen Barber @# specific to each hosting provider. 87dc1c4500SGlen Barber.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh) 88dc1c4500SGlen Barber env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 89dc1c4500SGlen Barber ${.CURDIR}/tools/${_CW:tl}-package.sh \ 90dc1c4500SGlen Barber -D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR} 91dc1c4500SGlen Barber.endif 92dc1c4500SGlen Barber touch ${.TARGET} 93dc1c4500SGlen Barber 94d08ce983SGlen Barber. endfor 95d08ce983SGlen Barber.endif 966513e474SGlen Barber 976513e474SGlen Barber.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 986513e474SGlen BarberCLEANDIRS+= ${VMTARGETS} 996513e474SGlen Barber. for FORMAT in ${VMFORMATS} 100e7c9030cSGlen BarberCLEANFILES+= ${FORMAT}.img 1016513e474SGlen BarberCLEANFILES+= ${VMBASE}.${FORMAT} 1026513e474SGlen Barber. endfor 1036513e474SGlen Barber.endif 1046513e474SGlen Barber 1051e7c1f17SGlen Barbervm-base: vm-image 1066513e474SGlen Barber 1071e7c1f17SGlen Barbervm-image: 1086513e474SGlen Barber.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 1096513e474SGlen Barber. for FORMAT in ${VMFORMATS} 1101c34bf95SGlen Barber mkdir -p ${.OBJDIR}/${.TARGET} 111240e2395SGlen Barber env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \ 11226bb2a60SGlen Barber ${.CURDIR}/scripts/mk-vmimage.sh \ 1131c34bf95SGlen Barber -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 114e7c9030cSGlen Barber -i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \ 11526bb2a60SGlen Barber -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT} 1166513e474SGlen Barber. endfor 1176513e474SGlen Barber.endif 1186513e474SGlen Barber touch ${.TARGET} 1196513e474SGlen Barber 1207d2ef961SGlen Barbervm-cloudware: ${CLOUDTARGETS} 12199e908c9SGlen Barber 12285311c29SGlen Barberlist-vmtargets: list-cloudware 12385311c29SGlen Barber @${ECHO} 12485311c29SGlen Barber @${ECHO} "Supported virtual machine disk image formats:" 12585311c29SGlen Barber.for FORMAT in ${VMFORMATS:tu} 12685311c29SGlen Barber @${ECHO} " ${FORMAT:tl}: ${${FORMAT}_DESC}" 12785311c29SGlen Barber.endfor 12885311c29SGlen Barber 12999e908c9SGlen Barberlist-cloudware: 13099e908c9SGlen Barber.if !empty(CLOUDWARE) 13185311c29SGlen Barber @${ECHO} 13285311c29SGlen Barber @${ECHO} "Supported cloud hosting provider images:" 13399e908c9SGlen Barber. for _CW in ${CLOUDWARE} 13499e908c9SGlen Barber @${ECHO} " ${_CW:tu}: ${${_CW:tu}_DESC}" 13599e908c9SGlen Barber. endfor 13699e908c9SGlen Barber.endif 1372d4ff62fSGlen Barber 1382d4ff62fSGlen Barbervm-install: 1392d4ff62fSGlen Barber.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 1402d4ff62fSGlen Barber mkdir -p ${DESTDIR}/vmimages 1412d4ff62fSGlen Barber. for FORMAT in ${VMFORMATS} 1422d4ff62fSGlen Barber cp -p ${VMBASE}.${FORMAT} \ 1432d4ff62fSGlen Barber ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 1442d4ff62fSGlen Barber. endfor 1452d4ff62fSGlen Barber. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES) 1462d4ff62fSGlen Barber. for FORMAT in ${VMFORMATS} 1472d4ff62fSGlen Barber # Don't keep the originals. There is a copy in ${.OBJDIR} if needed. 148bd9cab6fSRui Paulo ${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 1492d4ff62fSGlen Barber. endfor 1502d4ff62fSGlen Barber. endif 15134187a08SGlen Barber cd ${DESTDIR}/vmimages && sha512 ${OSRELEASE}* > \ 15234187a08SGlen Barber ${DESTDIR}/vmimages/CHECKSUM.SHA512 1532d4ff62fSGlen Barber cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \ 1542d4ff62fSGlen Barber ${DESTDIR}/vmimages/CHECKSUM.SHA256 1552d4ff62fSGlen Barber.endif 1564afe7cf5SGlen Barber 1574afe7cf5SGlen Barbervm-release: 1584afe7cf5SGlen Barber.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 1594afe7cf5SGlen Barber ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS} 1604afe7cf5SGlen Barber.endif 1614afe7cf5SGlen Barber 1624afe7cf5SGlen Barbercloudware-release: 1634afe7cf5SGlen Barber.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 1644afe7cf5SGlen Barber ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS} 1654afe7cf5SGlen Barber.endif 1660e44fa6cSGlen Barber 16773d4ced0SColin Percival.include "${.CURDIR}/Makefile.ec2" 168873fc703SGlen Barber.include "${.CURDIR}/Makefile.azure" 169eb64cd58SGlen Barber.include "${.CURDIR}/Makefile.gce" 17041f7db3aSBrad Davis.include "${.CURDIR}/Makefile.vagrant" 171