Makefile.vm revision 279558
1#
2# $FreeBSD: stable/10/release/Makefile.vm 279558 2015-03-03 02:46:59Z gjb $
3#
4#
5# Makefile for building virtual machine and cloud provider disk images.
6#
7
8VMTARGETS=	vm-image
9VMFORMATS?=	vhd vmdk qcow2 raw
10VMSIZE?=	20G
11VMBASE?=	vm
12
13VHD_DESC=	Azure, VirtualPC, Hyper-V, Xen disk image
14VMDK_DESC=	VMWare, VirtualBox disk image
15QCOW2_DESC=	Qemu, KVM disk image
16RAW_DESC=	Unformatted raw disk image
17
18CLOUDWARE?=	AZURE \
19		GCE \
20		OPENSTACK
21AZURE_FORMAT=	vhdf
22AZURE_DESC=	Microsoft Azure platform image
23AZURE_DISK=	${OSRELEASE}.${AZURE_FORMAT}
24GCE_FORMAT=	raw
25GCE_DESC=	Google Compute Engine image
26GCE_DISK=	disk.${GCE_FORMAT}
27OPENSTACK_FORMAT=qcow2
28OPENSTACK_DESC=	OpenStack platform image
29OPENSTACK_DISK=	${OSRELEASE}.${OPENSTACK_FORMAT}
30
31.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
32. for _CW in ${CLOUDWARE}
33CLOUDTARGETS+=	cw-${_CW:tl}
34CLEANDIRS+=	cw-${_CW:tl}
35CLEANFILES+=	${_CW:tl}.img \
36		${_CW:tl}.${${_CW:tu}_FORMAT} \
37		${_CW:tl}.${${_CW:tu}_FORMAT}.raw \
38		cw${_CW:tl}-package
39CLOUDINSTALL+=	cw${_CW:tl}-install
40CLOUDPACKAGE+=	cw${_CW:tl}-package
41${_CW:tu}IMAGE=	${_CW:tl}.${${_CW:tu}_FORMAT}
42.  if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF)
43${_CW:tu}CONF?=	${.CURDIR}/tools/${_CW:tl}.conf
44.  endif
45
46cw-${_CW:tl}:
47	mkdir -p ${.OBJDIR}/${.TARGET}
48	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
49		${.CURDIR}/scripts/mk-vmimage.sh \
50		-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
51		-i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \
52		-S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF}
53	touch ${.TARGET}
54
55cw${_CW:tl}-install:
56	mkdir -p ${DESTDIR}/${_CW:tl}
57	cp -p ${${_CW}IMAGE} \
58		${DESTDIR}/${_CW:tl}/${${_CW}_DISK}
59	cd ${DESTDIR}/${_CW:tl} && sha256 ${${_CW}_DISK}* > \
60		${DESTDIR}/${_CW:tl}/CHECKSUM.SHA256
61	cd ${DESTDIR}/${_CW:tl} && md5 ${${_CW}_DISK}* > \
62		${DESTDIR}/${_CW:tl}/CHECKSUM.MD5
63
64cw${_CW:tl}-package:
65	@# Special target to handle packaging cloud images in the formats
66	@# specific to each hosting provider.
67.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh)
68	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
69		${.CURDIR}/tools/${_CW:tl}-package.sh \
70		-D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR}
71.endif
72	touch ${.TARGET}
73
74. endfor
75.endif
76
77.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
78CLEANDIRS+=	${VMTARGETS}
79. for FORMAT in ${VMFORMATS}
80CLEANFILES+=	${FORMAT}.img
81CLEANFILES+=	${VMBASE}.${FORMAT}
82. endfor
83.endif
84
85vm-base:	vm-image
86
87vm-image:
88.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
89. for FORMAT in ${VMFORMATS}
90	mkdir -p ${.OBJDIR}/${.TARGET}
91	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
92		${.CURDIR}/scripts/mk-vmimage.sh \
93		-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
94		-i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \
95		-S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT}
96. endfor
97.endif
98	touch ${.TARGET}
99
100vm-cloudware:	${CLOUDTARGETS}
101
102list-vmtargets:	list-cloudware
103	@${ECHO}
104	@${ECHO} "Supported virtual machine disk image formats:"
105.for FORMAT in ${VMFORMATS:tu}
106	@${ECHO} "  ${FORMAT:tl}: ${${FORMAT}_DESC}"
107.endfor
108
109list-cloudware:
110.if !empty(CLOUDWARE)
111	@${ECHO}
112	@${ECHO} "Supported cloud hosting provider images:"
113. for _CW in ${CLOUDWARE}
114	@${ECHO} "  ${_CW:tu}: ${${_CW:tu}_DESC}"
115. endfor
116.endif
117
118vm-install:
119.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
120	mkdir -p ${DESTDIR}/vmimages
121. for FORMAT in ${VMFORMATS}
122	cp -p ${VMBASE}.${FORMAT} \
123		${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
124. endfor
125. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES)
126.  for FORMAT in ${VMFORMATS}
127	# Don't keep the originals.  There is a copy in ${.OBJDIR} if needed.
128	${XZCMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
129.  endfor
130. endif
131	cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \
132		${DESTDIR}/vmimages/CHECKSUM.SHA256
133	cd ${DESTDIR}/vmimages && md5 ${OSRELEASE}* > \
134		${DESTDIR}/vmimages/CHECKSUM.MD5
135.endif
136
137vm-release:
138.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
139	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS}
140.endif
141
142cloudware-release:
143.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
144	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS}
145.endif
146
147cloudware-install:
148.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
149	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDINSTALL}
150.endif
151