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