Makefile.vm revision 282111
1151497Sru#
2151497Sru# $FreeBSD: stable/10/release/Makefile.vm 282111 2015-04-27 19:41:40Z gjb $
3151497Sru#
4151497Sru#
5151497Sru# Makefile for building virtual machine and cloud provider disk images.
6151497Sru#
7151497Sru
8151497SruVMTARGETS=	vm-image
9151497SruVMFORMATS?=	vhd vmdk qcow2 raw
10151497SruVMSIZE?=	20G
11151497SruVMBASE?=	vm
12151497Sru
13151497SruVHD_DESC=	Azure, VirtualPC, Hyper-V, Xen disk image
14151497SruVMDK_DESC=	VMWare, VirtualBox disk image
15151497SruQCOW2_DESC=	Qemu, KVM disk image
16151497SruRAW_DESC=	Unformatted raw disk image
17151497Sru
18151497SruCLOUDWARE?=	AZURE \
19151497Sru		EC2 \
20151497Sru		GCE \
21151497Sru		OPENSTACK
22151497SruAZURE_FORMAT=	vhdf
23151497SruAZURE_DESC=	Microsoft Azure platform image
24151497SruAZURE_DISK=	${OSRELEASE}.${AZURE_FORMAT}
25151497SruEC2_FORMAT=	raw
26151497SruEC2_DESC=	Amazon EC2 image
27151497SruEC2_DISK=	${OSRELEASE}.${EC2_FORMAT}
28151497SruGCE_FORMAT=	raw
29151497SruGCE_DESC=	Google Compute Engine image
30151497SruGCE_DISK=	disk.${GCE_FORMAT}
31151497SruOPENSTACK_FORMAT=qcow2
32151497SruOPENSTACK_DESC=	OpenStack platform image
33151497SruOPENSTACK_DISK=	${OSRELEASE}.${OPENSTACK_FORMAT}
34151497Sru
35151497Sru.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
36151497Sru. for _CW in ${CLOUDWARE}
37151497SruCLOUDTARGETS+=	cw-${_CW:tl}
38151497SruCLEANDIRS+=	cw-${_CW:tl}
39151497SruCLEANFILES+=	${_CW:tl}.img \
40151497Sru		${_CW:tl}.${${_CW:tu}_FORMAT} \
41151497Sru		${_CW:tl}.${${_CW:tu}_FORMAT}.raw \
42151497Sru		cw${_CW:tl}-package
43151497SruCLOUDINSTALL+=	cw${_CW:tl}-install
44151497SruCLOUDPACKAGE+=	cw${_CW:tl}-package
45151497Sru${_CW:tu}IMAGE=	${_CW:tl}.${${_CW:tu}_FORMAT}
46151497Sru.  if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF)
47151497Sru${_CW:tu}CONF?=	${.CURDIR}/tools/${_CW:tl}.conf
48151497Sru.  endif
49151497Sru
50151497Srucw-${_CW:tl}:
51151497Sru	mkdir -p ${.OBJDIR}/${.TARGET}
52151497Sru	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
53151497Sru		${.CURDIR}/scripts/mk-vmimage.sh \
54151497Sru		-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
55151497Sru		-i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \
56151497Sru		-S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF}
57151497Sru	touch ${.TARGET}
58151497Sru
59151497Srucw${_CW:tl}-install:
60151497Sru	mkdir -p ${DESTDIR}/${_CW:tl}
61151497Sru	cp -p ${${_CW}IMAGE} \
62151497Sru		${DESTDIR}/${_CW:tl}/${${_CW}_DISK}
63151497Sru	cd ${DESTDIR}/${_CW:tl} && sha256 ${${_CW}_DISK}* > \
64151497Sru		${DESTDIR}/${_CW:tl}/CHECKSUM.SHA256
65151497Sru	cd ${DESTDIR}/${_CW:tl} && md5 ${${_CW}_DISK}* > \
66151497Sru		${DESTDIR}/${_CW:tl}/CHECKSUM.MD5
67151497Sru
68151497Srucw${_CW:tl}-package:
69151497Sru	@# Special target to handle packaging cloud images in the formats
70151497Sru	@# specific to each hosting provider.
71151497Sru.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh)
72151497Sru	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
73151497Sru		${.CURDIR}/tools/${_CW:tl}-package.sh \
74151497Sru		-D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR}
75151497Sru.endif
76151497Sru	touch ${.TARGET}
77151497Sru
78151497Sru. endfor
79151497Sru.endif
80151497Sru
81151497Sru.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
82151497SruCLEANDIRS+=	${VMTARGETS}
83151497Sru. for FORMAT in ${VMFORMATS}
84151497SruCLEANFILES+=	${FORMAT}.img
85151497SruCLEANFILES+=	${VMBASE}.${FORMAT}
86151497Sru. endfor
87151497Sru.endif
88151497Sru
89151497Sruvm-base:	vm-image
90151497Sru
91151497Sruvm-image:
92151497Sru.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
93151497Sru. for FORMAT in ${VMFORMATS}
94151497Sru	mkdir -p ${.OBJDIR}/${.TARGET}
95151497Sru	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
96151497Sru		${.CURDIR}/scripts/mk-vmimage.sh \
97151497Sru		-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
98151497Sru		-i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \
99151497Sru		-S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT}
100151497Sru. endfor
101151497Sru.endif
102151497Sru	touch ${.TARGET}
103151497Sru
104151497Sruvm-cloudware:	${CLOUDTARGETS}
105151497Sru
106151497Srulist-vmtargets:	list-cloudware
107151497Sru	@${ECHO}
108151497Sru	@${ECHO} "Supported virtual machine disk image formats:"
109151497Sru.for FORMAT in ${VMFORMATS:tu}
110151497Sru	@${ECHO} "  ${FORMAT:tl}: ${${FORMAT}_DESC}"
111151497Sru.endfor
112151497Sru
113151497Srulist-cloudware:
114151497Sru.if !empty(CLOUDWARE)
115151497Sru	@${ECHO}
116151497Sru	@${ECHO} "Supported cloud hosting provider images:"
117151497Sru. for _CW in ${CLOUDWARE}
118151497Sru	@${ECHO} "  ${_CW:tu}: ${${_CW:tu}_DESC}"
119151497Sru. endfor
120151497Sru.endif
121151497Sru
122151497Sruvm-install:
123151497Sru.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
124151497Sru	mkdir -p ${DESTDIR}/vmimages
125151497Sru. for FORMAT in ${VMFORMATS}
126151497Sru	cp -p ${VMBASE}.${FORMAT} \
127151497Sru		${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
128151497Sru. endfor
129151497Sru. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES)
130151497Sru.  for FORMAT in ${VMFORMATS}
131151497Sru	# Don't keep the originals.  There is a copy in ${.OBJDIR} if needed.
132151497Sru	${XZCMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
133151497Sru.  endfor
134151497Sru. endif
135151497Sru	cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \
136151497Sru		${DESTDIR}/vmimages/CHECKSUM.SHA256
137151497Sru	cd ${DESTDIR}/vmimages && md5 ${OSRELEASE}* > \
138151497Sru		${DESTDIR}/vmimages/CHECKSUM.MD5
139151497Sru.endif
140151497Sru
141151497Sruvm-release:
142151497Sru.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
143151497Sru	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS}
144151497Sru.endif
145151497Sru
146151497Srucloudware-release:
147151497Sru.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
148151497Sru	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS}
149151497Sru.endif
150151497Sru
151151497Srucloudware-install:
152151497Sru.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
153151497Sru	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDINSTALL}
154151497Sru.endif
155151497Sru
156151497Sru.include "${.CURDIR}/Makefile.ec2"
157151497Sru