]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - release/Makefile.vm
MFC r264346 (by alc):
[FreeBSD/stable/10.git] / release / Makefile.vm
1 #
2 # $FreeBSD$
3 #
4 #
5 # Makefile for building virtual machine and cloud provider disk images.
6 #
7
8 VMTARGETS=      vm-image
9 VMFORMATS?=     vhd vmdk qcow2 raw
10 VMSIZE?=        20G
11 VMBASE?=        vm
12
13 VHD_DESC=       Azure, VirtualPC, Hyper-V, Xen disk image
14 VMDK_DESC=      VMWare, VirtualBox disk image
15 QCOW2_DESC=     Qemu, KVM disk image
16 RAW_DESC=       Unformatted raw disk image
17
18 CLOUDWARE?=     AZURE \
19                 GCE \
20                 OPENSTACK
21 AZURE_FORMAT=   vhdf
22 AZURE_DESC=     Microsoft Azure platform image
23 AZURE_DISK=     ${OSRELEASE}.${AZURE_FORMAT}
24 GCE_FORMAT=     raw
25 GCE_DESC=       Google Compute Engine image
26 GCE_DISK=       disk.${GCE_FORMAT}
27 OPENSTACK_FORMAT=qcow2
28 OPENSTACK_DESC= OpenStack platform image
29 OPENSTACK_DISK= ${OSRELEASE}.${OPENSTACK_FORMAT}
30
31 .if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
32 . for _CW in ${CLOUDWARE}
33 CLOUDTARGETS+=  cw-${_CW:tl}
34 CLEANDIRS+=     cw-${_CW:tl}
35 CLEANFILES+=    ${_CW:tl}.img \
36                 ${_CW:tl}.${${_CW:tu}_FORMAT} \
37                 ${_CW:tl}.${${_CW:tu}_FORMAT}.raw \
38                 cw${_CW:tl}-package
39 CLOUDINSTALL+=  cw${_CW:tl}-install
40 CLOUDPACKAGE+=  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
46 cw-${_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
55 cw${_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
64 cw${_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)
78 CLEANDIRS+=     ${VMTARGETS}
79 . for FORMAT in ${VMFORMATS}
80 CLEANFILES+=    ${FORMAT}.img
81 CLEANFILES+=    ${VMBASE}.${FORMAT}
82 . endfor
83 .endif
84
85 vm-base:        vm-image
86
87 vm-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
100 vm-cloudware:   ${CLOUDTARGETS}
101
102 list-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
109 list-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
118 vm-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
137 vm-release:
138 .if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
139         ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS}
140 .endif
141
142 cloudware-release:
143 .if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
144         ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS}
145 .endif
146
147 cloudware-install:
148 .if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
149         ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDINSTALL}
150 .endif