freebsd-skq/release/Makefile.vm
gjb 6c9b1bee2d MFC r284893, r284895-r284897, r284942, r284968, r284996, r285005:
r284893 (brd):
  Add initial support for building Vagrant images for VMWare.
  Next steps will be adding Virtualbox support and uploading
  to Hashicorp Atlas for others to consume.

 r284895:
  Add default VAGRANT_IMG variable.

 r284896:
  Remove _ACCOUNT and add _USERNAME, _NAME, _VERSION for the
  VAGRANT_${VAR} variables extracted from VAGRANT_UPLOAD_CONF.

  Set ATLAS_${VAR} to VAGRANT_${VAR} if VAGRANT_UPLOAD_CONF
  is set.  There is intent to intentionally have separate
  variants of configuration entries, but the defaults do not
  yet have any reason to be different.

 r284897:
  Instead of hard-coding the PROVIDERS for upload, add the
  VAGRANT_PROVIDERS variable.  Right now, it defaults to only
  vmware_desktop, virtualbox support is to follow at some point.

  While here, fix the hashicorp URL: s/vagrant/atlas/, which
  was result of a sed(1) replace (and my fault).

 r284942 (brd):
  Add Support for uploading Vagrant images to Hashicorp Atlas.

 r284968:
  Default the VAGRANT_VERSION to ${REVISION}-${BRANCH} if
  not set, which expands to '11.0-CURRENT', for example.

  If the branch is -CURRENT, -STABLE, or -PRERELEASE, suffix
  the VAGRANT_VERSION with the snapshot date.

 r284996:
  Fix the gcloud port/package name.

 r285005:
  Remove the HH-MM suffix from the build date suffix.

  It was useful when working out several kinks when testing
  automated image uploading when retrying was necessary, but
  now it is making things much too messy.

Sponsored by:	The FreeBSD Foundation
2015-07-02 16:17:05 +00:00

164 lines
4.5 KiB
Makefile

#
# $FreeBSD$
#
#
# Makefile for building virtual machine and cloud provider disk images.
#
VMTARGETS= vm-image
VMFORMATS?= vhd vmdk qcow2 raw
VMSIZE?= 20G
VMBASE?= vm
VHD_DESC= Azure, VirtualPC, Hyper-V, Xen disk image
VMDK_DESC= VMWare, VirtualBox disk image
QCOW2_DESC= Qemu, KVM disk image
RAW_DESC= Unformatted raw disk image
CLOUDWARE?= AZURE \
EC2 \
GCE \
OPENSTACK \
VAGRANT
AZURE_FORMAT= vhdf
AZURE_DESC= Microsoft Azure platform image
AZURE_DISK= ${OSRELEASE}.${AZURE_FORMAT}
EC2_FORMAT= raw
EC2_DESC= Amazon EC2 image
EC2_DISK= ${OSRELEASE}.${EC2_FORMAT}
GCE_FORMAT= raw
GCE_DESC= Google Compute Engine image
GCE_DISK= disk.${GCE_FORMAT}
OPENSTACK_FORMAT=qcow2
OPENSTACK_DESC= OpenStack platform image
OPENSTACK_DISK= ${OSRELEASE}.${OPENSTACK_FORMAT}
VAGRANT_FORMAT= vmdk
VAGRANT_DESC= Vagrant Image
VAGRANT_DISK= ${OSRELEASE}.${VAGRANT_FORMAT}
.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
CLOUDINSTALL+= cw${_CW:tl}-install
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}:
mkdir -p ${.OBJDIR}/${.TARGET}
env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
${.CURDIR}/scripts/mk-vmimage.sh \
-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
-i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \
-S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF}
touch ${.TARGET}
cw${_CW:tl}-install:
mkdir -p ${DESTDIR}/${_CW:tl}
cp -p ${${_CW}IMAGE} \
${DESTDIR}/${_CW:tl}/${${_CW}_DISK}
cd ${DESTDIR}/${_CW:tl} && sha256 ${${_CW}_DISK}* > \
${DESTDIR}/${_CW:tl}/CHECKSUM.SHA256
cd ${DESTDIR}/${_CW:tl} && md5 ${${_CW}_DISK}* > \
${DESTDIR}/${_CW:tl}/CHECKSUM.MD5
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
touch ${.TARGET}
. endfor
.endif
.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
CLEANDIRS+= ${VMTARGETS}
. for FORMAT in ${VMFORMATS}
CLEANFILES+= ${FORMAT}.img
CLEANFILES+= ${VMBASE}.${FORMAT}
. endfor
.endif
vm-base: vm-image
vm-image:
.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
. for FORMAT in ${VMFORMATS}
mkdir -p ${.OBJDIR}/${.TARGET}
env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
${.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}
. endfor
.endif
touch ${.TARGET}
vm-cloudware: ${CLOUDTARGETS}
list-vmtargets: list-cloudware
@${ECHO}
@${ECHO} "Supported virtual machine disk image formats:"
.for FORMAT in ${VMFORMATS:tu}
@${ECHO} " ${FORMAT:tl}: ${${FORMAT}_DESC}"
.endfor
list-cloudware:
.if !empty(CLOUDWARE)
@${ECHO}
@${ECHO} "Supported cloud hosting provider images:"
. for _CW in ${CLOUDWARE}
@${ECHO} " ${_CW:tu}: ${${_CW:tu}_DESC}"
. endfor
.endif
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}
. endfor
. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES)
. for FORMAT in ${VMFORMATS}
# Don't keep the originals. There is a copy in ${.OBJDIR} if needed.
${XZCMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
. endfor
. endif
cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \
${DESTDIR}/vmimages/CHECKSUM.SHA256
cd ${DESTDIR}/vmimages && md5 ${OSRELEASE}* > \
${DESTDIR}/vmimages/CHECKSUM.MD5
.endif
vm-release:
.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS}
.endif
cloudware-release:
.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS}
.endif
cloudware-install:
.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDINSTALL}
.endif
.include "${.CURDIR}/Makefile.ec2"
.include "${.CURDIR}/Makefile.azure"
.include "${.CURDIR}/Makefile.gce"
.include "${.CURDIR}/Makefile.vagrant"