Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F142445401
D54542.id169199.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
9 KB
Referenced Files
None
Subscribers
None
D54542.id169199.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D54542: release: Build the release media from packages
Attached
Detach File
Event Timeline
Log In to Comment