Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F177448698
D54548.1794427396.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
9 KB
Referenced Files
None
Subscribers
None
D54548.1794427396.diff
View Options
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/
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Nov 11, 8:03 PM (16 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41665009
Default Alt Text
D54548.1794427396.diff (9 KB)
Attached To
Mode
D54548: release: Improve error handling and option logic
Attached
Detach File
Event Timeline