xref: /freebsd/release/Makefile (revision d07198ff72aeddc5a884cfb81b22c22f2abf88f6)
10202c140SRodney W. Grimes#
212ad0bb1SNathan Whitehorn# Makefile for building releases and release media.
3bd668f6fSPoul-Henning Kamp#
412ad0bb1SNathan Whitehorn# User-driven targets:
58cec99b6SGlen Barber#  cdrom: Builds release CD-ROM media (disc1.iso)
65d27274aSGlen Barber#  dvdrom: Builds release DVD-ROM media (dvd1.iso)
73c334738SGlen Barber#  memstick: Builds memory stick image (memstick.img)
8a9da1707SGlen Barber#  mini-memstick: Builds minimal memory stick image (mini-memstick.img)
912ad0bb1SNathan Whitehorn#  ftp: Sets up FTP distribution area (ftp)
10d03c82c2SDoug Rabson#  release: Invokes real-release, vm-release, cloudware-release and oci-release targets
114afe7cf5SGlen Barber#  real-release: Build all media and FTP distribution area
124afe7cf5SGlen Barber#  vm-release: Build all virtual machine image targets
134afe7cf5SGlen Barber#  cloudware-release: Build all cloud hosting provider targets
14d03c82c2SDoug Rabson#  oci-release: Build all OCI container images
15d03c82c2SDoug Rabson#  install: Invokes the release-install, vm-install and oci-install targets
162d4ff62fSGlen Barber#  release-install: Copies all release installation media into ${DESTDIR}
172d4ff62fSGlen Barber#  vm-install: Copies all virtual machine images into ${DESTDIR}
184771c2e9SColin Percival#  cloud-install: Copies non-uploaded cloud images into ${DESTDIR}
19d03c82c2SDoug Rabson#  oci-install: Copies all OCI container images into ${DESTDIR}
20bd668f6fSPoul-Henning Kamp#
2112ad0bb1SNathan Whitehorn# Variables affecting the build process:
2212ad0bb1SNathan Whitehorn#  WORLDDIR: location of src tree -- must have built world and default kernel
2312ad0bb1SNathan Whitehorn#            (by default, the directory above this one)
243f494a4eSEd Maste#  NODISTSETS: if set, do not include dist sets or MANIFEST
2535b81af1SColin Percival#  NOPKGBASE:  if set, include dist tarballs rather than pkgbase packages in
264227d51bSIsaac Freund#            disc1 and dvd1 installation media and build VM/cloud images using
274227d51bSIsaac Freund#            make installkernel installworld.
2812ad0bb1SNathan Whitehorn#  PORTSDIR: location of ports tree to distribute (default: /usr/ports)
291b8a3e1dSDevin Teske#  XTRADIR:  xtra-bits-dir argument for <arch>/mkisoimages.sh
309d22cb2eSHiroki Sato#  NOPKG:    if set, do not distribute third-party packages
3112ad0bb1SNathan Whitehorn#  NOPORTS:  if set, do not distribute ports tree
3212ad0bb1SNathan Whitehorn#  NOSRC:    if set, do not distribute source tree
33f7f650c7SGlen Barber#  WITH_DVD: if set, generate dvd1.iso
3455af5cf1SGlen Barber#  WITH_COMPRESSED_IMAGES: if set, compress installation images with xz(1)
35cbc0e08aSGlen Barber#		(uncompressed images are not removed)
36a68d274bSGlen Barber#  WITH_VMIMAGES: if set, build virtual machine images with the release
37a9278c16SGlen Barber#  WITH_COMPRESSED_VMIMAGES: if set, compress virtual machine disk images
38a9278c16SGlen Barber#  		with xz(1) (extremely time consuming)
392d4ff62fSGlen Barber#  WITH_CLOUDWARE: if set, build cloud hosting disk images with the release
4012ad0bb1SNathan Whitehorn#  TARGET/TARGET_ARCH: architecture of built release
41b03ddec9SJohn Baldwin#
42ab0e9cdcSPoul-Henning Kamp
43*3949c2b8SEd MasteWORLDDIR?=	${.CURDIR:H}
4412ad0bb1SNathan WhitehornPORTSDIR?=	/usr/ports
45fff8eb57SJohn Baldwin
466853d893SJessica Clarke.include "${WORLDDIR}/share/mk/bsd.compat.pre.mk"
476853d893SJessica Clarke
48464485c8SHiroki Sato.if !defined(TARGET) || empty(TARGET)
49464485c8SHiroki SatoTARGET=		${MACHINE}
50464485c8SHiroki Sato.endif
51464485c8SHiroki Sato.if !defined(TARGET_ARCH) || empty(TARGET_ARCH)
520bd47e83SNathan Whitehorn.if ${TARGET} == ${MACHINE}
53464485c8SHiroki SatoTARGET_ARCH=	${MACHINE_ARCH}
548f1f55e9SRuslan Ermilov.else
55464485c8SHiroki SatoTARGET_ARCH=	${TARGET}
56464485c8SHiroki Sato.endif
578f1f55e9SRuslan Ermilov.endif
58a49621c1SEd MasteIMAKE=		${MAKE} TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET} \
59f89aa188SColin Percival		    -DNO_ROOT -DWITHOUT_QEMU -DDB_FROM_SRC
60876acefaSHiroki SatoDISTDIR=	dist
618f1f55e9SRuslan Ermilov
6208f1325dSGlen Barber# Define OSRELEASE by using newvers.sh
63de17cbccSHiroki Sato.if !defined(OSRELEASE) || empty(OSRELEASE)
64de17cbccSHiroki Sato.for _V in TYPE BRANCH REVISION
65*3949c2b8SEd Maste${_V}!=	eval $$(awk '/^${_V}=/{print}' ${.CURDIR:H}/sys/conf/newvers.sh); echo $$${_V}
66de17cbccSHiroki Sato.endfor
67de17cbccSHiroki Sato.for _V in ${TARGET_ARCH}
68de17cbccSHiroki Sato.if !empty(TARGET:M${_V})
69de17cbccSHiroki SatoOSRELEASE=	${TYPE}-${REVISION}-${BRANCH}-${TARGET}
70745ca085SGlen BarberVOLUME_LABEL=	${REVISION:C/[.-]/_/g}_${BRANCH:C/[.-]/_/g}_${TARGET}
71de17cbccSHiroki Sato.else
72de17cbccSHiroki SatoOSRELEASE=	${TYPE}-${REVISION}-${BRANCH}-${TARGET}-${TARGET_ARCH}
73745ca085SGlen BarberVOLUME_LABEL=	${REVISION:C/[.-]/_/g}_${BRANCH:C/[.-]/_/g}_${TARGET_ARCH}
74de17cbccSHiroki Sato.endif
75de17cbccSHiroki Sato.endfor
76de17cbccSHiroki Sato.endif
77de17cbccSHiroki Sato
785c5c0571SEd Maste.if !defined(NOPKGBASE) || empty(NOPKGBASE)
795c5c0571SEd MastePKGBASE_REPO_DIR= pkgbase-repo-dir
805c5c0571SEd MasteWSTAGEDIR!=	${IMAKE} -f Makefile.inc1 -C ${WORLDDIR} -V WSTAGEDIR
815c5c0571SEd MastePKG_ABI_FILE=	${WSTAGEDIR}/usr/bin/uname
825c5c0571SEd MastePKG_ABI=	$$(${PKG_CMD} -o ABI_FILE=${PKG_ABI_FILE} config ABI)
835c5c0571SEd Maste.endif
845c5c0571SEd Maste
857e2996c1SBjoern A. Zeeb.if ${.MAKE.OS} == "FreeBSD"
867e2996c1SBjoern A. Zeeb# For installing packages into the release media.
877e2996c1SBjoern A. ZeebPKG_ENV+=	INSTALL_AS_USER=yes
887e2996c1SBjoern A. ZeebPKG_ENV+=	ASSUME_ALWAYS_YES=yes
89a9425aebSEd MastePKG_ARGS+=	-o METALOG=METALOG
905c5c0571SEd MastePKG_ARGS+=	-o ABI=${PKG_ABI}
91aba98621SLexi WinterPKG_ARGS+=	-r ${.TARGET}
92aba98621SLexi WinterPKG_REPO_ARGS=	-o REPOS_DIR=${.CURDIR}/pkg_repos
933b9d89e1SLexi WinterPKGBASE_REPO_ARGS=-o REPOS_DIR=${.OBJDIR}/pkgbase-repo-dir
941203e7b1SIsaac Freund# Pass -f to make sure pkg writes to the METALOG even if the package
951203e7b1SIsaac Freund# is already installed from a previous build
96aba98621SLexi WinterPKG_INSTALL=	env ${PKG_ENV} ${PKG_CMD} ${PKG_ARGS} ${PKG_REPO_ARGS} install -f
97aba98621SLexi WinterPKG_CLEAN=	env ${PKG_ENV} ${PKG_CMD} ${PKG_ARGS} ${PKG_REPO_ARGS} clean -a
98aba98621SLexi Winter# This installs from the pkgbase repo we created during build.
99aba98621SLexi WinterPKGBASE_INSTALL=env ${PKG_ENV} ${PKG_CMD} ${PKG_ARGS} ${PKGBASE_REPO_ARGS} install -f
100aba98621SLexi WinterPKGBASE_CLEAN=	env ${PKG_ENV} ${PKG_CMD} ${PKG_ARGS} ${PKGBASE_REPO_ARGS} clean -a
1017e2996c1SBjoern A. Zeeb.endif
1027e2996c1SBjoern A. Zeeb
10369c7d069SGlen Barber.if !defined(VOLUME_LABEL) || empty(VOLUME_LABEL)
10469c7d069SGlen BarberVOLUME_LABEL=	FreeBSD_Install
10569c7d069SGlen Barber.endif
106ac23f460SGlen Barber
10712ad0bb1SNathan Whitehorn.if !exists(${PORTSDIR})
10812ad0bb1SNathan WhitehornNOPORTS= true
109dd1a1b3dSJoerg Wunsch.endif
110dd1a1b3dSJoerg Wunsch
1112e9b8c8cSEd MasteDISTRIBUTIONS= base.txz kernel.txz
1126daa108fSRuslan Ermilov.if !defined(NOPORTS)
1132e9b8c8cSEd MasteDISTRIBUTIONS+= ports.txz
1146daa108fSRuslan Ermilov.endif
1154731faa3SJordan K. Hubbard.if !defined(NOSRC)
1162e9b8c8cSEd MasteDISTRIBUTIONS+= src.txz
1172e3a1557SKen Smith.endif
118b2200964SJohn Baldwin
119e64eb9eaSColin PercivalRELEASE_TARGETS=
120e64eb9eaSColin Percival.if !defined(NODISTSETS) || empty(NODISTSETS)
121e64eb9eaSColin PercivalRELEASE_TARGETS+= ftp
122e64eb9eaSColin Percival.endif
123876acefaSHiroki SatoIMAGES=
12412ad0bb1SNathan Whitehorn.if exists(${.CURDIR}/${TARGET}/mkisoimages.sh)
12512ad0bb1SNathan WhitehornRELEASE_TARGETS+= cdrom
1268cec99b6SGlen BarberIMAGES+=	disc1.iso bootonly.iso
127d8824524SGlen Barber. if defined(WITH_DVD) && !empty(WITH_DVD)
128dc244562SGlen BarberRELEASE_TARGETS+= dvdrom
129dc244562SGlen BarberIMAGES+=	dvd1.iso
130dc244562SGlen Barber. endif
1316daa108fSRuslan Ermilov.endif
13212ad0bb1SNathan Whitehorn.if exists(${.CURDIR}/${TARGET}/make-memstick.sh)
1333c334738SGlen BarberRELEASE_TARGETS+= memstick.img
134a9da1707SGlen BarberRELEASE_TARGETS+= mini-memstick.img
1353c334738SGlen BarberIMAGES+=	memstick.img
136a9da1707SGlen BarberIMAGES+=	mini-memstick.img
137e738d1eaSJohn Baldwin.endif
138d0ff67dbSColin Percival.if !defined(NOPKGBASE) || empty(NOPKGBASE)
139d0ff67dbSColin PercivalRELEASE_TARGETS+= pkgbase-repo.tar
140d0ff67dbSColin Percival.endif
141e738d1eaSJohn Baldwin
142a55e34ebSGlen BarberCLEANFILES=	packagesystem *.txz MANIFEST release ${IMAGES}
1430c535991SGlen Barber.if defined(WITH_COMPRESSED_IMAGES) && !empty(WITH_COMPRESSED_IMAGES)
1440c535991SGlen Barber. for I in ${IMAGES}
14555af5cf1SGlen BarberCLEANFILES+=	${I}.xz
1460c535991SGlen Barber. endfor
1470c535991SGlen Barber.endif
148cd15d7f3SGlen Barber.if defined(WITH_DVD) && !empty(WITH_DVD)
149cd15d7f3SGlen BarberCLEANFILES+=	pkg-stage
150cd15d7f3SGlen Barber.endif
151d0ff67dbSColin PercivalCLEANDIRS=	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
15246b13263SHiroki Satobeforeclean:
15346b13263SHiroki Sato	chflags -R noschg .
1548eb4e096SRuslan Ermilov.include <bsd.obj.mk>
15546b13263SHiroki Satoclean: beforeclean
15612ad0bb1SNathan Whitehorn
15779537a90SEd Maste#
15879537a90SEd Maste# Legacy distribution tarballs
15979537a90SEd Maste#
16079537a90SEd Mastebase.txz: # Also (if enabled) tests, compat libs, and -dbg variants for all.
161876acefaSHiroki Sato	mkdir -p ${DISTDIR}
162a49621c1SEd Maste	( cd ${WORLDDIR} && ${IMAKE} distributeworld DISTDIR=${.OBJDIR}/${DISTDIR} )
1638ee478dfSEd Maste	# Bootstrap etcupdate(8) database.
164e9ba25aaSJessica Clarke	sh ${WORLDDIR}/usr.sbin/etcupdate/etcupdate.sh extract -B \
165f3772439SJessica Clarke	    -m "${MAKE}" -M "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" \
166f36b5d8aSJessica Clarke	    -s ${WORLDDIR} -d "${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate" \
167ace4637eSColin Percival	    -L /dev/stdout -N
168f36b5d8aSJessica Clarke	echo "./var/db/etcupdate type=dir uname=root gname=wheel mode=0755" >> ${.OBJDIR}/${DISTDIR}/base.meta
169950401d2SPat Maddox	sed -n 's,^\.,./var/db/etcupdate/current,p' \
170950401d2SPat Maddox	    ${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate/current/METALOG | \
171950401d2SPat Maddox	    env -i LC_COLLATE=C sort >> ${.OBJDIR}/${DISTDIR}/base.meta
172f36b5d8aSJessica Clarke	rm ${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate/current/METALOG
173bfc3bab8SNathan Whitehorn# Package all components
174a49621c1SEd Maste	( cd ${WORLDDIR} && ${IMAKE} packageworld DISTDIR=${.OBJDIR}/${DISTDIR} )
175876acefaSHiroki Sato	mv ${DISTDIR}/*.txz .
17612ad0bb1SNathan Whitehorn
17779537a90SEd Mastekernel.txz: # Also (if enabled) kernel-dbg.txz.
178876acefaSHiroki Sato	mkdir -p ${DISTDIR}
179a49621c1SEd Maste	( cd ${WORLDDIR} && ${IMAKE} distributekernel DISTDIR=${.OBJDIR}/${DISTDIR} )
180a49621c1SEd Maste	( cd ${WORLDDIR} && ${IMAKE} packagekernel DISTDIR=${.OBJDIR}/${DISTDIR} )
181876acefaSHiroki Sato	mv ${DISTDIR}/kernel*.txz .
18212ad0bb1SNathan Whitehorn
18312ad0bb1SNathan Whitehornsrc.txz:
184876acefaSHiroki Sato	mkdir -p ${DISTDIR}/usr
185479b9db5SWolfram Schneider	rm -f ${DISTDIR}/usr/src
186479b9db5SWolfram Schneider	ln -s ${WORLDDIR} ${DISTDIR}/usr/src
187a28f7eb8SEd Maste	( cd ${DISTDIR} && ${TAR_XZ_CMD} -cLvf ${.OBJDIR}/src.txz \
188a28f7eb8SEd Maste	    --exclude .svn --exclude .zfs \
18921040b3cSEd Maste	    --exclude .git --exclude @ --exclude usr/src/release/dist \
190a28f7eb8SEd Maste	    --exclude usr/src/release/obj usr/src )
19112ad0bb1SNathan Whitehorn
19212ad0bb1SNathan Whitehornports.txz:
193876acefaSHiroki Sato	mkdir -p ${DISTDIR}/usr
194479b9db5SWolfram Schneider	rm -f ${DISTDIR}/usr/ports
195479b9db5SWolfram Schneider	ln -s ${PORTSDIR} ${DISTDIR}/usr/ports
196a28f7eb8SEd Maste	( cd ${DISTDIR} && ${TAR_XZ_CMD} -cLvf ${.OBJDIR}/ports.txz \
19723659c9dSGlen Barber	    --exclude .git --exclude .svn \
19812ad0bb1SNathan Whitehorn	    --exclude usr/ports/distfiles --exclude usr/ports/packages \
199a28f7eb8SEd Maste	    --exclude 'usr/ports/INDEX*' --exclude work usr/ports )
20012ad0bb1SNathan Whitehorn
20179537a90SEd Mastepackagesystem: ${DISTRIBUTIONS}
20279537a90SEd Maste	sh ${.CURDIR}/scripts/make-manifest.sh $$(ls *.txz | grep -v container) > MANIFEST
20379537a90SEd Maste	touch ${.TARGET}
20479537a90SEd Maste
2054b8b4c7dSColin Percival.if !defined(NODISTSETS) || empty(NODISTSETS)
2063f494a4eSEd Mastedisc1: packagesystem
2073f494a4eSEd Mastebootonly: packagesystem
208b9e3e849SKrzysztof Galazkadvd: packagesystem
2093f494a4eSEd Maste.endif
210ac1408bdSEd Maste.if !defined(NOPKGBASE) || empty(NOPKGBASE)
211ac1408bdSEd Mastedisc1: pkgbase-repo-dir
212ac1408bdSEd Mastebootonly: pkgbase-repo-dir
213ac1408bdSEd Mastedvd: pkgbase-repo-dir
214ac1408bdSEd Maste.endif
2153f494a4eSEd Maste
21662d18f8cSIsaac Freundpkgbase-repo:
21762d18f8cSIsaac Freund	mkdir -p pkgbase-repo
218e87b75a8SColin Percival	mkdir -p /tmp/ports /tmp/distfiles
219060f7edaSColin Percival	( ${IMAKE} -C ${WORLDDIR} packages REPODIR=${.OBJDIR}/pkgbase-repo \
220e87b75a8SColin Percival	    INCLUDE_PKG_IN_PKGBASE_REPO=YES BOOTSTRAP_PKG_FROM_PORTS=YES )
22162d18f8cSIsaac Freund
222d0ff67dbSColin Percivalpkgbase-repo.tar: pkgbase-repo
223d0ff67dbSColin Percival	tar -cf pkgbase-repo.tar -C pkgbase-repo .
224d0ff67dbSColin Percival
225f4f03084SIsaac Freundpkgbase-repo-dir: pkgbase-repo
226f4f03084SIsaac Freund	mkdir -p pkgbase-repo-dir
227f4f03084SIsaac Freund	printf "FreeBSD-base: { url: "file://%s", enabled: yes }" \
228f4f03084SIsaac Freund	    ${.OBJDIR}/pkgbase-repo/${PKG_ABI}/latest \
229f4f03084SIsaac Freund	    > pkgbase-repo-dir/FreeBSD-base.conf
230f4f03084SIsaac Freund
231ac1408bdSEd Mastedisc1:
23212ad0bb1SNathan Whitehorn# Install system
233a55e34ebSGlen Barber	mkdir -p ${.TARGET}
23493e4813bSColin Percival	( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
23513f7dbe8SEd Maste	    DESTDIR=${.OBJDIR}/${.TARGET} MK_AT=no \
2366853d893SJessica Clarke	    MK_INSTALLLIB=no MK_MAIL=no \
23732a79e85SJessica Clarke	    ${_ALL_LIBCOMPATS:@v@MK_LIB$v=no@} \
2383750ccefSEd Maste	    MK_TOOLCHAIN=no \
2394c0ef5dbSNathan Whitehorn	    MK_RESCUE=no MK_DICT=no \
240a49621c1SEd Maste	    MK_KERNEL_SYMBOLS=no MK_TESTS=no MK_DEBUG_FILES=no)
24135b81af1SColin Percival.if !defined(NOPKGBASE) || empty(NOPKGBASE)
24262d18f8cSIsaac Freund# Create offline pkgbase repo on release media
24362d18f8cSIsaac Freund	mkdir -p ${.TARGET}/usr/freebsd-packages/repos/
24462d18f8cSIsaac Freund	${.CURDIR}/scripts/pkgbase-stage.lua disc \
245f4f03084SIsaac Freund	    ${.OBJDIR}/pkgbase-repo-dir \
24662d18f8cSIsaac Freund	    ${.TARGET}/usr/freebsd-packages/offline \
247523fece9SColin Percival	    "${_ALL_libcompats}" ${PKG_ABI} ${.OBJDIR}/pkgdb-disc1
24862d18f8cSIsaac Freund	cp ${.CURDIR}/scripts/FreeBSD-base-offline.conf \
24962d18f8cSIsaac Freund		${.TARGET}/usr/freebsd-packages/repos/
25062d18f8cSIsaac Freund	mtree -c -p ${.TARGET}/usr/freebsd-packages | \
25162d18f8cSIsaac Freund	    mtree -C -k type,mode,link,size | \
25262d18f8cSIsaac Freund	    sed 's|^\.|./usr/freebsd-packages|g' >> ${.TARGET}/METALOG
253b8ae4defSEd Maste.endif
2544b8b4c7dSColin Percival.if !defined(NODISTSETS) || empty(NODISTSETS)
255b8ae4defSEd Maste	# Copy MANIFEST to provide legacy dist checksums in both modes
25662d18f8cSIsaac Freund	mkdir -p ${.TARGET}/usr/freebsd-dist
257b8ae4defSEd Maste	echo "./usr/freebsd-dist type=dir uname=root gname=wheel mode=0755" >> ${.TARGET}/METALOG
25862d18f8cSIsaac Freund	cp MANIFEST ${.TARGET}/usr/freebsd-dist
25962d18f8cSIsaac Freund	echo "./usr/freebsd-dist/MANIFEST type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
26035b81af1SColin Percival.if defined(NOPKGBASE) && !empty(NOPKGBASE)
26112ad0bb1SNathan Whitehorn# Copy distfiles
262b8ae4defSEd Maste	for dist in $$(ls *.txz | grep -v container | grep -vE -- '(${base ${_ALL_libcompats}:L:ts|})-dbg'); do \
263b8ae4defSEd Maste	    cp $${dist} ${.TARGET}/usr/freebsd-dist; \
264b8ae4defSEd Maste	    echo "./usr/freebsd-dist/$${dist} type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG; \
26513cb0041SJessica Clarke	done
26662d18f8cSIsaac Freund.endif
2673f494a4eSEd Maste.endif
2687e2996c1SBjoern A. Zeeb.if ${.MAKE.OS} == "FreeBSD" && (!defined(NOPKG) || empty(NOPKG))
2697e2996c1SBjoern A. Zeeb# Install packages onto release media.
270aba98621SLexi Winter.if !defined(NOPKGBASE) || empty(NOPKGBASE)
271aba98621SLexi Winter	${PKGBASE_INSTALL} pkg
272aba98621SLexi Winter	${PKGBASE_CLEAN}
273aba98621SLexi Winter.else
2748654315aSLexi Winter	${PKG_INSTALL} pkg
275aba98621SLexi Winter.endif
276e8263aceSColin Percival	${PKG_INSTALL} wifi-firmware-kmod-release || true
2776dafe8c1SMuhammad Moinur Rahman	${PKG_CLEAN} || true
2787e2996c1SBjoern A. Zeeb.endif
27912ad0bb1SNathan Whitehorn# Set up installation environment
280a55e34ebSGlen Barber	ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
281a55e34ebSGlen Barber	echo hostid_enable=\"NO\" >> ${.TARGET}/etc/rc.conf
2828c14a409SGlen Barber	echo debug.witness.trace=0 >> ${.TARGET}/etc/sysctl.conf
283a55e34ebSGlen Barber	echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
2846e49372eSKyle Evans	echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
285ac7a19d4SJoseph Mingrone	echo loader_brand=\"install\" >> ${.TARGET}/boot/loader.conf
2862a90c47aSJessica Clarke	echo loader_menu_multi_user_prompt=\"Installer\" >> ${.TARGET}/boot/loader.conf
287a55e34ebSGlen Barber	cp ${.CURDIR}/rc.local ${.TARGET}/etc
28813cb0041SJessica Clarke	echo "./etc/resolv.conf type=link uname=root gname=wheel mode=0644 link=/tmp/bsdinstall_etc/resolv.conf" >> ${.TARGET}/METALOG
28913cb0041SJessica Clarke	echo "./etc/rc.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
29013cb0041SJessica Clarke	echo "./etc/sysctl.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
29113cb0041SJessica Clarke	echo "./boot/loader.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
29213cb0041SJessica Clarke	echo "./etc/rc.local type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
293876acefaSHiroki Sato	touch ${.TARGET}
29412ad0bb1SNathan Whitehorn
295ac1408bdSEd Mastebootonly:
29646c413feSNathan Whitehorn# Install system
297a55e34ebSGlen Barber	mkdir -p ${.TARGET}
29893e4813bSColin Percival	( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
29913f7dbe8SEd Maste	    DESTDIR=${.OBJDIR}/${.TARGET} MK_AT=no \
300738919c0SBaptiste Daroussin	    MK_GAMES=no \
3016853d893SJessica Clarke	    MK_INSTALLLIB=no MK_MAIL=no \
30232a79e85SJessica Clarke	    ${_ALL_LIBCOMPATS:@v@MK_LIB$v=no@} \
3033750ccefSEd Maste	    MK_TOOLCHAIN=no \
30401d57ec0SBryan Drewery	    MK_RESCUE=no MK_DICT=no \
305a49621c1SEd Maste	    MK_KERNEL_SYMBOLS=no MK_TESTS=no MK_DEBUG_FILES=no)
3064b8b4c7dSColin Percival.if !defined(NODISTSETS) || empty(NODISTSETS)
30746c413feSNathan Whitehorn# Copy manifest only (no distfiles) to get checksums
308a55e34ebSGlen Barber	mkdir -p ${.TARGET}/usr/freebsd-dist
309a55e34ebSGlen Barber	cp MANIFEST ${.TARGET}/usr/freebsd-dist
31013cb0041SJessica Clarke	echo "./usr/freebsd-dist type=dir uname=root gname=wheel mode=0755" >> ${.TARGET}/METALOG
31113cb0041SJessica Clarke	echo "./usr/freebsd-dist/MANIFEST type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
3123f494a4eSEd Maste.endif
31392e9301eSIsaac Freund.if ${.MAKE.OS} == "FreeBSD" && (!defined(NOPKG) || empty(NOPKG))
3143b9d89e1SLexi Winter.if !defined(NOPKGBASE) || empty(NOPKGBASE)
3153b9d89e1SLexi Winter	${PKGBASE_INSTALL} pkg
3163b9d89e1SLexi Winter	${PKGBASE_CLEAN}
3173b9d89e1SLexi Winter.else
3183b9d89e1SLexi Winter	${PKG_INSTALL} pkg
3193b9d89e1SLexi Winter.endif
320655fcddeSJoseph Mingrone	${PKG_INSTALL} wifi-firmware-iwlwifi-kmod wifi-firmware-rtw88-kmod || true
32192e9301eSIsaac Freund	${PKG_CLEAN} || true
32292e9301eSIsaac Freund.endif
32346c413feSNathan Whitehorn# Set up installation environment
324a55e34ebSGlen Barber	ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
325a55e34ebSGlen Barber	echo hostid_enable=\"NO\" >> ${.TARGET}/etc/rc.conf
3268c14a409SGlen Barber	echo debug.witness.trace=0 >> ${.TARGET}/etc/sysctl.conf
327a55e34ebSGlen Barber	echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
3286e49372eSKyle Evans	echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
329ac7a19d4SJoseph Mingrone	echo loader_brand=\"install\" >> ${.TARGET}/boot/loader.conf
3302a90c47aSJessica Clarke	echo loader_menu_multi_user_prompt=\"Installer\" >> ${.TARGET}/boot/loader.conf
331a55e34ebSGlen Barber	cp ${.CURDIR}/rc.local ${.TARGET}/etc
33213cb0041SJessica Clarke	echo "./etc/resolv.conf type=link uname=root gname=wheel mode=0644 link=/tmp/bsdinstall_etc/resolv.conf" >> ${.TARGET}/METALOG
33313cb0041SJessica Clarke	echo "./etc/rc.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
33413cb0041SJessica Clarke	echo "./etc/sysctl.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
33513cb0041SJessica Clarke	echo "./boot/loader.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
33613cb0041SJessica Clarke	echo "./etc/rc.local type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
33746c413feSNathan Whitehorn
338ac1408bdSEd Mastedvd:
339dc244562SGlen Barber# Install system
340dc244562SGlen Barber	mkdir -p ${.TARGET}
34193e4813bSColin Percival	( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
342ba7bd912SGlen Barber		DESTDIR=${.OBJDIR}/${.TARGET} MK_RESCUE=no MK_KERNEL_SYMBOLS=no \
343a49621c1SEd Maste		MK_TESTS=no MK_DEBUG_FILES=no)
34435b81af1SColin Percival.if !defined(NOPKGBASE) || empty(NOPKGBASE)
34562d18f8cSIsaac Freund# Create offline pkgbase repo on release media
34662d18f8cSIsaac Freund	mkdir -p ${.TARGET}/usr/freebsd-packages/repos/
34762d18f8cSIsaac Freund	${.CURDIR}/scripts/pkgbase-stage.lua dvd \
348f4f03084SIsaac Freund	    ${.OBJDIR}/pkgbase-repo-dir \
34962d18f8cSIsaac Freund	    ${.TARGET}/usr/freebsd-packages/offline \
350523fece9SColin Percival	    "${_ALL_libcompats}" ${PKG_ABI} ${.OBJDIR}/pkgdb-dvd
35162d18f8cSIsaac Freund	cp ${.CURDIR}/scripts/FreeBSD-base-offline.conf \
35262d18f8cSIsaac Freund		${.TARGET}/usr/freebsd-packages/repos/
35362d18f8cSIsaac Freund	mtree -c -p ${.TARGET}/usr/freebsd-packages | \
35462d18f8cSIsaac Freund	    mtree -C -k type,mode,link,size | \
35562d18f8cSIsaac Freund	    sed 's|^\.|./usr/freebsd-packages|g' >> ${.TARGET}/METALOG
356b8ae4defSEd Maste.endif
3574b8b4c7dSColin Percival.if !defined(NODISTSETS) || empty(NODISTSETS)
358b8ae4defSEd Maste	# Copy MANIFEST to provide legacy dist checksums in both modes
35962d18f8cSIsaac Freund	mkdir -p ${.TARGET}/usr/freebsd-dist
36062d18f8cSIsaac Freund	echo "./usr/freebsd-dist type=dir uname=root gname=wheel mode=0755" >> ${.TARGET}/METALOG
361b8ae4defSEd Maste	cp MANIFEST ${.TARGET}/usr/freebsd-dist
36262d18f8cSIsaac Freund	echo "./usr/freebsd-dist/MANIFEST type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
363dc244562SGlen Barber# Copy distfiles
364dc244562SGlen Barber	mkdir -p ${.TARGET}/usr/freebsd-dist
365b8ae4defSEd Maste	for dist in $$(ls *.txz | grep -v container); do \
366b8ae4defSEd Maste	    cp $${dist} ${.TARGET}/usr/freebsd-dist; \
367b8ae4defSEd Maste	    echo "./usr/freebsd-dist/$${dist} type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG; \
36813cb0041SJessica Clarke	done
36962d18f8cSIsaac Freund.endif
3707e2996c1SBjoern A. Zeeb.if ${.MAKE.OS} == "FreeBSD" && (!defined(NOPKG) || empty(NOPKG))
3717e2996c1SBjoern A. Zeeb# Install packages onto release media.
372aba98621SLexi Winter.if !defined(NOPKGBASE) || empty(NOPKGBASE)
373aba98621SLexi Winter	${PKGBASE_INSTALL} pkg
374aba98621SLexi Winter	${PKGBASE_CLEAN}
375aba98621SLexi Winter.else
3768654315aSLexi Winter	${PKG_INSTALL} pkg
377aba98621SLexi Winter.endif
378e8263aceSColin Percival	${PKG_INSTALL} wifi-firmware-kmod-release || true
3796dafe8c1SMuhammad Moinur Rahman	${PKG_CLEAN} || true
3807e2996c1SBjoern A. Zeeb.endif
381dc244562SGlen Barber# Set up installation environment
382dc244562SGlen Barber	ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
383dc244562SGlen Barber	echo hostid_enable=\"NO\" >> ${.TARGET}/etc/rc.conf
3848c14a409SGlen Barber	echo debug.witness.trace=0 >> ${.TARGET}/etc/sysctl.conf
3857f100614SGlen Barber	echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
3866e49372eSKyle Evans	echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
387e48d5d23SEd Maste	echo loader_brand=\"install\" >> ${.TARGET}/boot/loader.conf
3882a90c47aSJessica Clarke	echo loader_menu_multi_user_prompt=\"Installer\" >> ${.TARGET}/boot/loader.conf
389dc244562SGlen Barber	cp ${.CURDIR}/rc.local ${.TARGET}/etc
39013cb0041SJessica Clarke	echo "./etc/resolv.conf type=link uname=root gname=wheel mode=0644 link=/tmp/bsdinstall_etc/resolv.conf" >> ${.TARGET}/METALOG
39113cb0041SJessica Clarke	echo "./etc/rc.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
39213cb0041SJessica Clarke	echo "./etc/sysctl.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
39313cb0041SJessica Clarke	echo "./boot/loader.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
39413cb0041SJessica Clarke	echo "./etc/rc.local type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
395dc244562SGlen Barber	touch ${.TARGET}
396dc244562SGlen Barber
397a1bff973SColin Percivaldisc1-disc1 disc1-memstick: disc1
398a1bff973SColin Percival	mkdir ${.TARGET}
399a1bff973SColin Percival	tar -cf- -C disc1 . | tar -xf- -C ${.TARGET}
400a1bff973SColin Percival
401a1bff973SColin Percivalbootonly-bootonly bootonly-memstick: bootonly
402a1bff973SColin Percival	mkdir ${.TARGET}
403a1bff973SColin Percival	tar -cf- -C bootonly . | tar -xf- -C ${.TARGET}
404a1bff973SColin Percival
4058cec99b6SGlen Barberrelease.iso: disc1.iso
406a1bff973SColin Percivaldisc1.iso: disc1-disc1
4071e45fb39SEd Maste	cd disc1-disc1 && sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_CD ../${.TARGET} ./METALOG ${XTRADIR}
40812ad0bb1SNathan Whitehorn
409dc244562SGlen Barberdvd1.iso: dvd pkg-stage
41089cf4b85SEd Maste	cd dvd && sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_DVD ../${.TARGET} ./METALOG ${XTRADIR}
411dc244562SGlen Barber
412a1bff973SColin Percivalbootonly.iso: bootonly-bootonly
413cbba69fbSEd Maste	cd bootonly-bootonly && sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_BO ../${.TARGET} ./METALOG ${XTRADIR}
41446c413feSNathan Whitehorn
415cb95a96bSGlen Barbermemstick: memstick.img
416a1bff973SColin Percivalmemstick.img: disc1-memstick
4171e45fb39SEd Maste	cd disc1-memstick && sh ${.CURDIR}/${TARGET}/make-memstick.sh ./METALOG ../${.TARGET}
41812ad0bb1SNathan Whitehorn
419a9da1707SGlen Barbermini-memstick: mini-memstick.img
420a1bff973SColin Percivalmini-memstick.img: bootonly-memstick
421cbba69fbSEd Maste	cd bootonly-memstick && sh ${.CURDIR}/${TARGET}/make-memstick.sh ./METALOG ../${.TARGET}
422a9da1707SGlen Barber
423567cbd8fSColin Percivalpkg-stage: dvd
4248f229143SGlen Barber.if !defined(NOPKG) || empty(NOPKG)
425fefd0439SGlen Barber	env PORTSDIR=${PORTSDIR} REPOS_DIR=${.CURDIR}/pkg_repos/ \
42689cf4b85SEd Maste		sh ${.CURDIR}/scripts/pkg-stage.sh -N
4270d0e89b7SGlen Barber	mkdir -p ${.OBJDIR}/dvd/packages/repos/
4280d0e89b7SGlen Barber	cp ${.CURDIR}/scripts/FreeBSD_install_cdrom.conf \
4290d0e89b7SGlen Barber		${.OBJDIR}/dvd/packages/repos/
4302b5c6249SColin Percival	echo "./packages/repos type=dir uname=root gname=wheel mode=0755" >> dvd/METALOG
4312b5c6249SColin Percival	echo "./packages/repos/FreeBSD_install_cdrom.conf type=file uname=root gname=wheel mode=0644" >> dvd/METALOG
432dc244562SGlen Barber.endif
4330d0e89b7SGlen Barber	touch ${.TARGET}
434dc244562SGlen Barber
4358cec99b6SGlen Barbercdrom: disc1.iso bootonly.iso
436dc244562SGlen Barberdvdrom: dvd1.iso
43712ad0bb1SNathan Whitehornftp: packagesystem
438299a8b95SNathan Whitehorn	rm -rf ftp
439876acefaSHiroki Sato	mkdir -p ftp
440299a8b95SNathan Whitehorn	cp *.txz MANIFEST ftp
441976e1d36SColin Percival	rm -f ftp/container-*.txz
44212ad0bb1SNathan Whitehorn
443d03c82c2SDoug Rabsonrelease:	real-release vm-release cloudware-release oci-release
444fdbd473cSGlen Barber	${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} release-done
445fdbd473cSGlen Barber	true
446fdbd473cSGlen Barber
447fdbd473cSGlen Barberrelease-done:
448fdbd473cSGlen Barber	touch release
4494afe7cf5SGlen Barber
450b6f69c39SColin Percivalreal-release: obj .WAIT ${RELEASE_TARGETS}
45112ad0bb1SNathan Whitehorn
452d03c82c2SDoug Rabsoninstall:	release-install vm-install oci-install .WAIT cloud-install
4532d4ff62fSGlen Barber
4542d4ff62fSGlen Barberrelease-install:
455876acefaSHiroki Sato.if defined(DESTDIR) && !empty(DESTDIR)
456876acefaSHiroki Sato	mkdir -p ${DESTDIR}
457876acefaSHiroki Sato.endif
458e64eb9eaSColin Percival.if !defined(NODISTSETS) || empty(NODISTSETS)
459de17cbccSHiroki Sato	cp -a ftp ${DESTDIR}/
460e64eb9eaSColin Percival.endif
4613083b412SMitchell Horne.if !empty(IMAGES)
462de17cbccSHiroki Sato.for I in ${IMAGES}
463de17cbccSHiroki Sato	cp -p ${I} ${DESTDIR}/${OSRELEASE}-${I}
464510f3303SGlen Barber. if defined(WITH_COMPRESSED_IMAGES) && !empty(WITH_COMPRESSED_IMAGES)
465bd9cab6fSRui Paulo	${XZ_CMD} -k ${DESTDIR}/${OSRELEASE}-${I}
466cbc0e08aSGlen Barber. endif
467de17cbccSHiroki Sato.endfor
46893e4813bSColin Percival	( cd ${DESTDIR} && sha512 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA512 )
46993e4813bSColin Percival	( cd ${DESTDIR} && sha256 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA256 )
4703083b412SMitchell Horne.endif
471d0ff67dbSColin Percival.if !defined (NOPKGBASE) || empty(NOPKGBASE)
472d0ff67dbSColin Percival	mkdir -p ${DESTDIR}/pkgbase
473d0ff67dbSColin Percival	cp -p pkgbase-repo.tar ${DESTDIR}/pkgbase/
474d0ff67dbSColin Percival	( cd ${DESTDIR}/pkgbase && sha256 pkgbase-repo.tar > CHECKSUM.SHA256 )
475d0ff67dbSColin Percival	( cd ${DESTDIR}/pkgbase && sha512 pkgbase-repo.tar > CHECKSUM.SHA512 )
476d0ff67dbSColin Percival.endif
477a68d274bSGlen Barber
47829b282f3SGlen Barber.include "${.CURDIR}/Makefile.inc1"
4796513e474SGlen Barber.include "${.CURDIR}/Makefile.vm"
480d03c82c2SDoug Rabson.include "${.CURDIR}/Makefile.oci"
481