Makefile.vm revision 284943
1108768Strhodes#
2108768Strhodes# $FreeBSD: stable/10/release/Makefile.vm 284943 2015-06-30 00:51:43Z gjb $
3108768Strhodes#
4108768Strhodes#
5133338Ssimon# Makefile for building virtual machine and cloud provider disk images.
6108768Strhodes#
7108768Strhodes
8108768StrhodesVMTARGETS=	vm-image
9108768StrhodesVMFORMATS?=	vhd vmdk qcow2 raw
10108768StrhodesVMSIZE?=	20G
11108768StrhodesVMBASE?=	vm
12158762Sbrueffer
13158762SbruefferVHD_DESC=	Azure, VirtualPC, Hyper-V, Xen disk image
14158762SbruefferVMDK_DESC=	VMWare, VirtualBox disk image
15158762SbruefferQCOW2_DESC=	Qemu, KVM disk image
16158762SbruefferRAW_DESC=	Unformatted raw disk image
17158762Sbrueffer
18158762SbruefferCLOUDWARE?=	AZURE \
19158762Sbrueffer		EC2 \
20158762Sbrueffer		GCE \
21158762Sbrueffer		OPENSTACK
22158762SbruefferAZURE_FORMAT=	vhdf
23158762SbruefferAZURE_DESC=	Microsoft Azure platform image
24158762SbruefferAZURE_DISK=	${OSRELEASE}.${AZURE_FORMAT}
25158762SbruefferEC2_FORMAT=	raw
26108768StrhodesEC2_DESC=	Amazon EC2 image
27108768StrhodesEC2_DISK=	${OSRELEASE}.${EC2_FORMAT}
28108768StrhodesGCE_FORMAT=	raw
29108768StrhodesGCE_DESC=	Google Compute Engine image
30108768StrhodesGCE_DISK=	disk.${GCE_FORMAT}
31108768StrhodesOPENSTACK_FORMAT=qcow2
32108768StrhodesOPENSTACK_DESC=	OpenStack platform image
33108768StrhodesOPENSTACK_DISK=	${OSRELEASE}.${OPENSTACK_FORMAT}
34111447Sru
35111447Sru.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
36133336Ssimon. for _CW in ${CLOUDWARE}
37111447SruCLOUDTARGETS+=	cw-${_CW:tl}
38111447SruCLEANDIRS+=	cw-${_CW:tl}
39111447SruCLEANFILES+=	${_CW:tl}.img \
40111447Sru		${_CW:tl}.${${_CW:tu}_FORMAT} \
41133336Ssimon		${_CW:tl}.${${_CW:tu}_FORMAT}.raw \
42111447Sru		cw${_CW:tl}-package
43111447SruCLOUDINSTALL+=	cw${_CW:tl}-install
44111447SruCLOUDPACKAGE+=	cw${_CW:tl}-package
45111447Sru${_CW:tu}IMAGE=	${_CW:tl}.${${_CW:tu}_FORMAT}
46111447Sru.  if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF)
47111447Sru${_CW:tu}CONF?=	${.CURDIR}/tools/${_CW:tl}.conf
48111447Sru.  endif
49111447Sru
50111447Srucw-${_CW:tl}:
51111447Sru	mkdir -p ${.OBJDIR}/${.TARGET}
52111447Sru	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
53111447Sru		${.CURDIR}/scripts/mk-vmimage.sh \
54111447Sru		-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
55111447Sru		-i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \
56111447Sru		-S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF}
57111447Sru	touch ${.TARGET}
58111447Sru
59111447Srucw${_CW:tl}-install:
60111447Sru	mkdir -p ${DESTDIR}/${_CW:tl}
61111447Sru	cp -p ${${_CW}IMAGE} \
62111447Sru		${DESTDIR}/${_CW:tl}/${${_CW}_DISK}
63111447Sru	cd ${DESTDIR}/${_CW:tl} && sha256 ${${_CW}_DISK}* > \
64111447Sru		${DESTDIR}/${_CW:tl}/CHECKSUM.SHA256
65108768Strhodes	cd ${DESTDIR}/${_CW:tl} && md5 ${${_CW}_DISK}* > \
66108768Strhodes		${DESTDIR}/${_CW:tl}/CHECKSUM.MD5
67108768Strhodes
68108768Strhodescw${_CW:tl}-package:
69108768Strhodes	@# Special target to handle packaging cloud images in the formats
70108768Strhodes	@# specific to each hosting provider.
71108768Strhodes.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh)
72108768Strhodes	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
73108768Strhodes		${.CURDIR}/tools/${_CW:tl}-package.sh \
74111447Sru		-D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR}
75108768Strhodes.endif
76111447Sru	touch ${.TARGET}
77108768Strhodes
78108768Strhodes. endfor
79108768Strhodes.endif
80108768Strhodes
81108768Strhodes.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
82108768StrhodesCLEANDIRS+=	${VMTARGETS}
83108768Strhodes. for FORMAT in ${VMFORMATS}
84108768StrhodesCLEANFILES+=	${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.include "${.CURDIR}/Makefile.azure"
158.include "${.CURDIR}/Makefile.gce"
159