diff options
Diffstat (limited to 'release/Makefile.vm')
-rw-r--r-- | release/Makefile.vm | 141 |
1 files changed, 92 insertions, 49 deletions
diff --git a/release/Makefile.vm b/release/Makefile.vm index 72b150022ef7..a52e3b9bac81 100644 --- a/release/Makefile.vm +++ b/release/Makefile.vm @@ -1,5 +1,4 @@ # -# $FreeBSD$ # # # Makefile for building virtual machine and cloud provider disk images. @@ -7,7 +6,9 @@ VMTARGETS= vm-image VMFORMATS?= vhd vmdk qcow2 raw -VMSIZE?= 4096m +VMSIZE?= 5120m +VMFS?= ufs +VMFSLIST?= ufs zfs SWAPSIZE?= 1g VMBASE?= vm @@ -16,32 +17,55 @@ VMDK_DESC= VMWare, VirtualBox disk image QCOW2_DESC= Qemu, KVM disk image RAW_DESC= Unformatted raw disk image -CLOUDWARE?= BASIC-CI \ +CLOUDWARE_TYPES?= AZURE \ + BASIC-CI \ + BASIC-CLOUDINIT \ EC2 \ GCE \ - VAGRANT-VIRTUALBOX \ - VAGRANT-VMWARE + OCI \ + VAGRANT AZURE_FORMAT= vhdf +AZURE_FSLIST?= ufs zfs AZURE_DESC= Microsoft Azure platform image -AZURE_DISK= ${OSRELEASE}.${AZURE_FORMAT} BASIC-CI_FORMAT= raw +BASIC-CI_FSLIST?= ufs BASIC-CI_DESC= Image for CI -BASIC-CI_DISK= ${OSRELEASE}.${BASIC-CI_FORMAT} +BASIC-CLOUDINIT_FORMAT= raw +BASIC-CLOUDINIT_FSLIST?= ufs zfs +BASIC-CLOUDINIT_DESC?= Images for VM with cloudinit disk config support EC2_FORMAT= raw -EC2_DESC= Amazon EC2 image -EC2_DISK= ${OSRELEASE}.${EC2_FORMAT} +EC2_FSLIST?= ufs zfs +EC2_FLAVOURS?= BASE CLOUD-INIT +EC2-BASE_DESC= Amazon EC2 image +EC2-CLOUD-INIT_DESC= Amazon EC2 Cloud-Init image GCE_FORMAT= raw +GCE_FSLIST?= ufs zfs GCE_DESC= Google Compute Engine image -GCE_DISK= disk.${GCE_FORMAT} +OCI_FORMAT= qcow2 +OCI_FSLIST?= ufs +OCI_DESC= Oracle Cloud Infrastructure image OPENSTACK_FORMAT=qcow2 +OPENSTACK_FSLIST?= ufs OPENSTACK_DESC= OpenStack platform image -OPENSTACK_DISK= ${OSRELEASE}.${OPENSTACK_FORMAT} -VAGRANT-VIRTUALBOX_FORMAT= vmdk +VAGRANT_FORMAT= vmdk +VAGRANT_FSLIST?= ufs +VAGRANT_FLAVOURS?= VIRTUALBOX VMWARE VAGRANT-VIRTUALBOX_DESC= Vagrant Image for VirtualBox -VAGRANT-VIRTUALBOX_DISK= ${OSRELEASE}.vbox.${VAGRANT_FORMAT} -VAGRANT-VMWARE_FORMAT= vmdk VAGRANT-VMWARE_DESC= Vagrant Image for VMWare -VAGRANT-VMWARE_DISK= ${OSRELEASE}.vmware.${VAGRANT_FORMAT} + +.for _CWT in ${CLOUDWARE_TYPES} +. if defined(${_CWT}_FLAVOURS) +. for _CWF in ${${_CWT}_FLAVOURS} +CLOUDWARE_GEN+= ${_CWT}-${_CWF} +${_CWT}-${_CWF}_FORMAT?= ${${_CWT}_FORMAT} +${_CWT}-${_CWF}_FSLIST?= ${${_CWT}_FSLIST} +${_CWT}-${_CWF}_DESC?= ${${_CWT}_DESC} +. endfor +. else +CLOUDWARE_GEN+= ${_CWT} +. endif +.endfor +CLOUDWARE?= ${CLOUDWARE_GEN} .for _V in TYPE BRANCH REVISION . if !defined(${_V}) || empty(${_V}) @@ -50,8 +74,6 @@ ${_V}!= eval $$(awk '/^${_V}=/{print}' ${.CURDIR}/../sys/conf/newvers.sh); echo .endfor emulator-portinstall: -.if ${TARGET_ARCH} != ${MACHINE_ARCH} -.if ( ${TARGET_ARCH} != "i386" ) || ( ${MACHINE_ARCH} != "amd64" ) .if !exists(/usr/local/bin/qemu-${TARGET_ARCH}-static) .if exists(${PORTSDIR}/emulators/qemu-user-static/Makefile) env - UNAME_r=${UNAME_r} PATH=$$PATH make -C ${PORTSDIR}/emulators/qemu-user-static BATCH=1 all install clean @@ -62,53 +84,58 @@ emulator-portinstall: env ASSUME_ALWAYS_YES=yes pkg install -y emulators/qemu-user-static .endif .endif + touch ${.TARGET} +.if ${TARGET_ARCH} != ${MACHINE_ARCH} +.if ( ${TARGET_ARCH} != "i386" ) || ( ${MACHINE_ARCH} != "amd64" ) QEMUSTATIC=/usr/local/bin/qemu-${TARGET_ARCH}-static +QEMUTGT=emulator-portinstall .endif .endif +QEMUTGT?= .if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) . for _CW in ${CLOUDWARE} -CLOUDTARGETS+= cw-${_CW:tl} -CLEANDIRS+= cw-${_CW:tl} -CLEANFILES+= ${_CW:tl}.img \ - ${_CW:tl}.${${_CW:tu}_FORMAT} \ - ${_CW:tl}.${${_CW:tu}_FORMAT}.raw \ - cw${_CW:tl}-package -CLOUDPACKAGE+= cw${_CW:tl}-package -${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT} . if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF) ${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf . endif - -cw-${_CW:tl}: emulator-portinstall +. for _FS in ${${_CW:tu}_FSLIST} +CLOUDTARGETS+= cw-${_CW:tl}-${_FS} +CLEANDIRS+= cw-${_CW:tl}-${_FS} +CLEANFILES+= ${_CW:tl}.${_FS}.img \ + ${_CW:tl}.${_FS}.${${_CW:tu}_FORMAT} \ + ${_CW:tl}.${_FS}.${${_CW:tu}_FORMAT}.raw +${_CW:tu}${_FS:tu}IMAGE= ${_CW:tl}.${_FS}.${${_CW:tu}_FORMAT} + +cw-${_CW:tl}-${_FS}: ${QEMUTGT} mkdir -p ${.OBJDIR}/${.TARGET} env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \ QEMUSTATIC=${QEMUSTATIC} \ ${.CURDIR}/scripts/mk-vmimage.sh \ - -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ - -i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW:tu}_FORMAT} \ - -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW:tu}IMAGE} -c ${${_CW:tu}CONF} - touch ${.TARGET} - -cw${_CW:tl}-package: - @# Special target to handle packaging cloud images in the formats - @# specific to each hosting provider. -.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh) - env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ - ${.CURDIR}/tools/${_CW:tl}-package.sh \ - -D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR} -.endif + -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} -F ${_FS} \ + -i ${.OBJDIR}/${_CW:tl}.${_FS}.img -s ${VMSIZE} -f ${${_CW:tu}_FORMAT} \ + -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW:tu}${_FS:tu}IMAGE} -c ${${_CW:tu}CONF} touch ${.TARGET} +. endfor +# Hardlinks from "foo.bar" to "foo-${VMFS}.bar". These can go away once all +# of the cloudware code knows how to handle multiple filesystem images (or +# at least knows the name of the UFS image). +CLOUDTARGETS+= cw-${_CW:tl} +CLEANFILES+= ${_CW:tl}.${${_CW:tu}_FORMAT} +${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT} +cw-${_CW:tl}: cw-${_CW:tl}-${VMFS} + ln -f ${${_CW:tu}${VMFS:tu}IMAGE} ${${_CW:tu}IMAGE} . endfor .endif .if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) CLEANDIRS+= ${VMTARGETS} . for FORMAT in ${VMFORMATS} -CLEANFILES+= ${FORMAT}.img -CLEANFILES+= ${VMBASE}.${FORMAT} +. for FS in ${VMFSLIST} +CLEANFILES+= ${FORMAT}.${FS}.img +CLEANFILES+= ${VMBASE}.${FS}.${FORMAT} +. endfor . endfor .endif @@ -117,12 +144,15 @@ vm-base: vm-image vm-image: .if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) . for FORMAT in ${VMFORMATS} - mkdir -p ${.OBJDIR}/${.TARGET} +. for FS in ${VMFSLIST} + mkdir -p ${.OBJDIR}/${.TARGET}-${FORMAT}-${FS} env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \ ${.CURDIR}/scripts/mk-vmimage.sh \ - -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ - -i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \ - -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT} + -C ${.CURDIR}/tools/vmimage.subr \ + -d ${.OBJDIR}/${.TARGET}-${FORMAT}-${FS} -F ${FS} \ + -i ${.OBJDIR}/${FORMAT}.${FS}.img -s ${VMSIZE} -f ${FORMAT} \ + -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FS}.${FORMAT} +. endfor . endfor .endif touch ${.TARGET} @@ -149,15 +179,27 @@ vm-install: .if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) mkdir -p ${DESTDIR}/vmimages . for FORMAT in ${VMFORMATS} - cp -p ${VMBASE}.${FORMAT} \ - ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} +. for FS in ${VMFSLIST} + cp -p ${VMBASE}.${FS}.${FORMAT} \ + ${DESTDIR}/vmimages/${OSRELEASE}-${FS}.${FORMAT} +. endfor . endfor . if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES) . for FORMAT in ${VMFORMATS} +. for FS in ${VMFSLIST} # Don't keep the originals. There is a copy in ${.OBJDIR} if needed. - ${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} + ${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}-${FS}.${FORMAT} +. endfor . endfor . endif + # Compatibility hardlinks from "foo.bar" to "foo-${VMFS}.bar". +. for FORMAT in ${VMFORMATS} +. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES) + ln -f ${DESTDIR}/vmimages/${OSRELEASE}-${VMFS}.${FORMAT}.xz ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}.xz +. else + ln -f ${DESTDIR}/vmimages/${OSRELEASE}-${VMFS}.${FORMAT} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} +. endif +. endfor cd ${DESTDIR}/vmimages && sha512 ${OSRELEASE}* > \ ${DESTDIR}/vmimages/CHECKSUM.SHA512 cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \ @@ -176,6 +218,7 @@ cloudware-release: .include "${.CURDIR}/Makefile.azure" .include "${.CURDIR}/Makefile.ec2" +.include "${.CURDIR}/Makefile.firecracker" .include "${.CURDIR}/Makefile.gce" .include "${.CURDIR}/Makefile.vagrant" .include "${.CURDIR}/Makefile.inc1" |