Page MenuHomeFreeBSD

D54542.id169199.diff
No OneTemporary

D54542.id169199.diff

diff --git a/release/Makefile b/release/Makefile
--- a/release/Makefile
+++ b/release/Makefile
@@ -40,6 +40,23 @@
# TARGET/TARGET_ARCH: architecture of built release
#
+# These variables control which package sets are installed on the release
+# media (NOT the installed system). You almost certainly want to keep the
+# "kernels" set, or the installer won't be able to boot!
+RELEASE_MEDIA_SETS_DEFAULT?= kernels optional
+# dvd gets the entire system by default.
+RELEASE_MEDIA_SETS_DVD?= kernels optional devel
+# Using minimal for bootonly saves about 100MB.
+RELEASE_MEDIA_SETS_BOOTONLY?= kernels minimal
+
+# Base packages which should be installed in addition to the sets above.
+# bsdinstall and bsdconfig must be listed here since they aren't part of
+# minimal.
+RELEASE_BASE_PACKAGES?= bsdinstall bsdconfig
+
+# Set this to not print the warning about distsets being deprecated.
+#RELEASE_SKIP_DISTSET_WARNING=yes
+
WORLDDIR?= ${.CURDIR:H}
PORTSDIR?= /usr/ports
@@ -77,7 +94,9 @@
.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
+
PKG_ABI_FILE= ${WSTAGEDIR}/usr/bin/uname
PKG_ABI= $$(${PKG_CMD} -o ABI_FILE=${PKG_ABI_FILE} config ABI)
.endif
@@ -203,10 +222,11 @@
touch ${.TARGET}
.if !defined(NODISTSETS) || empty(NODISTSETS)
-disc1: packagesystem
-bootonly: packagesystem
-dvd: packagesystem
+disc1: print-distset-warning packagesystem
+bootonly: print-distset-warning packagesystem
+dvd: print-distset-warning packagesystem
.endif
+
.if !defined(NOPKGBASE) || empty(NOPKGBASE)
disc1: pkgbase-repo-dir
bootonly: pkgbase-repo-dir
@@ -228,17 +248,72 @@
${.OBJDIR}/pkgbase-repo/${PKG_ABI}/latest \
> pkgbase-repo-dir/FreeBSD-base.conf
+# 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 !defined(INSTALL_SYSTEM_ROOT) || empty(INSTALL_SYSTEM_ROOT)
+. error INSTALL_SYSTEM_ROOT must be defined
+. endif
+
+. if !defined(INSTALL_SYSTEM_MEDIATYPE) || empty(INSTALL_SYSTEM_MEDIATYPE)
+. error INSTALL_SYSTEM_MEDIATYPE must be defined
+. endif
+
+_INSTALL_SYSTEM_SETS=${RELEASE_MEDIA_SETS_${INSTALL_SYSTEM_MEDIATYPE:tu}:U${RELEASE_MEDIA_SETS_DEFAULT}}
+_INSTALL_SYSTEM_PKG=\
+ ${PKG_CMD} \
+ -o INSTALL_AS_USER=yes \
+ -o ASSUME_ALWAYS_YES=yes \
+ -o METALOG="${INSTALL_SYSTEM_ROOT}/METALOG" \
+ -o ABI="${PKG_ABI}" \
+ -o REPOS_DIR="${.OBJDIR}/pkgbase-repo-dir" \
+ -r "${INSTALL_SYSTEM_ROOT}"
+
+# Don't depend on pkgbase-repo here, since the medium target should have
+# already built it.
+install-system: .PHONY
+ mkdir -p "${INSTALL_SYSTEM_ROOT}"
+ ${_INSTALL_SYSTEM_PKG} \
+ install -f pkg \
+ ${_INSTALL_SYSTEM_SETS:S/^/${PKG_NAME_PREFIX}-set-/} \
+ ${RELEASE_BASE_PACKAGES:S/^/${PKG_NAME_PREFIX}-/}
+ ${_INSTALL_SYSTEM_PKG} clean -ay
+
+ # These files are created in post-install scripts and pkg doesn't
+ # currently support adding those to METALOG, so we need to do that
+ # ourselves.
+ echo "./etc/passwd type=file uname=root gname=wheel mode=0644" >>"${INSTALL_SYSTEM_ROOT}/METALOG"
+ echo "./etc/pwd.db type=file uname=root gname=wheel mode=0644" >>"${INSTALL_SYSTEM_ROOT}/METALOG"
+ echo "./etc/spwd.db type=file uname=root gname=wheel mode=0600" >>"${INSTALL_SYSTEM_ROOT}/METALOG"
+ echo "./etc/login.conf.db type=file uname=root gname=wheel mode=0644" >>"${INSTALL_SYSTEM_ROOT}/METALOG"
+ echo "./var/db/services.db type=file uname=root gname=wheel mode=0644" >>"${INSTALL_SYSTEM_ROOT}/METALOG"
+
+.endif # make(install-system)
+
+# Here be one, or possibly several dragons.
+print-distset-warning: .PHONY
+.if !defined(RELEASE_SKIP_DISTSET_WARNING) && (defined(NOPKGBASE) && !empty(NOPKGBASE))
+ @echo >&2 ""
+ @echo >&2 " *** WARNING *** WARNING *** WARNING ***"
+ @echo >&2 ""
+ @echo >&2 "Support for distribution set media is provided for use by downstream projects"
+ @echo >&2 "and is NOT supported by FreeBSD. This feature is not regularly tested, might"
+ @echo >&2 "not work correctly, and may be removed at any time."
+ @echo >&2 ""
+ @echo >&2 " *** WARNING *** WARNING *** WARNING ***"
+ @echo >&2 ""
+ @sleep 10
+.endif
+
disc1:
-# Install system
- mkdir -p ${.TARGET}
- ( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
- DESTDIR=${.OBJDIR}/${.TARGET} MK_AT=no \
- MK_INSTALLLIB=no MK_MAIL=no \
- ${_ALL_LIBCOMPATS:@v@MK_LIB$v=no@} \
- MK_TOOLCHAIN=no \
- MK_RESCUE=no MK_DICT=no \
- MK_KERNEL_SYMBOLS=no MK_TESTS=no MK_DEBUG_FILES=no)
.if !defined(NOPKGBASE) || empty(NOPKGBASE)
+# Install system
+ ${MAKE} -C ${.CURDIR} \
+ INSTALL_SYSTEM_ROOT=${.OBJDIR}/${.TARGET} \
+ INSTALL_SYSTEM_MEDIATYPE="${.TARGET}" \
+ install-system
# Create offline pkgbase repo on release media
mkdir -p ${.TARGET}/usr/freebsd-packages/repos/
${.CURDIR}/scripts/pkgbase-stage.lua disc \
@@ -250,7 +325,17 @@
mtree -c -p ${.TARGET}/usr/freebsd-packages | \
mtree -C -k type,mode,link,size | \
sed 's|^\.|./usr/freebsd-packages|g' >> ${.TARGET}/METALOG
-.endif
+.else # not pkgbase
+# Install system
+ mkdir -p ${.TARGET}
+ ( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
+ DESTDIR=${.OBJDIR}/${.TARGET} MK_AT=no \
+ MK_INSTALLLIB=no MK_MAIL=no \
+ ${_ALL_LIBCOMPATS:@v@MK_LIB$v=no@} \
+ MK_TOOLCHAIN=no \
+ 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 to provide legacy dist checksums in both modes
mkdir -p ${.TARGET}/usr/freebsd-dist
@@ -267,13 +352,7 @@
.endif
.if ${.MAKE.OS} == "FreeBSD" && (!defined(NOPKG) || empty(NOPKG))
# Install packages onto release media.
-.if !defined(NOPKGBASE) || empty(NOPKGBASE)
- ${PKGBASE_INSTALL} pkg
- ${PKGBASE_CLEAN}
-.else
- ${PKG_INSTALL} pkg
-.endif
- ${PKG_INSTALL} wifi-firmware-kmod-release || true
+ ${PKG_INSTALL} pkg wifi-firmware-kmod-release || true
${PKG_CLEAN} || true
.endif
# Set up installation environment
@@ -295,6 +374,12 @@
bootonly:
# Install system
+.if !defined(NOPKGBASE) || empty(NOPKGBASE)
+ ${MAKE} -C ${.CURDIR} \
+ INSTALL_SYSTEM_ROOT=${.OBJDIR}/${.TARGET} \
+ INSTALL_SYSTEM_MEDIATYPE="${.TARGET}" \
+ install-system
+.else # not pkgbase
mkdir -p ${.TARGET}
( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
DESTDIR=${.OBJDIR}/${.TARGET} MK_AT=no \
@@ -304,6 +389,7 @@
MK_TOOLCHAIN=no \
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
@@ -312,13 +398,7 @@
echo "./usr/freebsd-dist/MANIFEST type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
.endif
.if ${.MAKE.OS} == "FreeBSD" && (!defined(NOPKG) || empty(NOPKG))
-.if !defined(NOPKGBASE) || empty(NOPKGBASE)
- ${PKGBASE_INSTALL} pkg
- ${PKGBASE_CLEAN}
-.else
- ${PKG_INSTALL} pkg
-.endif
- ${PKG_INSTALL} wifi-firmware-iwlwifi-kmod wifi-firmware-rtw88-kmod || true
+ ${PKG_INSTALL} pkg wifi-firmware-iwlwifi-kmod wifi-firmware-rtw88-kmod || true
${PKG_CLEAN} || true
.endif
# Set up installation environment
@@ -338,12 +418,12 @@
echo "./etc/rc.local type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
dvd:
-# Install system
- mkdir -p ${.TARGET}
- ( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
- DESTDIR=${.OBJDIR}/${.TARGET} MK_RESCUE=no MK_KERNEL_SYMBOLS=no \
- MK_TESTS=no MK_DEBUG_FILES=no)
.if !defined(NOPKGBASE) || empty(NOPKGBASE)
+# Install system
+ ${MAKE} -C ${.CURDIR} \
+ INSTALL_SYSTEM_ROOT=${.OBJDIR}/${.TARGET} \
+ INSTALL_SYSTEM_MEDIATYPE="${.TARGET}" \
+ install-system
# Create offline pkgbase repo on release media
mkdir -p ${.TARGET}/usr/freebsd-packages/repos/
${.CURDIR}/scripts/pkgbase-stage.lua dvd \
@@ -355,7 +435,13 @@
mtree -c -p ${.TARGET}/usr/freebsd-packages | \
mtree -C -k type,mode,link,size | \
sed 's|^\.|./usr/freebsd-packages|g' >> ${.TARGET}/METALOG
-.endif
+.else # not pkgbase
+# Install system
+ mkdir -p ${.TARGET}
+ ( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
+ DESTDIR=${.OBJDIR}/${.TARGET} MK_RESCUE=no MK_KERNEL_SYMBOLS=no \
+ MK_TESTS=no MK_DEBUG_FILES=no)
+.endif # if pkgbase
.if !defined(NODISTSETS) || empty(NODISTSETS)
# Copy MANIFEST to provide legacy dist checksums in both modes
mkdir -p ${.TARGET}/usr/freebsd-dist
@@ -371,13 +457,7 @@
.endif
.if ${.MAKE.OS} == "FreeBSD" && (!defined(NOPKG) || empty(NOPKG))
# Install packages onto release media.
-.if !defined(NOPKGBASE) || empty(NOPKGBASE)
- ${PKGBASE_INSTALL} pkg
- ${PKGBASE_CLEAN}
-.else
- ${PKG_INSTALL} pkg
-.endif
- ${PKG_INSTALL} wifi-firmware-kmod-release || true
+ ${PKG_INSTALL} pkg wifi-firmware-kmod-release || true
${PKG_CLEAN} || true
.endif
# Set up installation environment

File Metadata

Mime Type
text/plain
Expires
Wed, Jan 21, 1:06 AM (12 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27543605
Default Alt Text
D54542.id169199.diff (9 KB)

Event Timeline