xref: /freebsd/release/Makefile (revision 060f7edadcff77cf804b60ecb25f8517c8dca62f)
1#
2# Makefile for building releases and release media.
3#
4# User-driven targets:
5#  cdrom: Builds release CD-ROM media (disc1.iso)
6#  dvdrom: Builds release DVD-ROM media (dvd1.iso)
7#  memstick: Builds memory stick image (memstick.img)
8#  mini-memstick: Builds minimal memory stick image (mini-memstick.img)
9#  ftp: Sets up FTP distribution area (ftp)
10#  release: Invokes real-release, vm-release, cloudware-release and oci-release targets
11#  real-release: Build all media and FTP distribution area
12#  vm-release: Build all virtual machine image targets
13#  cloudware-release: Build all cloud hosting provider targets
14#  oci-release: Build all OCI container images
15#  install: Invokes the release-install, vm-install and oci-install targets
16#  release-install: Copies all release installation media into ${DESTDIR}
17#  vm-install: Copies all virtual machine images into ${DESTDIR}
18#  cloud-install: Copies non-uploaded cloud images into ${DESTDIR}
19#  oci-install: Copies all OCI container images into ${DESTDIR}
20#
21# Variables affecting the build process:
22#  WORLDDIR: location of src tree -- must have built world and default kernel
23#            (by default, the directory above this one)
24#  NODISTSETS: if set, do not include dist sets or MANIFEST
25#  NOPKGBASE:  if set, include dist tarballs rather than pkgbase packages in
26#            disc1 and dvd1 installation media
27#  PORTSDIR: location of ports tree to distribute (default: /usr/ports)
28#  XTRADIR:  xtra-bits-dir argument for <arch>/mkisoimages.sh
29#  NOPKG:    if set, do not distribute third-party packages
30#  NOPORTS:  if set, do not distribute ports tree
31#  NOSRC:    if set, do not distribute source tree
32#  WITH_DVD: if set, generate dvd1.iso
33#  WITH_COMPRESSED_IMAGES: if set, compress installation images with xz(1)
34#		(uncompressed images are not removed)
35#  WITH_VMIMAGES: if set, build virtual machine images with the release
36#  WITH_COMPRESSED_VMIMAGES: if set, compress virtual machine disk images
37#  		with xz(1) (extremely time consuming)
38#  WITH_CLOUDWARE: if set, build cloud hosting disk images with the release
39#  TARGET/TARGET_ARCH: architecture of built release
40#
41
42WORLDDIR?=	${.CURDIR}/..
43PORTSDIR?=	/usr/ports
44
45.include "${WORLDDIR}/share/mk/bsd.compat.pre.mk"
46
47.if !defined(TARGET) || empty(TARGET)
48TARGET=		${MACHINE}
49.endif
50.if !defined(TARGET_ARCH) || empty(TARGET_ARCH)
51.if ${TARGET} == ${MACHINE}
52TARGET_ARCH=	${MACHINE_ARCH}
53.else
54TARGET_ARCH=	${TARGET}
55.endif
56.endif
57IMAKE=		${MAKE} TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET} \
58		    -DNO_ROOT -DDB_FROM_SRC
59DISTDIR=	dist
60
61# Define OSRELEASE by using newvers.sh
62.if !defined(OSRELEASE) || empty(OSRELEASE)
63.for _V in TYPE BRANCH REVISION
64${_V}!=	eval $$(awk '/^${_V}=/{print}' ${.CURDIR}/../sys/conf/newvers.sh); echo $$${_V}
65.endfor
66.for _V in ${TARGET_ARCH}
67.if !empty(TARGET:M${_V})
68OSRELEASE=	${TYPE}-${REVISION}-${BRANCH}-${TARGET}
69VOLUME_LABEL=	${REVISION:C/[.-]/_/g}_${BRANCH:C/[.-]/_/g}_${TARGET}
70.else
71OSRELEASE=	${TYPE}-${REVISION}-${BRANCH}-${TARGET}-${TARGET_ARCH}
72VOLUME_LABEL=	${REVISION:C/[.-]/_/g}_${BRANCH:C/[.-]/_/g}_${TARGET_ARCH}
73.endif
74.endfor
75.endif
76
77.if ${.MAKE.OS} == "FreeBSD"
78# For installing packages into the release media.
79PKG_ENV+=	INSTALL_AS_USER=yes
80PKG_ENV+=	ASSUME_ALWAYS_YES=yes
81PKG_ARGS+=	-o METALOG=METALOG
82PKG_ARGS+=	-r ${.TARGET} -o REPOS_DIR=${.CURDIR}/pkg_repos
83# Pass -f to make sure pkg writes to the METALOG even if the package
84# is already installed from a previous build
85PKG_INSTALL=	env ${PKG_ENV} ${PKG_CMD} ${PKG_ARGS} install -f
86PKG_CLEAN=	env ${PKG_ENV} ${PKG_CMD} ${PKG_ARGS} clean -a
87.endif
88
89.if !defined(VOLUME_LABEL) || empty(VOLUME_LABEL)
90VOLUME_LABEL=	FreeBSD_Install
91.endif
92
93.if !exists(${PORTSDIR})
94NOPORTS= true
95.endif
96
97DISTRIBUTIONS= base.txz kernel.txz
98.if !defined(NOPORTS)
99DISTRIBUTIONS+= ports.txz
100.endif
101.if !defined(NOSRC)
102DISTRIBUTIONS+= src.txz
103.endif
104
105RELEASE_TARGETS= ftp
106IMAGES=
107.if exists(${.CURDIR}/${TARGET}/mkisoimages.sh)
108RELEASE_TARGETS+= cdrom
109IMAGES+=	disc1.iso bootonly.iso
110. if defined(WITH_DVD) && !empty(WITH_DVD)
111RELEASE_TARGETS+= dvdrom
112IMAGES+=	dvd1.iso
113. endif
114.endif
115.if exists(${.CURDIR}/${TARGET}/make-memstick.sh)
116RELEASE_TARGETS+= memstick.img
117RELEASE_TARGETS+= mini-memstick.img
118IMAGES+=	memstick.img
119IMAGES+=	mini-memstick.img
120.endif
121
122CLEANFILES=	packagesystem *.txz MANIFEST release ${IMAGES}
123.if defined(WITH_COMPRESSED_IMAGES) && !empty(WITH_COMPRESSED_IMAGES)
124. for I in ${IMAGES}
125CLEANFILES+=	${I}.xz
126. endfor
127.endif
128.if defined(WITH_DVD) && !empty(WITH_DVD)
129CLEANFILES+=	pkg-stage
130.endif
131CLEANDIRS=	dist pkgdb pkgbase-repo pkgbase-repo-conf ftp disc1 disc1-disc1 disc1-memstick bootonly bootonly-bootonly bootonly-memstick dvd
132beforeclean:
133	chflags -R noschg .
134.include <bsd.obj.mk>
135clean: beforeclean
136
137#
138# Legacy distribution tarballs
139#
140base.txz: # Also (if enabled) tests, compat libs, and -dbg variants for all.
141	mkdir -p ${DISTDIR}
142	( cd ${WORLDDIR} && ${IMAKE} distributeworld DISTDIR=${.OBJDIR}/${DISTDIR} )
143	# Bootstrap etcupdate(8) database.
144	sh ${WORLDDIR}/usr.sbin/etcupdate/etcupdate.sh extract -B \
145	    -m "${MAKE}" -M "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" \
146	    -s ${WORLDDIR} -d "${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate" \
147	    -L /dev/stdout -N
148	echo "./var/db/etcupdate type=dir uname=root gname=wheel mode=0755" >> ${.OBJDIR}/${DISTDIR}/base.meta
149	sed -n 's,^\.,./var/db/etcupdate/current,p' \
150	    ${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate/current/METALOG | \
151	    env -i LC_COLLATE=C sort >> ${.OBJDIR}/${DISTDIR}/base.meta
152	rm ${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate/current/METALOG
153# Package all components
154	( cd ${WORLDDIR} && ${IMAKE} packageworld DISTDIR=${.OBJDIR}/${DISTDIR} )
155	mv ${DISTDIR}/*.txz .
156
157kernel.txz: # Also (if enabled) kernel-dbg.txz.
158	mkdir -p ${DISTDIR}
159	( cd ${WORLDDIR} && ${IMAKE} distributekernel DISTDIR=${.OBJDIR}/${DISTDIR} )
160	( cd ${WORLDDIR} && ${IMAKE} packagekernel DISTDIR=${.OBJDIR}/${DISTDIR} )
161	mv ${DISTDIR}/kernel*.txz .
162
163src.txz:
164	mkdir -p ${DISTDIR}/usr
165	rm -f ${DISTDIR}/usr/src
166	ln -s ${WORLDDIR} ${DISTDIR}/usr/src
167	( cd ${DISTDIR} && ${TAR_XZ_CMD} -cLvf ${.OBJDIR}/src.txz \
168	    --exclude .svn --exclude .zfs \
169	    --exclude .git --exclude @ --exclude usr/src/release/dist \
170	    --exclude usr/src/release/obj usr/src )
171
172ports.txz:
173	mkdir -p ${DISTDIR}/usr
174	rm -f ${DISTDIR}/usr/ports
175	ln -s ${PORTSDIR} ${DISTDIR}/usr/ports
176	( cd ${DISTDIR} && ${TAR_XZ_CMD} -cLvf ${.OBJDIR}/ports.txz \
177	    --exclude .git --exclude .svn \
178	    --exclude usr/ports/distfiles --exclude usr/ports/packages \
179	    --exclude 'usr/ports/INDEX*' --exclude work usr/ports )
180
181packagesystem: ${DISTRIBUTIONS}
182	sh ${.CURDIR}/scripts/make-manifest.sh $$(ls *.txz | grep -v container) > MANIFEST
183	touch ${.TARGET}
184
185.if !defined(NODISTSETS)
186disc1: packagesystem
187bootonly: packagesystem
188dvd: packagesystem
189.endif
190
191.if !defined(NOPKGBASE) || empty(NOPKGBASE)
192PKGBASE_REPO=	pkgbase-repo
193PKG_ABI=	$$(${PKG_CMD} -o ABI_FILE=${.TARGET}/usr/bin/uname config ABI)
194.endif
195
196pkgbase-repo:
197	mkdir -p pkgbase-repo
198	( ${IMAKE} -C ${WORLDDIR} packages REPODIR=${.OBJDIR}/pkgbase-repo \
199	    INCLUDE_PKG_IN_PKGBASE_REPO=YES )
200
201disc1: ${PKGBASE_REPO}
202# Install system
203	mkdir -p ${.TARGET}
204	( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
205	    DESTDIR=${.OBJDIR}/${.TARGET} MK_AT=no \
206	    MK_INSTALLLIB=no MK_MAIL=no \
207	    ${_ALL_LIBCOMPATS:@v@MK_LIB$v=no@} \
208	    MK_TOOLCHAIN=no \
209	    MK_RESCUE=no MK_DICT=no \
210	    MK_KERNEL_SYMBOLS=no MK_TESTS=no MK_DEBUG_FILES=no)
211.if !defined(NOPKGBASE) || empty(NOPKGBASE)
212# Create offline pkgbase repo on release media
213	mkdir -p ${.TARGET}/usr/freebsd-packages/repos/
214	${.CURDIR}/scripts/pkgbase-stage.lua disc \
215	    ${.OBJDIR}/pkgbase-repo/${PKG_ABI}/latest \
216	    ${.TARGET}/usr/freebsd-packages/offline \
217	    "${_ALL_libcompats}" ${PKG_ABI}
218	cp ${.CURDIR}/scripts/FreeBSD-base-offline.conf \
219		${.TARGET}/usr/freebsd-packages/repos/
220	mtree -c -p ${.TARGET}/usr/freebsd-packages | \
221	    mtree -C -k type,mode,link,size | \
222	    sed 's|^\.|./usr/freebsd-packages|g' >> ${.TARGET}/METALOG
223.endif
224.if !defined(NODISTSETS)
225	# Copy MANIFEST to provide legacy dist checksums in both modes
226	mkdir -p ${.TARGET}/usr/freebsd-dist
227	echo "./usr/freebsd-dist type=dir uname=root gname=wheel mode=0755" >> ${.TARGET}/METALOG
228	cp MANIFEST ${.TARGET}/usr/freebsd-dist
229	echo "./usr/freebsd-dist/MANIFEST type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
230.if defined(NOPKGBASE) && !empty(NOPKGBASE)
231# Copy distfiles
232	for dist in $$(ls *.txz | grep -v container | grep -vE -- '(${base ${_ALL_libcompats}:L:ts|})-dbg'); do \
233	    cp $${dist} ${.TARGET}/usr/freebsd-dist; \
234	    echo "./usr/freebsd-dist/$${dist} type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG; \
235	done
236.endif
237.endif
238.if ${.MAKE.OS} == "FreeBSD" && (!defined(NOPKG) || empty(NOPKG))
239# Install packages onto release media.
240	${PKG_INSTALL} pkg || true
241	${PKG_INSTALL} wifi-firmware-kmod-release || true
242	${PKG_CLEAN} || true
243.endif
244# Set up installation environment
245	ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
246	echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf
247	echo hostid_enable=\"NO\" >> ${.TARGET}/etc/rc.conf
248	echo debug.witness.trace=0 >> ${.TARGET}/etc/sysctl.conf
249	echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
250	echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
251	echo loader_brand=\"install\" >> ${.TARGET}/boot/loader.conf
252	echo loader_menu_multi_user_prompt=\"Installer\" >> ${.TARGET}/boot/loader.conf
253	cp ${.CURDIR}/rc.local ${.TARGET}/etc
254	echo "./etc/resolv.conf type=link uname=root gname=wheel mode=0644 link=/tmp/bsdinstall_etc/resolv.conf" >> ${.TARGET}/METALOG
255	echo "./etc/rc.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
256	echo "./etc/sysctl.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
257	echo "./boot/loader.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
258	echo "./etc/rc.local type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
259	touch ${.TARGET}
260
261bootonly:
262# Install system
263	mkdir -p ${.TARGET}
264	( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
265	    DESTDIR=${.OBJDIR}/${.TARGET} MK_AT=no \
266	    MK_GAMES=no \
267	    MK_INSTALLLIB=no MK_MAIL=no \
268	    ${_ALL_LIBCOMPATS:@v@MK_LIB$v=no@} \
269	    MK_TOOLCHAIN=no \
270	    MK_RESCUE=no MK_DICT=no \
271	    MK_KERNEL_SYMBOLS=no MK_TESTS=no MK_DEBUG_FILES=no)
272.if !defined(NODISTSETS)
273# Copy manifest only (no distfiles) to get checksums
274	mkdir -p ${.TARGET}/usr/freebsd-dist
275	cp MANIFEST ${.TARGET}/usr/freebsd-dist
276	echo "./usr/freebsd-dist type=dir uname=root gname=wheel mode=0755" >> ${.TARGET}/METALOG
277	echo "./usr/freebsd-dist/MANIFEST type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
278.endif
279.if ${.MAKE.OS} == "FreeBSD" && (!defined(NOPKG) || empty(NOPKG))
280# Install packages onto release media.
281	${PKG_INSTALL} pkg || true
282	${PKG_INSTALL} wifi-firmware-iwlwifi-kmod wifi-firmware-rtw88-kmod || true
283	${PKG_CLEAN} || true
284.endif
285# Set up installation environment
286	ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
287	echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf
288	echo hostid_enable=\"NO\" >> ${.TARGET}/etc/rc.conf
289	echo debug.witness.trace=0 >> ${.TARGET}/etc/sysctl.conf
290	echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
291	echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
292	echo loader_brand=\"install\" >> ${.TARGET}/boot/loader.conf
293	echo loader_menu_multi_user_prompt=\"Installer\" >> ${.TARGET}/boot/loader.conf
294	cp ${.CURDIR}/rc.local ${.TARGET}/etc
295	echo "./etc/resolv.conf type=link uname=root gname=wheel mode=0644 link=/tmp/bsdinstall_etc/resolv.conf" >> ${.TARGET}/METALOG
296	echo "./etc/rc.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
297	echo "./etc/sysctl.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
298	echo "./boot/loader.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
299	echo "./etc/rc.local type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
300
301dvd: ${PKGBASE_REPO}
302# Install system
303	mkdir -p ${.TARGET}
304	( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
305		DESTDIR=${.OBJDIR}/${.TARGET} MK_RESCUE=no MK_KERNEL_SYMBOLS=no \
306		MK_TESTS=no MK_DEBUG_FILES=no)
307.if !defined(NOPKGBASE) || empty(NOPKGBASE)
308# Create offline pkgbase repo on release media
309	mkdir -p ${.TARGET}/usr/freebsd-packages/repos/
310	${.CURDIR}/scripts/pkgbase-stage.lua dvd \
311	    ${.OBJDIR}/pkgbase-repo/${PKG_ABI}/latest \
312	    ${.TARGET}/usr/freebsd-packages/offline \
313	    "${_ALL_libcompats}" ${PKG_ABI}
314	cp ${.CURDIR}/scripts/FreeBSD-base-offline.conf \
315		${.TARGET}/usr/freebsd-packages/repos/
316	mtree -c -p ${.TARGET}/usr/freebsd-packages | \
317	    mtree -C -k type,mode,link,size | \
318	    sed 's|^\.|./usr/freebsd-packages|g' >> ${.TARGET}/METALOG
319.endif
320.if !defined(NODISTSETS)
321	# Copy MANIFEST to provide legacy dist checksums in both modes
322	mkdir -p ${.TARGET}/usr/freebsd-dist
323	echo "./usr/freebsd-dist type=dir uname=root gname=wheel mode=0755" >> ${.TARGET}/METALOG
324	cp MANIFEST ${.TARGET}/usr/freebsd-dist
325	echo "./usr/freebsd-dist/MANIFEST type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
326# Copy distfiles
327	mkdir -p ${.TARGET}/usr/freebsd-dist
328	for dist in $$(ls *.txz | grep -v container); do \
329	    cp $${dist} ${.TARGET}/usr/freebsd-dist; \
330	    echo "./usr/freebsd-dist/$${dist} type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG; \
331	done
332.endif
333.if ${.MAKE.OS} == "FreeBSD" && (!defined(NOPKG) || empty(NOPKG))
334# Install packages onto release media.
335	${PKG_INSTALL} pkg || true
336	${PKG_INSTALL} wifi-firmware-kmod-release || true
337	${PKG_CLEAN} || true
338.endif
339# Set up installation environment
340	ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
341	echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf
342	echo hostid_enable=\"NO\" >> ${.TARGET}/etc/rc.conf
343	echo debug.witness.trace=0 >> ${.TARGET}/etc/sysctl.conf
344	echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
345	echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
346	echo loader_brand=\"install\" >> ${.TARGET}/boot/loader.conf
347	echo loader_menu_multi_user_prompt=\"Installer\" >> ${.TARGET}/boot/loader.conf
348	cp ${.CURDIR}/rc.local ${.TARGET}/etc
349	echo "./etc/resolv.conf type=link uname=root gname=wheel mode=0644 link=/tmp/bsdinstall_etc/resolv.conf" >> ${.TARGET}/METALOG
350	echo "./etc/rc.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
351	echo "./etc/sysctl.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
352	echo "./boot/loader.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
353	echo "./etc/rc.local type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
354	touch ${.TARGET}
355
356disc1-disc1 disc1-memstick: disc1
357	mkdir ${.TARGET}
358	tar -cf- -C disc1 . | tar -xf- -C ${.TARGET}
359
360bootonly-bootonly bootonly-memstick: bootonly
361	mkdir ${.TARGET}
362	tar -cf- -C bootonly . | tar -xf- -C ${.TARGET}
363
364release.iso: disc1.iso
365disc1.iso: disc1-disc1
366	cd disc1-disc1 && sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_CD ../${.TARGET} ./METALOG ${XTRADIR}
367
368dvd1.iso: dvd pkg-stage
369	cd dvd && sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_DVD ../${.TARGET} ./METALOG ${XTRADIR}
370
371bootonly.iso: bootonly-bootonly
372	cd bootonly-bootonly && sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_BO ../${.TARGET} ./METALOG ${XTRADIR}
373
374memstick: memstick.img
375memstick.img: disc1-memstick
376	cd disc1-memstick && sh ${.CURDIR}/${TARGET}/make-memstick.sh ./METALOG ../${.TARGET}
377
378mini-memstick: mini-memstick.img
379mini-memstick.img: bootonly-memstick
380	cd bootonly-memstick && sh ${.CURDIR}/${TARGET}/make-memstick.sh ./METALOG ../${.TARGET}
381
382pkg-stage: dvd
383.if !defined(NOPKG) || empty(NOPKG)
384	env PORTSDIR=${PORTSDIR} REPOS_DIR=${.CURDIR}/pkg_repos/ \
385		sh ${.CURDIR}/scripts/pkg-stage.sh -N
386	mkdir -p ${.OBJDIR}/dvd/packages/repos/
387	cp ${.CURDIR}/scripts/FreeBSD_install_cdrom.conf \
388		${.OBJDIR}/dvd/packages/repos/
389.endif
390	touch ${.TARGET}
391
392cdrom: disc1.iso bootonly.iso
393dvdrom: dvd1.iso
394ftp: packagesystem
395	rm -rf ftp
396	mkdir -p ftp
397	cp *.txz MANIFEST ftp
398	rm -f ftp/container-*.txz
399
400release:	real-release vm-release cloudware-release oci-release
401	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} release-done
402	true
403
404release-done:
405	touch release
406
407real-release:
408	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} obj
409	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${RELEASE_TARGETS}
410
411install:	release-install vm-install oci-install .WAIT cloud-install
412
413release-install:
414.if defined(DESTDIR) && !empty(DESTDIR)
415	mkdir -p ${DESTDIR}
416.endif
417	cp -a ftp ${DESTDIR}/
418.if !empty(IMAGES)
419.for I in ${IMAGES}
420	cp -p ${I} ${DESTDIR}/${OSRELEASE}-${I}
421. if defined(WITH_COMPRESSED_IMAGES) && !empty(WITH_COMPRESSED_IMAGES)
422	${XZ_CMD} -k ${DESTDIR}/${OSRELEASE}-${I}
423. endif
424.endfor
425	( cd ${DESTDIR} && sha512 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA512 )
426	( cd ${DESTDIR} && sha256 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA256 )
427.endif
428
429.include "${.CURDIR}/Makefile.inc1"
430.include "${.CURDIR}/Makefile.vm"
431.include "${.CURDIR}/Makefile.oci"
432