diff --git a/release/Makefile b/release/Makefile --- a/release/Makefile +++ b/release/Makefile @@ -89,31 +89,62 @@ .endfor .endif -.if !defined(NOPKGBASE) || empty(NOPKGBASE) -PKGBASE_REPO_DIR= pkgbase-repo-dir -PKG_NAME_PREFIX!= ${IMAKE} -f Makefile.inc1 -C ${WORLDDIR} -V PKG_NAME_PREFIX -WSTAGEDIR!= ${IMAKE} -f Makefile.inc1 -C ${WORLDDIR} -V WSTAGEDIR +# Determine what we want to put on the media. NOPKG turns off ports packages +# (e.g., wifi firmware), while NOPKGBASE turns off base packages and uses +# dist sets instead. If both are disabled, we avoid installing pkg at all. -PKG_ABI_FILE= ${WSTAGEDIR}/usr/bin/uname -PKG_ABI= $$(${PKG_CMD} -o ABI_FILE=${PKG_ABI_FILE} config ABI) +_USE_PKG=yes +_USE_PKGBASE=yes +_USE_PORTS=yes + +.if defined(NOPKGBASE) && !empty(NOPKGBASE) +_USE_PKGBASE=no +.else +. if ${.MAKE.OS} != "FreeBSD" +. error Building pkgbase release media is only supported on FreeBSD. +. endif .endif -.if ${.MAKE.OS} == "FreeBSD" +.if defined(NOPKG) && !empty(NOPKG) +_USE_PORTS=no +.else +. if ${.MAKE.OS} != "FreeBSD" +. error Building release media with third-party packages is only supported on FreeBSD. +. endif +.endif + +.if ${_USE_PKGBASE} == "no" && ${_USE_PKG} == "no" +_USE_PKG=no +.endif + +.if ${_USE_PKG} != "no" # For installing packages into the release media. -PKG_ENV+= INSTALL_AS_USER=yes -PKG_ENV+= ASSUME_ALWAYS_YES=yes +WSTAGEDIR!= ${IMAKE} -f Makefile.inc1 -C ${WORLDDIR} -V WSTAGEDIR +PKG_ABI_FILE= ${WSTAGEDIR}/usr/bin/uname +# We can't use != here because worldstage might not exist yet. +PKG_ABI= $$(${PKG_CMD} -o ABI_FILE=${PKG_ABI_FILE} config ABI) + +PKG_ARGS+= -o INSTALL_AS_USER=yes +PKG_ARGS+= -o ASSUME_ALWAYS_YES=yes PKG_ARGS+= -o METALOG=METALOG PKG_ARGS+= -o ABI=${PKG_ABI} PKG_ARGS+= -r ${.TARGET} -PKG_REPO_ARGS= -o REPOS_DIR=${.CURDIR}/pkg_repos -PKGBASE_REPO_ARGS=-o REPOS_DIR=${.OBJDIR}/pkgbase-repo-dir + # Pass -f to make sure pkg writes to the METALOG even if the package # is already installed from a previous build -PKG_INSTALL= env ${PKG_ENV} ${PKG_CMD} ${PKG_ARGS} ${PKG_REPO_ARGS} install -f -PKG_CLEAN= env ${PKG_ENV} ${PKG_CMD} ${PKG_ARGS} ${PKG_REPO_ARGS} clean -a +PKG_REPO_ARGS= -o REPOS_DIR=${.CURDIR}/pkg_repos +PKG_INSTALL= ${PKG_CMD} ${PKG_ARGS} ${PKG_REPO_ARGS} install -f +PKG_CLEAN= ${PKG_CMD} ${PKG_ARGS} ${PKG_REPO_ARGS} clean -a +.endif + +.if ${_USE_PKGBASE} != "no" +PKG_NAME_PREFIX!= ${IMAKE} -f Makefile.inc1 -C ${WORLDDIR} -V PKG_NAME_PREFIX + # This installs from the pkgbase repo we created during build. -PKGBASE_INSTALL=env ${PKG_ENV} ${PKG_CMD} ${PKG_ARGS} ${PKGBASE_REPO_ARGS} install -f -PKGBASE_CLEAN= env ${PKG_ENV} ${PKG_CMD} ${PKG_ARGS} ${PKGBASE_REPO_ARGS} clean -a +PKGBASE_REPO_DIR= pkgbase-repo-dir +PKGBASE_REPO_ARGS=-o REPOS_DIR=${.OBJDIR}/${PKGBASE_REPO_DIR} +PKGBASE_INSTALL=${PKG_CMD} ${PKG_ARGS} ${PKGBASE_REPO_ARGS} install -f +PKGBASE_CLEAN= ${PKG_CMD} ${PKG_ARGS} ${PKGBASE_REPO_ARGS} clean -a .endif .if !defined(VOLUME_LABEL) || empty(VOLUME_LABEL) @@ -121,6 +152,9 @@ .endif .if !exists(${PORTSDIR}) +. if ${_USE_PKGBASE} != "no" +. error PORTSDIR (${PORTSDIR}) must exist to build pkgbase media. +. endif NOPORTS= true .endif @@ -151,7 +185,7 @@ IMAGES+= memstick.img IMAGES+= mini-memstick.img .endif -.if !defined(NOPKGBASE) || empty(NOPKGBASE) +.if ${_USE_PKGBASE} != "no" RELEASE_TARGETS+= pkgbase-repo.tar .endif @@ -177,6 +211,7 @@ # # Legacy distribution tarballs # +.if !defined(NODISTSETS) || empty(NODISTSETS) base.txz: # Also (if enabled) tests, compat libs, and -dbg variants for all. mkdir -p ${DISTDIR} ( cd ${WORLDDIR} && ${IMAKE} distributeworld DISTDIR=${.OBJDIR}/${DISTDIR} ) @@ -222,17 +257,12 @@ sh ${.CURDIR}/scripts/make-manifest.sh $$(ls *.txz | grep -v container) > MANIFEST touch ${.TARGET} -.if !defined(NODISTSETS) || empty(NODISTSETS) disc1: packagesystem bootonly: packagesystem dvd: packagesystem .endif -.if !defined(NOPKGBASE) || empty(NOPKGBASE) -disc1: pkgbase-repo-dir -bootonly: pkgbase-repo-dir -dvd: pkgbase-repo-dir -.endif +.if ${_USE_PKGBASE} != "no" pkgbase-repo: mkdir -p pkgbase-repo ( ${IMAKE} -C ${WORLDDIR} packages REPODIR=${.OBJDIR}/pkgbase-repo \ @@ -247,10 +277,15 @@ ${.OBJDIR}/pkgbase-repo/${PKG_ABI}/latest \ > pkgbase-repo-dir/FreeBSD-base.conf +disc1: pkgbase-repo-dir +bootonly: pkgbase-repo-dir +dvd: pkgbase-repo-dir +.endif + # Install a system suitable for an installer from the release package repo. # This is usually invoked via submake by the various media targets, and # should not be added as a dependency of other targets. -.if make(install-system) +.if ${_USE_PKGBASE} != "no" && make(install-system) . if !defined(INSTALL_SYSTEM_ROOT) || empty(INSTALL_SYSTEM_ROOT) . error INSTALL_SYSTEM_ROOT must be defined @@ -293,7 +328,7 @@ .endif # make(install-system) disc1: -.if !defined(NOPKGBASE) || empty(NOPKGBASE) +.if ${_USE_PKGBASE} != "no" # Install system ${MAKE} -C ${.CURDIR} \ INSTALL_SYSTEM_ROOT=${.OBJDIR}/${.TARGET} \ @@ -321,25 +356,30 @@ MK_RESCUE=no MK_DICT=no \ MK_KERNEL_SYMBOLS=no MK_TESTS=no MK_DEBUG_FILES=no) .endif # if pkgbase + +# If we're building pkgbase media (i.e., NODISTSETS isn't defined), +# copy MANIFEST (the distset checksums) to allow a network install. .if !defined(NODISTSETS) || empty(NODISTSETS) # Copy MANIFEST to provide legacy dist checksums in both modes mkdir -p ${.TARGET}/usr/freebsd-dist echo "./usr/freebsd-dist type=dir uname=root gname=wheel mode=0755" >> ${.TARGET}/METALOG cp MANIFEST ${.TARGET}/usr/freebsd-dist echo "./usr/freebsd-dist/MANIFEST type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG -.if defined(NOPKGBASE) && !empty(NOPKGBASE) -# Copy distfiles +.if ${_USE_PKGBASE} == "no" +# For non-pkgbase media, also copy the actual sets. for dist in $$(ls *.txz | grep -v container | grep -vE -- '(${base ${_ALL_libcompats}:L:ts|})-dbg'); do \ cp $${dist} ${.TARGET}/usr/freebsd-dist; \ echo "./usr/freebsd-dist/$${dist} type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG; \ done .endif .endif -.if ${.MAKE.OS} == "FreeBSD" && (!defined(NOPKG) || empty(NOPKG)) + +.if ${_USE_PORTS} != "no" # Install packages onto release media. - ${PKG_INSTALL} pkg ${RELEASE_MEDIA_EXTRA_PACKAGES} || true - ${PKG_CLEAN} || true + ${PKG_INSTALL} pkg ${RELEASE_MEDIA_EXTRA_PACKAGES} + ${PKG_CLEAN} .endif + # Set up installation environment ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf @@ -359,7 +399,7 @@ bootonly: # Install system -.if !defined(NOPKGBASE) || empty(NOPKGBASE) +.if ${_USE_PKGBASE} != "no" ${MAKE} -C ${.CURDIR} \ INSTALL_SYSTEM_ROOT=${.OBJDIR}/${.TARGET} \ INSTALL_SYSTEM_MEDIATYPE="${.TARGET}" \ @@ -375,6 +415,7 @@ MK_RESCUE=no MK_DICT=no \ MK_KERNEL_SYMBOLS=no MK_TESTS=no MK_DEBUG_FILES=no) .endif # if pkgbase + .if !defined(NODISTSETS) || empty(NODISTSETS) # Copy manifest only (no distfiles) to get checksums mkdir -p ${.TARGET}/usr/freebsd-dist @@ -382,10 +423,12 @@ echo "./usr/freebsd-dist type=dir uname=root gname=wheel mode=0755" >> ${.TARGET}/METALOG echo "./usr/freebsd-dist/MANIFEST type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG .endif -.if ${.MAKE.OS} == "FreeBSD" && (!defined(NOPKG) || empty(NOPKG)) - ${PKG_INSTALL} pkg ${RELEASE_MEDIA_EXTRA_PACKAGES} || true - ${PKG_CLEAN} || true + +.if ${_USE_PORTS} != "no" + ${PKG_INSTALL} pkg ${RELEASE_MEDIA_EXTRA_PACKAGES} + ${PKG_CLEAN} .endif + # Set up installation environment ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf @@ -403,7 +446,7 @@ echo "./etc/rc.local type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG dvd: -.if !defined(NOPKGBASE) || empty(NOPKGBASE) +.if ${_USE_PKGBASE} != "no" # Install system ${MAKE} -C ${.CURDIR} \ INSTALL_SYSTEM_ROOT=${.OBJDIR}/${.TARGET} \ @@ -427,24 +470,26 @@ DESTDIR=${.OBJDIR}/${.TARGET} MK_RESCUE=no MK_KERNEL_SYMBOLS=no \ MK_TESTS=no MK_DEBUG_FILES=no) .endif # if pkgbase + +# Copy distfiles .if !defined(NODISTSETS) || empty(NODISTSETS) - # Copy MANIFEST to provide legacy dist checksums in both modes mkdir -p ${.TARGET}/usr/freebsd-dist echo "./usr/freebsd-dist type=dir uname=root gname=wheel mode=0755" >> ${.TARGET}/METALOG cp MANIFEST ${.TARGET}/usr/freebsd-dist echo "./usr/freebsd-dist/MANIFEST type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG -# Copy distfiles mkdir -p ${.TARGET}/usr/freebsd-dist for dist in $$(ls *.txz | grep -v container); do \ cp $${dist} ${.TARGET}/usr/freebsd-dist; \ echo "./usr/freebsd-dist/$${dist} type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG; \ done .endif -.if ${.MAKE.OS} == "FreeBSD" && (!defined(NOPKG) || empty(NOPKG)) + +.if ${_USE_PORTS} != "no" # Install packages onto release media. - ${PKG_INSTALL} pkg ${RELEASE_MEDIA_EXTRA_PACKAGES} || true - ${PKG_CLEAN} || true + ${PKG_INSTALL} pkg ${RELEASE_MEDIA_EXTRA_PACKAGES} + ${PKG_CLEAN} .endif + # Set up installation environment ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf @@ -489,7 +534,7 @@ cd bootonly-memstick && sh ${.CURDIR}/${TARGET}/make-memstick.sh ./METALOG ../${.TARGET} pkg-stage: dvd -.if !defined(NOPKG) || empty(NOPKG) +.if ${_USE_PORTS} != "no" env PORTSDIR=${PORTSDIR} REPOS_DIR=${.CURDIR}/pkg_repos/ \ sh ${.CURDIR}/scripts/pkg-stage.sh -N mkdir -p ${.OBJDIR}/dvd/packages/repos/