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