xref: /freebsd/release/Makefile.vm (revision 2d4ff62f0094f8635ffad8d72dbc2f89e234e8fd)
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
106513e474SGlen BarberVMSIZE?=	20G
116513e474SGlen BarberVMBASE?=	vm
12d08ce983SGlen Barber
1385311c29SGlen BarberVHD_DESC=	Azure, VirtualPC, Hyper-V, Xen disk image
1485311c29SGlen BarberVMDK_DESC=	VMWare, VirtualBox disk image
1585311c29SGlen BarberQCOW2_DESC=	Qemu, KVM disk image
1685311c29SGlen BarberRAW_DESC=	Unformatted raw disk image
1785311c29SGlen Barber
18573e7ccaSGlen BarberCLOUDWARE?=	AZURE \
195f87b8f5SGlen Barber		GCE \
20573e7ccaSGlen Barber		OPENSTACK
21f27438c7SGlen BarberAZURE_FORMAT=	vhdf
2299e908c9SGlen BarberAZURE_DESC=	Microsoft Azure platform image
235f87b8f5SGlen BarberGCE_FORMAT=	raw
245f87b8f5SGlen BarberGCE_DESC=	Google Compute Engine image
25573e7ccaSGlen BarberOPENSTACK_FORMAT=qcow2
2699e908c9SGlen BarberOPENSTACK_DESC=	OpenStack platform image
27d08ce983SGlen Barber
28d08ce983SGlen Barber.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
29d08ce983SGlen Barber. for _CW in ${CLOUDWARE}
30d08ce983SGlen BarberCLOUDTARGETS+=	vm-${_CW:tl}
31d08ce983SGlen BarberCLEANDIRS+=	vm-${_CW:tl}
32d08ce983SGlen BarberCLEANFILES+=	${_CW:tl}.img \
33d08ce983SGlen Barber		${_CW:tl}.${${_CW:tu}_FORMAT} \
34d08ce983SGlen Barber		${_CW:tl}.${${_CW:tu}_FORMAT}.raw
35f27438c7SGlen Barber${_CW:tu}IMAGE=	${_CW:tl}.${${_CW:tu}_FORMAT}
36d08ce983SGlen Barber.  if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF)
37d08ce983SGlen Barber${_CW:tu}CONF?=	${.CURDIR}/tools/${_CW:tl}.conf
38d08ce983SGlen Barber.  endif
3948096f81SColin Percival
4048096f81SColin Percivalvm-${_CW:tl}:
4148096f81SColin Percival	mkdir -p ${.OBJDIR}/${.TARGET}
4248096f81SColin Percival	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
4348096f81SColin Percival		${.CURDIR}/scripts/mk-vmimage.sh \
4448096f81SColin Percival		-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
4548096f81SColin Percival		-i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \
4648096f81SColin Percival		-S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF}
4748096f81SColin Percival	touch ${.TARGET}
48d08ce983SGlen Barber. endfor
49d08ce983SGlen Barber.endif
506513e474SGlen Barber
516513e474SGlen Barber.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
526513e474SGlen BarberCLEANDIRS+=	${VMTARGETS}
536513e474SGlen BarberCLEANFILES+=	${VMBASE}.img
546513e474SGlen Barber. for FORMAT in ${VMFORMATS}
556513e474SGlen BarberCLEANFILES+=	${VMBASE}.${FORMAT}
566513e474SGlen Barber. endfor
576513e474SGlen Barber.endif
586513e474SGlen Barber
591e7c1f17SGlen Barbervm-base:	vm-image
606513e474SGlen Barber
611e7c1f17SGlen Barbervm-image:
626513e474SGlen Barber.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
636513e474SGlen Barber. for FORMAT in ${VMFORMATS}
641c34bf95SGlen Barber	mkdir -p ${.OBJDIR}/${.TARGET}
656513e474SGlen Barber	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
6626bb2a60SGlen Barber		${.CURDIR}/scripts/mk-vmimage.sh \
671c34bf95SGlen Barber		-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
6826bb2a60SGlen Barber		-i ${.OBJDIR}/${VMBASE}.img -s ${VMSIZE} -f ${FORMAT} \
6926bb2a60SGlen Barber		-S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT}
706513e474SGlen Barber. endfor
716513e474SGlen Barber.endif
726513e474SGlen Barber	touch ${.TARGET}
736513e474SGlen Barber
747d2ef961SGlen Barbervm-cloudware:	${CLOUDTARGETS}
7599e908c9SGlen Barber
7685311c29SGlen Barberlist-vmtargets:	list-cloudware
7785311c29SGlen Barber	@${ECHO}
7885311c29SGlen Barber	@${ECHO} "Supported virtual machine disk image formats:"
7985311c29SGlen Barber.for FORMAT in ${VMFORMATS:tu}
8085311c29SGlen Barber	@${ECHO} "  ${FORMAT:tl}: ${${FORMAT}_DESC}"
8185311c29SGlen Barber.endfor
8285311c29SGlen Barber
8399e908c9SGlen Barberlist-cloudware:
8499e908c9SGlen Barber.if !empty(CLOUDWARE)
8585311c29SGlen Barber	@${ECHO}
8685311c29SGlen Barber	@${ECHO} "Supported cloud hosting provider images:"
8799e908c9SGlen Barber. for _CW in ${CLOUDWARE}
8899e908c9SGlen Barber	@${ECHO} "  ${_CW:tu}: ${${_CW:tu}_DESC}"
8999e908c9SGlen Barber. endfor
9099e908c9SGlen Barber.endif
91*2d4ff62fSGlen Barber
92*2d4ff62fSGlen Barbervm-install:
93*2d4ff62fSGlen Barber.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
94*2d4ff62fSGlen Barber	mkdir -p ${DESTDIR}/vmimages
95*2d4ff62fSGlen Barber. for FORMAT in ${VMFORMATS}
96*2d4ff62fSGlen Barber	cp -p ${VMBASE}.${FORMAT} \
97*2d4ff62fSGlen Barber		${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
98*2d4ff62fSGlen Barber. endfor
99*2d4ff62fSGlen Barber. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES)
100*2d4ff62fSGlen Barber# This is very time consuming, so defer it after the images are moved to
101*2d4ff62fSGlen Barber# the DESTDIR.
102*2d4ff62fSGlen Barber.  for FORMAT in ${VMFORMATS}
103*2d4ff62fSGlen Barber	# Don't keep the originals.  There is a copy in ${.OBJDIR} if needed.
104*2d4ff62fSGlen Barber	${XZCMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
105*2d4ff62fSGlen Barber.  endfor
106*2d4ff62fSGlen Barber. endif
107*2d4ff62fSGlen Barber	cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \
108*2d4ff62fSGlen Barber		${DESTDIR}/vmimages/CHECKSUM.SHA256
109*2d4ff62fSGlen Barber	cd ${DESTDIR}/vmimages && md5 ${OSRELEASE}* > \
110*2d4ff62fSGlen Barber		${DESTDIR}/vmimages/CHECKSUM.MD5
111*2d4ff62fSGlen Barber.endif
112