16513e474SGlen Barber# 26513e474SGlen Barber# 36513e474SGlen Barber# 46513e474SGlen Barber# Makefile for building virtual machine and cloud provider disk images. 56513e474SGlen Barber# 66513e474SGlen Barber 71e7c1f17SGlen BarberVMTARGETS= vm-image 86513e474SGlen BarberVMFORMATS?= vhd vmdk qcow2 raw 959c21ed6SColin Percival.if ${TARGET_ARCH} == riscv64 1059c21ed6SColin PercivalVMSIZE?= 6144m 1159c21ed6SColin Percival.else 121dfcff29SGlen BarberVMSIZE?= 5120m 1359c21ed6SColin Percival.endif 1489585511SMark JohnstonVMFS?= ufs 1532ae9a6bSColin PercivalVMFSLIST?= ufs zfs 16fa04db47SGlen BarberSWAPSIZE?= 1g 176513e474SGlen BarberVMBASE?= vm 18d08ce983SGlen Barber 1985311c29SGlen BarberVHD_DESC= Azure, VirtualPC, Hyper-V, Xen disk image 2085311c29SGlen BarberVMDK_DESC= VMWare, VirtualBox disk image 2185311c29SGlen BarberQCOW2_DESC= Qemu, KVM disk image 2285311c29SGlen BarberRAW_DESC= Unformatted raw disk image 2385311c29SGlen Barber 2492d399a3SBrooks Davis.if defined(WITHOUT_QEMU) 2592d399a3SBrooks DavisCLOUDWARE_TYPES?= \ 2692d399a3SBrooks Davis BASIC-CI 2792d399a3SBrooks Davis.else 2863007e46SLi-Wen HsuCLOUDWARE_TYPES?= AZURE \ 2963007e46SLi-Wen Hsu BASIC-CI \ 3078b6117dSBaptiste Daroussin BASIC-CLOUDINIT \ 31ea070051SEmmanuel Vadot EC2 \ 325f87b8f5SGlen Barber GCE \ 331be84d74SDave Cottlehuber ORACLE \ 34e6eeac9bSColin Percival VAGRANT 3592d399a3SBrooks Davis.endif 36f27438c7SGlen BarberAZURE_FORMAT= vhdf 37863975b6SBrad DavisAZURE_FSLIST?= ufs zfs 3899e908c9SGlen BarberAZURE_DESC= Microsoft Azure platform image 39ea070051SEmmanuel VadotBASIC-CI_FORMAT= raw 40863975b6SBrad DavisBASIC-CI_FSLIST?= ufs 41ea070051SEmmanuel VadotBASIC-CI_DESC= Image for CI 425c213bf0SColin PercivalBASIC-CLOUDINIT_FORMAT= raw qcow2 4378b6117dSBaptiste DaroussinBASIC-CLOUDINIT_FSLIST?= ufs zfs 44a9774446SBaptiste DaroussinBASIC-CLOUDINIT_DESC?= Images for VM with cloudinit disk config support 45f65557efSColin PercivalEC2_FORMAT= raw 46863975b6SBrad DavisEC2_FSLIST?= ufs zfs 47647299caSColin PercivalEC2_FLAVOURS?= BASE CLOUD-INIT SMALL 481f4ce7a3SColin PercivalEC2-BASE_DESC= Amazon EC2 image 491f4ce7a3SColin PercivalEC2-CLOUD-INIT_DESC= Amazon EC2 Cloud-Init image 50647299caSColin PercivalEC2-SMALL_DESC= Amazon EC2 small image 515f87b8f5SGlen BarberGCE_FORMAT= raw 52863975b6SBrad DavisGCE_FSLIST?= ufs zfs 535f87b8f5SGlen BarberGCE_DESC= Google Compute Engine image 54c6110416SDave CottlehuberORACLE_FORMAT= raw 55c6110416SDave CottlehuberORACLE_FSLIST?= ufs zfs 561be84d74SDave CottlehuberORACLE_DESC= Oracle Cloud Infrastructure image 57573e7ccaSGlen BarberOPENSTACK_FORMAT=qcow2 58863975b6SBrad DavisOPENSTACK_FSLIST?= ufs 5999e908c9SGlen BarberOPENSTACK_DESC= OpenStack platform image 60e6eeac9bSColin PercivalVAGRANT_FORMAT= vmdk 61863975b6SBrad DavisVAGRANT_FSLIST?= ufs 62863975b6SBrad DavisVAGRANT_FLAVOURS?= VIRTUALBOX VMWARE 63a54bd595SBrad DavisVAGRANT-VIRTUALBOX_DESC= Vagrant Image for VirtualBox 64a54bd595SBrad DavisVAGRANT-VMWARE_DESC= Vagrant Image for VMWare 65d08ce983SGlen Barber 66e6eeac9bSColin Percival.for _CWT in ${CLOUDWARE_TYPES} 67e6eeac9bSColin Percival. if defined(${_CWT}_FLAVOURS) 68e6eeac9bSColin Percival. for _CWF in ${${_CWT}_FLAVOURS} 69e6eeac9bSColin PercivalCLOUDWARE_GEN+= ${_CWT}-${_CWF} 70e6eeac9bSColin Percival${_CWT}-${_CWF}_FORMAT?= ${${_CWT}_FORMAT} 71e6eeac9bSColin Percival${_CWT}-${_CWF}_FSLIST?= ${${_CWT}_FSLIST} 72e6eeac9bSColin Percival${_CWT}-${_CWF}_DESC?= ${${_CWT}_DESC} 73e6eeac9bSColin Percival. endfor 74e6eeac9bSColin Percival. else 75e6eeac9bSColin PercivalCLOUDWARE_GEN+= ${_CWT} 76e6eeac9bSColin Percival. endif 77e6eeac9bSColin Percival.endfor 78e6eeac9bSColin PercivalCLOUDWARE?= ${CLOUDWARE_GEN} 79e6eeac9bSColin Percival 80e2827b51SGlen Barber.for _V in TYPE BRANCH REVISION 81e2827b51SGlen Barber. if !defined(${_V}) || empty(${_V}) 82e2827b51SGlen Barber${_V}!= eval $$(awk '/^${_V}=/{print}' ${.CURDIR}/../sys/conf/newvers.sh); echo $$${_V} 83e2827b51SGlen Barber. endif 84e2827b51SGlen Barber.endfor 85e2827b51SGlen Barber 861ecaa3f7SColin Percivalemulator-portinstall: 871ecaa3f7SColin Percival.if !exists(/usr/local/bin/qemu-${TARGET_ARCH}-static) 88e50fec56SColin Percival.if exists(${PORTSDIR}/emulators/qemu-user-static/Makefile) 896f454c21SColin Percival env - UNAME_r=${UNAME_r} PATH=$$PATH \ 90e50fec56SColin Percival make -C ${PORTSDIR}/emulators/qemu-user-static \ 916f454c21SColin Percival BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \ 926f454c21SColin Percival all install clean 931ecaa3f7SColin Percival.else 941ecaa3f7SColin Percival.if !exists(/usr/local/sbin/pkg-static) 951ecaa3f7SColin Percival env ASSUME_ALWAYS_YES=yes pkg bootstrap -y 961ecaa3f7SColin Percival.endif 97e50fec56SColin Percival env ASSUME_ALWAYS_YES=yes pkg install -y emulators/qemu-user-static 981ecaa3f7SColin Percival.endif 991ecaa3f7SColin Percival.endif 10097bd53efSColin Percival touch ${.TARGET} 1011ecaa3f7SColin Percival 10292d399a3SBrooks Davis.if ${TARGET_ARCH} != ${MACHINE_ARCH} && !defined(WITHOUT_QEMU) 1037d0ee5ebSColin Percival.if ( ${TARGET_ARCH} != "i386" ) || ( ${MACHINE_ARCH} != "amd64" ) 1041ecaa3f7SColin PercivalQEMUSTATIC=/usr/local/bin/qemu-${TARGET_ARCH}-static 1057d0ee5ebSColin PercivalQEMUTGT=emulator-portinstall 1061ecaa3f7SColin Percival.endif 1071ecaa3f7SColin Percival.endif 1087d0ee5ebSColin PercivalQEMUTGT?= 1091ecaa3f7SColin Percival 110d08ce983SGlen Barber.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 111c41ba997SBrooks Davis.if (defined(WITHOUT_QEMU) && !defined(NO_ROOT)) || \ 112c41ba997SBrooks Davis (!defined(WITHOUT_QEMU) && defined(NO_ROOT)) 113c41ba997SBrooks Davis.error WITHOUT_QEMU requires NO_ROOT (and vice versa) 114c41ba997SBrooks Davis.endif 115d08ce983SGlen Barber. for _CW in ${CLOUDWARE} 116d08ce983SGlen Barber. if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF) 117d08ce983SGlen Barber${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf 118d08ce983SGlen Barber. endif 1198dec4738SColin Percival. for _FS in ${${_CW:tu}_FSLIST} 1205c213bf0SColin Percival. for _FMT in ${${_CW:tu}_FORMAT} 1215c213bf0SColin PercivalCLOUDTARGETS+= cw-${_CW:tl}-${_FS}-${_FMT} 1225c213bf0SColin PercivalCLEANDIRS+= cw-${_CW:tl}-${_FS}-${_FMT} 1235c213bf0SColin PercivalCLEANFILES+= ${_CW:tl}.${_FS}.${_FMT}.img \ 1245c213bf0SColin Percival ${_CW:tl}.${_FS}.${_FMT} \ 1255c213bf0SColin Percival ${_CW:tl}.${_FS}.${_FMT}.raw 1265c213bf0SColin Percival${_CW:tu}${_FS:tu}${_FMT:tu}IMAGE= ${_CW:tl}.${_FS}.${_FMT} 12748096f81SColin Percival 1285c213bf0SColin Percivalcw-${_CW:tl}-${_FS}-${_FMT}: ${QEMUTGT} 12948096f81SColin Percival mkdir -p ${.OBJDIR}/${.TARGET} 130ea18fc2fSGlen Barber env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \ 1311ecaa3f7SColin Percival QEMUSTATIC=${QEMUSTATIC} \ 13292d399a3SBrooks Davis WITHOUT_QEMU=${WITHOUT_QEMU:Dtrue} \ 133c41ba997SBrooks Davis NO_ROOT=${NO_ROOT:Dtrue} \ 13448096f81SColin Percival ${.CURDIR}/scripts/mk-vmimage.sh \ 1358dec4738SColin Percival -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} -F ${_FS} \ 1365c213bf0SColin Percival -i ${.OBJDIR}/${_CW:tl}.${_FS}.${_FMT}.img -s ${VMSIZE} -f ${_FMT} \ 1375c213bf0SColin Percival -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW:tu}${_FS:tu}${_FMT:tu}IMAGE} -c ${${_CW:tu}CONF} 13848096f81SColin Percival touch ${.TARGET} 1398dec4738SColin Percival. endfor 1405c213bf0SColin Percival. endfor 1418dec4738SColin Percival 1425c213bf0SColin Percival# Hardlinks from "foo.${FMT}" to "foo-${VMFS}.${FMT}". These can go away once 1435c213bf0SColin Percival# all of the cloudware code knows how to handle multiple filesystem images (or 1448dec4738SColin Percival# at least knows the name of the UFS image). 1455c213bf0SColin Percival. for _FMT in ${${_CW:tu}_FORMAT} 1465c213bf0SColin PercivalCLOUDTARGETS+= cw-${_CW:tl}-${_FMT} 1475c213bf0SColin PercivalCLEANFILES+= ${_CW:tl}.${_FMT} 1485c213bf0SColin Percival${_CW:tu}${_FMT:tu}IMAGE= ${_CW:tl}.${_FMT} 1495c213bf0SColin Percivalcw-${_CW:tl}-${_FMT}: cw-${_CW:tl}-${VMFS}-${_FMT} 1505c213bf0SColin Percival ln -f ${${_CW:tu}${VMFS:tu}${_FMT:tu}IMAGE} ${${_CW:tu}${_FMT:tu}IMAGE} 1515c213bf0SColin Percival. endfor 1525c213bf0SColin Percival 1535c213bf0SColin Percival# Targets without a disk format listed are the first disk format on the list 1545c213bf0SColin Percival. for _FS in ${${_CW:tu}_FSLIST} 1555c213bf0SColin Percival${_CW:tu}${_FS:tu}IMAGE= ${_CW:tl}.${_FS}.${${_CW:tu}_FORMAT:[1]} 1565c213bf0SColin Percivalcw-${_CW:tl}-${_FS}: cw-${_CW:tl}-${_FS}-${${_CW:tu}_FORMAT:[1]} 1575c213bf0SColin Percival. endfor 1585c213bf0SColin Percival${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT:[1]} 1595c213bf0SColin Percivalcw-${_CW:tl}: cw-${_CW:tl}-${${_CW:tu}_FORMAT:[1]} 160d08ce983SGlen Barber. endfor 161d08ce983SGlen Barber.endif 1626513e474SGlen Barber 1636513e474SGlen Barber.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 1647ffa1f14SColin PercivalCLEANFILES+= vm-image 1656513e474SGlen Barber. for FORMAT in ${VMFORMATS} 16632ae9a6bSColin Percival. for FS in ${VMFSLIST} 1677ffa1f14SColin PercivalCLEANDIRS+= vm-image-${FORMAT}-${FS} 16832ae9a6bSColin PercivalCLEANFILES+= ${FORMAT}.${FS}.img 16932ae9a6bSColin PercivalCLEANFILES+= ${VMBASE}.${FS}.${FORMAT} 17032ae9a6bSColin Percival. endfor 1716513e474SGlen Barber. endfor 1726513e474SGlen Barber.endif 1736513e474SGlen Barber 1741e7c1f17SGlen Barbervm-base: vm-image 1756513e474SGlen Barber 1769287d185SColin Percivalvm-image: ${QEMUTGT} 1776513e474SGlen Barber.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 1786513e474SGlen Barber. for FORMAT in ${VMFORMATS} 17932ae9a6bSColin Percival. for FS in ${VMFSLIST} 18097bd53efSColin Percival mkdir -p ${.OBJDIR}/${.TARGET}-${FORMAT}-${FS} 181240e2395SGlen Barber env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \ 1829287d185SColin Percival QEMUSTATIC=${QEMUSTATIC} \ 18392d399a3SBrooks Davis WITHOUT_QEMU=${WITHOUT_QEMU:Dtrue} \ 18426bb2a60SGlen Barber ${.CURDIR}/scripts/mk-vmimage.sh \ 18597bd53efSColin Percival -C ${.CURDIR}/tools/vmimage.subr \ 18697bd53efSColin Percival -d ${.OBJDIR}/${.TARGET}-${FORMAT}-${FS} -F ${FS} \ 18732ae9a6bSColin Percival -i ${.OBJDIR}/${FORMAT}.${FS}.img -s ${VMSIZE} -f ${FORMAT} \ 18832ae9a6bSColin Percival -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FS}.${FORMAT} 18932ae9a6bSColin Percival. endfor 1906513e474SGlen Barber. endfor 1916513e474SGlen Barber.endif 1926513e474SGlen Barber touch ${.TARGET} 1936513e474SGlen Barber 1947d2ef961SGlen Barbervm-cloudware: ${CLOUDTARGETS} 19599e908c9SGlen Barber 19685311c29SGlen Barberlist-vmtargets: list-cloudware 19785311c29SGlen Barber @${ECHO} 19885311c29SGlen Barber @${ECHO} "Supported virtual machine disk image formats:" 19985311c29SGlen Barber.for FORMAT in ${VMFORMATS:tu} 20085311c29SGlen Barber @${ECHO} " ${FORMAT:tl}: ${${FORMAT}_DESC}" 20185311c29SGlen Barber.endfor 20285311c29SGlen Barber 20399e908c9SGlen Barberlist-cloudware: 20499e908c9SGlen Barber.if !empty(CLOUDWARE) 20585311c29SGlen Barber @${ECHO} 20685311c29SGlen Barber @${ECHO} "Supported cloud hosting provider images:" 20799e908c9SGlen Barber. for _CW in ${CLOUDWARE} 20899e908c9SGlen Barber @${ECHO} " ${_CW:tu}: ${${_CW:tu}_DESC}" 20999e908c9SGlen Barber. endfor 21099e908c9SGlen Barber.endif 2112d4ff62fSGlen Barber 2122d4ff62fSGlen Barbervm-install: 2132d4ff62fSGlen Barber.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 2142d4ff62fSGlen Barber mkdir -p ${DESTDIR}/vmimages 2152d4ff62fSGlen Barber. for FORMAT in ${VMFORMATS} 21632ae9a6bSColin Percival. for FS in ${VMFSLIST} 21732ae9a6bSColin Percival cp -p ${VMBASE}.${FS}.${FORMAT} \ 21832ae9a6bSColin Percival ${DESTDIR}/vmimages/${OSRELEASE}-${FS}.${FORMAT} 21932ae9a6bSColin Percival. endfor 2202d4ff62fSGlen Barber. endfor 2212d4ff62fSGlen Barber. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES) 2222d4ff62fSGlen Barber. for FORMAT in ${VMFORMATS} 22332ae9a6bSColin Percival. for FS in ${VMFSLIST} 2242d4ff62fSGlen Barber # Don't keep the originals. There is a copy in ${.OBJDIR} if needed. 225*59c529f2SBrooks Davis ${XZ_CMD} -f ${DESTDIR}/vmimages/${OSRELEASE}-${FS}.${FORMAT} 22632ae9a6bSColin Percival. endfor 2272d4ff62fSGlen Barber. endfor 2282d4ff62fSGlen Barber. endif 22934187a08SGlen Barber cd ${DESTDIR}/vmimages && sha512 ${OSRELEASE}* > \ 23034187a08SGlen Barber ${DESTDIR}/vmimages/CHECKSUM.SHA512 2312d4ff62fSGlen Barber cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \ 2322d4ff62fSGlen Barber ${DESTDIR}/vmimages/CHECKSUM.SHA256 2332d4ff62fSGlen Barber.endif 2344afe7cf5SGlen Barber 2354771c2e9SColin Percivalcloud-install-BASIC-CI: 2364771c2e9SColin Percival mkdir -p ${DESTDIR}/ciimages 2374771c2e9SColin Percival.for _FS in ${BASIC-CI_FSLIST} 2384771c2e9SColin Percival. for _FMT in ${BASIC-CI_FORMAT} 2394771c2e9SColin Percival cp -p ${.OBJDIR}/${BASIC-CI${_FS:tu}${_FMT:tu}IMAGE} \ 2404771c2e9SColin Percival ${DESTDIR}/ciimages/${OSRELEASE}-BASIC-CI-${_FS}.${_FMT} 241*59c529f2SBrooks Davis ${XZ_CMD} -f ${DESTDIR}/ciimages/${OSRELEASE}-BASIC-CI-${_FS}.${_FMT} 2424771c2e9SColin Percival. endfor 2434771c2e9SColin Percival.endfor 2444771c2e9SColin Percival cd ${DESTDIR}/ciimages && sha512 ${OSRELEASE}* > \ 2454771c2e9SColin Percival ${DESTDIR}/ciimages/CHECKSUM.SHA512 2464771c2e9SColin Percival cd ${DESTDIR}/ciimages && sha256 ${OSRELEASE}* > \ 2474771c2e9SColin Percival ${DESTDIR}/ciimages/CHECKSUM.SHA256 2484771c2e9SColin Percival 2494771c2e9SColin Percivalcloud-install-BASIC-CLOUDINIT: 2504771c2e9SColin Percival mkdir -p ${DESTDIR}/vmimages 2514771c2e9SColin Percival.for _FS in ${BASIC-CLOUDINIT_FSLIST} 2524771c2e9SColin Percival. for _FMT in ${BASIC-CLOUDINIT_FORMAT} 2534771c2e9SColin Percival cp -p ${.OBJDIR}/${BASIC-CLOUDINIT${_FS:tu}${_FMT:tu}IMAGE} \ 25435623cccSColin Percival ${DESTDIR}/vmimages/${OSRELEASE}-BASIC-CLOUDINIT-${_FS}.${_FMT} 255*59c529f2SBrooks Davis ${XZ_CMD} -f ${DESTDIR}/vmimages/${OSRELEASE}-BASIC-CLOUDINIT-${_FS}.${_FMT} 2564771c2e9SColin Percival. endfor 2574771c2e9SColin Percival.endfor 2584771c2e9SColin Percival cd ${DESTDIR}/vmimages && sha512 ${OSRELEASE}* > \ 2594771c2e9SColin Percival ${DESTDIR}/vmimages/CHECKSUM.SHA512 2604771c2e9SColin Percival cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \ 2614771c2e9SColin Percival ${DESTDIR}/vmimages/CHECKSUM.SHA256 2624771c2e9SColin Percival 2634771c2e9SColin PercivalCLOUD_INSTALL_TGTS= 2644771c2e9SColin Percival.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) 2654771c2e9SColin Percival. for _CW in ${CLOUDWARE} 2664771c2e9SColin Percival. if target(cloud-install-${_CW}) 2674771c2e9SColin PercivalCLOUD_INSTALL_TGTS+= cloud-install-${_CW} 2684771c2e9SColin Percival. endif 2694771c2e9SColin Percival. endfor 2704771c2e9SColin Percival.endif 2714771c2e9SColin Percivalcloud-install: ${CLOUD_INSTALL_TGTS} 2724771c2e9SColin Percival 2734afe7cf5SGlen Barber.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 274ce7756fdSColin Percivalvm-release: ${VMTARGETS} 275ce7756fdSColin Percival.else 276ce7756fdSColin Percivalvm-release: 2774afe7cf5SGlen Barber.endif 2784afe7cf5SGlen Barber 2794afe7cf5SGlen Barber.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 280ce7756fdSColin Percivalcloudware-release: ${CLOUDTARGETS} 281ce7756fdSColin Percival.else 282ce7756fdSColin Percivalcloudware-release: 2834afe7cf5SGlen Barber.endif 2840e44fa6cSGlen Barber 285873fc703SGlen Barber.include "${.CURDIR}/Makefile.azure" 286fbece760SLi-Wen Hsu.include "${.CURDIR}/Makefile.ec2" 2877acb5381SColin Percival.include "${.CURDIR}/Makefile.firecracker" 288eb64cd58SGlen Barber.include "${.CURDIR}/Makefile.gce" 2890ce9a414SDave Cottlehuber.include "${.CURDIR}/Makefile.oracle" 29041f7db3aSBrad Davis.include "${.CURDIR}/Makefile.vagrant" 291c883b6fdSGlen Barber.include "${.CURDIR}/Makefile.inc1" 292