Makefile.vm revision 285722
1273823Sgjb#
2273823Sgjb# $FreeBSD: head/release/Makefile.vm 285722 2015-07-20 16:27:44Z brd $
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 \
21284893Sbrd		OPENSTACK \
22285722Sbrd		VAGRANT-VIRTUALBOX \
23285722Sbrd		VAGRANT-VMWARE
24277458SgjbAZURE_FORMAT=	vhdf
25277458SgjbAZURE_DESC=	Microsoft Azure platform image
26279249SgjbAZURE_DISK=	${OSRELEASE}.${AZURE_FORMAT}
27280879ScpercivaEC2_FORMAT=	raw
28280879ScpercivaEC2_DESC=	Amazon EC2 image
29280879ScpercivaEC2_DISK=	${OSRELEASE}.${EC2_FORMAT}
30277458SgjbGCE_FORMAT=	raw
31277458SgjbGCE_DESC=	Google Compute Engine image
32279249SgjbGCE_DISK=	disk.${GCE_FORMAT}
33277458SgjbOPENSTACK_FORMAT=qcow2
34277458SgjbOPENSTACK_DESC=	OpenStack platform image
35279249SgjbOPENSTACK_DISK=	${OSRELEASE}.${OPENSTACK_FORMAT}
36285722SbrdVAGRANT-VIRTUALBOX_FORMAT=	vmdk
37285722SbrdVAGRANT-VIRTUALBOX_DESC=	Vagrant Image for VirtualBox
38285722SbrdVAGRANT-VIRTUALBOX_DISK=	${OSRELEASE}.vbox.${VAGRANT_FORMAT}
39285722SbrdVAGRANT-VMWARE_FORMAT=	vmdk
40285722SbrdVAGRANT-VMWARE_DESC=	Vagrant Image for VMWare
41285722SbrdVAGRANT-VMWARE_DISK=	${OSRELEASE}.vmware.${VAGRANT_FORMAT}
42277458Sgjb
43277458Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
44277458Sgjb. for _CW in ${CLOUDWARE}
45279249SgjbCLOUDTARGETS+=	cw-${_CW:tl}
46279249SgjbCLEANDIRS+=	cw-${_CW:tl}
47277458SgjbCLEANFILES+=	${_CW:tl}.img \
48277458Sgjb		${_CW:tl}.${${_CW:tu}_FORMAT} \
49279257Sgjb		${_CW:tl}.${${_CW:tu}_FORMAT}.raw \
50279257Sgjb		cw${_CW:tl}-package
51279249SgjbCLOUDINSTALL+=	cw${_CW:tl}-install
52279257SgjbCLOUDPACKAGE+=	cw${_CW:tl}-package
53277458Sgjb${_CW:tu}IMAGE=	${_CW:tl}.${${_CW:tu}_FORMAT}
54277458Sgjb.  if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF)
55277458Sgjb${_CW:tu}CONF?=	${.CURDIR}/tools/${_CW:tl}.conf
56277458Sgjb.  endif
57277458Sgjb
58279249Sgjbcw-${_CW:tl}:
59277458Sgjb	mkdir -p ${.OBJDIR}/${.TARGET}
60277458Sgjb	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
61277458Sgjb		${.CURDIR}/scripts/mk-vmimage.sh \
62277458Sgjb		-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
63277458Sgjb		-i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \
64277458Sgjb		-S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF}
65277458Sgjb	touch ${.TARGET}
66279249Sgjb
67279249Sgjbcw${_CW:tl}-install:
68279249Sgjb	mkdir -p ${DESTDIR}/${_CW:tl}
69279249Sgjb	cp -p ${${_CW}IMAGE} \
70279249Sgjb		${DESTDIR}/${_CW:tl}/${${_CW}_DISK}
71279249Sgjb	cd ${DESTDIR}/${_CW:tl} && sha256 ${${_CW}_DISK}* > \
72279249Sgjb		${DESTDIR}/${_CW:tl}/CHECKSUM.SHA256
73279249Sgjb	cd ${DESTDIR}/${_CW:tl} && md5 ${${_CW}_DISK}* > \
74279249Sgjb		${DESTDIR}/${_CW:tl}/CHECKSUM.MD5
75279249Sgjb
76279257Sgjbcw${_CW:tl}-package:
77279257Sgjb	@# Special target to handle packaging cloud images in the formats
78279257Sgjb	@# specific to each hosting provider.
79279257Sgjb.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh)
80279257Sgjb	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
81279257Sgjb		${.CURDIR}/tools/${_CW:tl}-package.sh \
82279257Sgjb		-D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR}
83279257Sgjb.endif
84279257Sgjb	touch ${.TARGET}
85279257Sgjb
86277458Sgjb. endfor
87277458Sgjb.endif
88277458Sgjb
89273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
90273823SgjbCLEANDIRS+=	${VMTARGETS}
91273823Sgjb. for FORMAT in ${VMFORMATS}
92277609SgjbCLEANFILES+=	${FORMAT}.img
93273823SgjbCLEANFILES+=	${VMBASE}.${FORMAT}
94273823Sgjb. endfor
95273823Sgjb.endif
96273823Sgjb
97277458Sgjbvm-base:	vm-image
98273823Sgjb
99277458Sgjbvm-image:
100273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
101277458Sgjb. for FORMAT in ${VMFORMATS}
102277458Sgjb	mkdir -p ${.OBJDIR}/${.TARGET}
103273823Sgjb	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
104277458Sgjb		${.CURDIR}/scripts/mk-vmimage.sh \
105277458Sgjb		-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
106277609Sgjb		-i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \
107277458Sgjb		-S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT}
108277458Sgjb. endfor
109273823Sgjb.endif
110273823Sgjb	touch ${.TARGET}
111273823Sgjb
112277458Sgjbvm-cloudware:	${CLOUDTARGETS}
113277458Sgjb
114277458Sgjblist-vmtargets:	list-cloudware
115277458Sgjb	@${ECHO}
116277458Sgjb	@${ECHO} "Supported virtual machine disk image formats:"
117277458Sgjb.for FORMAT in ${VMFORMATS:tu}
118277458Sgjb	@${ECHO} "  ${FORMAT:tl}: ${${FORMAT}_DESC}"
119277458Sgjb.endfor
120277458Sgjb
121277458Sgjblist-cloudware:
122277458Sgjb.if !empty(CLOUDWARE)
123277458Sgjb	@${ECHO}
124277458Sgjb	@${ECHO} "Supported cloud hosting provider images:"
125277458Sgjb. for _CW in ${CLOUDWARE}
126277458Sgjb	@${ECHO} "  ${_CW:tu}: ${${_CW:tu}_DESC}"
127277458Sgjb. endfor
128277458Sgjb.endif
129277458Sgjb
130277458Sgjbvm-install:
131273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
132277458Sgjb	mkdir -p ${DESTDIR}/vmimages
133277458Sgjb. for FORMAT in ${VMFORMATS}
134277458Sgjb	cp -p ${VMBASE}.${FORMAT} \
135277458Sgjb		${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
136277458Sgjb. endfor
137277458Sgjb. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES)
138273823Sgjb.  for FORMAT in ${VMFORMATS}
139277458Sgjb	# Don't keep the originals.  There is a copy in ${.OBJDIR} if needed.
140278926Srpaulo	${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
141273823Sgjb.  endfor
142273823Sgjb. endif
143277458Sgjb	cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \
144277458Sgjb		${DESTDIR}/vmimages/CHECKSUM.SHA256
145277458Sgjb	cd ${DESTDIR}/vmimages && md5 ${OSRELEASE}* > \
146277458Sgjb		${DESTDIR}/vmimages/CHECKSUM.MD5
147273823Sgjb.endif
148277536Sgjb
149277536Sgjbvm-release:
150277536Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
151277536Sgjb	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS}
152277536Sgjb.endif
153277536Sgjb
154277536Sgjbcloudware-release:
155277536Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
156277536Sgjb	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS}
157277536Sgjb.endif
158279249Sgjb
159279249Sgjbcloudware-install:
160279249Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
161279249Sgjb	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDINSTALL}
162279249Sgjb.endif
163280928Scperciva
164280928Scperciva.include "${.CURDIR}/Makefile.ec2"
165284567Sgjb.include "${.CURDIR}/Makefile.azure"
166284882Sgjb.include "${.CURDIR}/Makefile.gce"
167284893Sbrd.include "${.CURDIR}/Makefile.vagrant"
168