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