Makefile.vm revision 284882
1273823Sgjb#
2273823Sgjb# $FreeBSD: head/release/Makefile.vm 284882 2015-06-27 01:29:59Z gjb $
3273823Sgjb#
4273823Sgjb#
5273823Sgjb# Makefile for building virtual machine and cloud provider disk images.
6273823Sgjb#
7273823Sgjb
8277458SgjbVMTARGETS=	vm-image
9273823SgjbVMFORMATS?=	vhd vmdk qcow2 raw
10273823SgjbVMSIZE?=	20G
11273823SgjbVMBASE?=	vm
12273823Sgjb
13277458SgjbVHD_DESC=	Azure, VirtualPC, Hyper-V, Xen disk image
14277458SgjbVMDK_DESC=	VMWare, VirtualBox disk image
15277458SgjbQCOW2_DESC=	Qemu, KVM disk image
16277458SgjbRAW_DESC=	Unformatted raw disk image
17277458Sgjb
18277458SgjbCLOUDWARE?=	AZURE \
19280879Scperciva		EC2 \
20277458Sgjb		GCE \
21277458Sgjb		OPENSTACK
22277458SgjbAZURE_FORMAT=	vhdf
23277458SgjbAZURE_DESC=	Microsoft Azure platform image
24279249SgjbAZURE_DISK=	${OSRELEASE}.${AZURE_FORMAT}
25280879ScpercivaEC2_FORMAT=	raw
26280879ScpercivaEC2_DESC=	Amazon EC2 image
27280879ScpercivaEC2_DISK=	${OSRELEASE}.${EC2_FORMAT}
28277458SgjbGCE_FORMAT=	raw
29277458SgjbGCE_DESC=	Google Compute Engine image
30279249SgjbGCE_DISK=	disk.${GCE_FORMAT}
31277458SgjbOPENSTACK_FORMAT=qcow2
32277458SgjbOPENSTACK_DESC=	OpenStack platform image
33279249SgjbOPENSTACK_DISK=	${OSRELEASE}.${OPENSTACK_FORMAT}
34277458Sgjb
35277458Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
36277458Sgjb. for _CW in ${CLOUDWARE}
37279249SgjbCLOUDTARGETS+=	cw-${_CW:tl}
38279249SgjbCLEANDIRS+=	cw-${_CW:tl}
39277458SgjbCLEANFILES+=	${_CW:tl}.img \
40277458Sgjb		${_CW:tl}.${${_CW:tu}_FORMAT} \
41279257Sgjb		${_CW:tl}.${${_CW:tu}_FORMAT}.raw \
42279257Sgjb		cw${_CW:tl}-package
43279249SgjbCLOUDINSTALL+=	cw${_CW:tl}-install
44279257SgjbCLOUDPACKAGE+=	cw${_CW:tl}-package
45277458Sgjb${_CW:tu}IMAGE=	${_CW:tl}.${${_CW:tu}_FORMAT}
46277458Sgjb.  if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF)
47277458Sgjb${_CW:tu}CONF?=	${.CURDIR}/tools/${_CW:tl}.conf
48277458Sgjb.  endif
49277458Sgjb
50279249Sgjbcw-${_CW:tl}:
51277458Sgjb	mkdir -p ${.OBJDIR}/${.TARGET}
52277458Sgjb	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
53277458Sgjb		${.CURDIR}/scripts/mk-vmimage.sh \
54277458Sgjb		-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
55277458Sgjb		-i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \
56277458Sgjb		-S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF}
57277458Sgjb	touch ${.TARGET}
58279249Sgjb
59279249Sgjbcw${_CW:tl}-install:
60279249Sgjb	mkdir -p ${DESTDIR}/${_CW:tl}
61279249Sgjb	cp -p ${${_CW}IMAGE} \
62279249Sgjb		${DESTDIR}/${_CW:tl}/${${_CW}_DISK}
63279249Sgjb	cd ${DESTDIR}/${_CW:tl} && sha256 ${${_CW}_DISK}* > \
64279249Sgjb		${DESTDIR}/${_CW:tl}/CHECKSUM.SHA256
65279249Sgjb	cd ${DESTDIR}/${_CW:tl} && md5 ${${_CW}_DISK}* > \
66279249Sgjb		${DESTDIR}/${_CW:tl}/CHECKSUM.MD5
67279249Sgjb
68279257Sgjbcw${_CW:tl}-package:
69279257Sgjb	@# Special target to handle packaging cloud images in the formats
70279257Sgjb	@# specific to each hosting provider.
71279257Sgjb.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh)
72279257Sgjb	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
73279257Sgjb		${.CURDIR}/tools/${_CW:tl}-package.sh \
74279257Sgjb		-D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR}
75279257Sgjb.endif
76279257Sgjb	touch ${.TARGET}
77279257Sgjb
78277458Sgjb. endfor
79277458Sgjb.endif
80277458Sgjb
81273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
82273823SgjbCLEANDIRS+=	${VMTARGETS}
83273823Sgjb. for FORMAT in ${VMFORMATS}
84277609SgjbCLEANFILES+=	${FORMAT}.img
85273823SgjbCLEANFILES+=	${VMBASE}.${FORMAT}
86273823Sgjb. endfor
87273823Sgjb.endif
88273823Sgjb
89277458Sgjbvm-base:	vm-image
90273823Sgjb
91277458Sgjbvm-image:
92273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
93277458Sgjb. for FORMAT in ${VMFORMATS}
94277458Sgjb	mkdir -p ${.OBJDIR}/${.TARGET}
95273823Sgjb	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
96277458Sgjb		${.CURDIR}/scripts/mk-vmimage.sh \
97277458Sgjb		-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
98277609Sgjb		-i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \
99277458Sgjb		-S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT}
100277458Sgjb. endfor
101273823Sgjb.endif
102273823Sgjb	touch ${.TARGET}
103273823Sgjb
104277458Sgjbvm-cloudware:	${CLOUDTARGETS}
105277458Sgjb
106277458Sgjblist-vmtargets:	list-cloudware
107277458Sgjb	@${ECHO}
108277458Sgjb	@${ECHO} "Supported virtual machine disk image formats:"
109277458Sgjb.for FORMAT in ${VMFORMATS:tu}
110277458Sgjb	@${ECHO} "  ${FORMAT:tl}: ${${FORMAT}_DESC}"
111277458Sgjb.endfor
112277458Sgjb
113277458Sgjblist-cloudware:
114277458Sgjb.if !empty(CLOUDWARE)
115277458Sgjb	@${ECHO}
116277458Sgjb	@${ECHO} "Supported cloud hosting provider images:"
117277458Sgjb. for _CW in ${CLOUDWARE}
118277458Sgjb	@${ECHO} "  ${_CW:tu}: ${${_CW:tu}_DESC}"
119277458Sgjb. endfor
120277458Sgjb.endif
121277458Sgjb
122277458Sgjbvm-install:
123273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
124277458Sgjb	mkdir -p ${DESTDIR}/vmimages
125277458Sgjb. for FORMAT in ${VMFORMATS}
126277458Sgjb	cp -p ${VMBASE}.${FORMAT} \
127277458Sgjb		${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
128277458Sgjb. endfor
129277458Sgjb. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES)
130273823Sgjb.  for FORMAT in ${VMFORMATS}
131277458Sgjb	# Don't keep the originals.  There is a copy in ${.OBJDIR} if needed.
132278926Srpaulo	${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
133273823Sgjb.  endfor
134273823Sgjb. endif
135277458Sgjb	cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \
136277458Sgjb		${DESTDIR}/vmimages/CHECKSUM.SHA256
137277458Sgjb	cd ${DESTDIR}/vmimages && md5 ${OSRELEASE}* > \
138277458Sgjb		${DESTDIR}/vmimages/CHECKSUM.MD5
139273823Sgjb.endif
140277536Sgjb
141277536Sgjbvm-release:
142277536Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
143277536Sgjb	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS}
144277536Sgjb.endif
145277536Sgjb
146277536Sgjbcloudware-release:
147277536Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
148277536Sgjb	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS}
149277536Sgjb.endif
150279249Sgjb
151279249Sgjbcloudware-install:
152279249Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
153279249Sgjb	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDINSTALL}
154279249Sgjb.endif
155280928Scperciva
156280928Scperciva.include "${.CURDIR}/Makefile.ec2"
157284567Sgjb.include "${.CURDIR}/Makefile.azure"
158284882Sgjb.include "${.CURDIR}/Makefile.gce"
159