aboutsummaryrefslogtreecommitdiff
path: root/release
diff options
context:
space:
mode:
Diffstat (limited to 'release')
-rw-r--r--release/Makefile140
-rw-r--r--release/Makefile.azure25
-rw-r--r--release/Makefile.ec244
-rw-r--r--release/Makefile.firecracker59
-rw-r--r--release/Makefile.gce50
-rw-r--r--release/Makefile.inc11
-rw-r--r--release/Makefile.mirrors15
-rw-r--r--release/Makefile.vagrant5
-rw-r--r--release/Makefile.vm172
-rw-r--r--release/amd64/amd64.conf1
-rwxr-xr-xrelease/amd64/make-memstick.sh49
-rw-r--r--release/amd64/mkisoimages.sh46
-rw-r--r--release/arm/GENERICSD.conf20
-rw-r--r--release/arm/RPI-B.conf50
-rw-r--r--release/arm64/PINE64-LTS.conf3
-rw-r--r--release/arm64/PINE64.conf3
-rw-r--r--release/arm64/PINEBOOK.conf3
-rw-r--r--release/arm64/ROCK64.conf3
-rw-r--r--release/arm64/ROCKPRO64.conf3
-rw-r--r--release/arm64/RPI.conf7
-rw-r--r--release/arm64/aarch64.conf1
-rwxr-xr-xrelease/arm64/make-memstick.sh45
-rw-r--r--release/arm64/mkisoimages.sh45
-rw-r--r--release/i386/i386.conf1
-rwxr-xr-xrelease/i386/make-memstick.sh47
-rw-r--r--release/i386/mkisoimages.sh37
-rw-r--r--release/packages/Makefile.package69
-rw-r--r--release/packages/binutils.ucl18
-rw-r--r--release/packages/certctl.ucl (renamed from release/packages/caroot.ucl)17
-rw-r--r--release/packages/clang-all.ucl1
-rw-r--r--release/packages/clang.ucl18
-rw-r--r--release/packages/clibs.ucl1
-rw-r--r--release/packages/gdb.ucl18
-rwxr-xr-xrelease/packages/generate-ucl.lua35
-rwxr-xr-xrelease/packages/generate-ucl.sh71
-rw-r--r--release/packages/groff.ucl18
-rw-r--r--release/packages/jail.ucl19
-rw-r--r--release/packages/kernel.ucl22
-rw-r--r--release/packages/lld-all.ucl1
-rw-r--r--release/packages/lld.ucl18
-rw-r--r--release/packages/lldb-all.ucl1
-rw-r--r--release/packages/lldb.ucl18
-rw-r--r--release/packages/runtime.ucl27
-rw-r--r--release/packages/ssh-all.ucl1
-rw-r--r--release/packages/ssh.ucl18
-rw-r--r--release/packages/svn.ucl18
-rw-r--r--release/packages/template.ucl17
-rw-r--r--release/packages/unbound-all.ucl1
-rw-r--r--release/packages/unbound.ucl18
-rw-r--r--release/packages/utilities.ucl22
-rw-r--r--release/pkg_repos/release-dvd.conf1
-rw-r--r--release/powerpc/boot.tbxi1
-rwxr-xr-xrelease/powerpc/generate-hfs.sh3
-rw-r--r--release/powerpc/hfs-boot.bz2.uu1
-rw-r--r--release/powerpc/mkisoimages.sh72
-rw-r--r--release/powerpc/powerpc.conf1
-rw-r--r--release/powerpc/powerpc64.conf1
-rw-r--r--release/powerpc/powerpc64le.conf1
-rw-r--r--release/powerpc/powerpcspe.conf1
-rwxr-xr-xrelease/rc.local130
-rw-r--r--release/release.conf.sample2
-rwxr-xr-xrelease/release.sh16
-rw-r--r--release/riscv/GENERICSD.conf19
-rwxr-xr-xrelease/riscv/make-memstick.sh45
-rw-r--r--release/riscv/mkisoimages.sh45
-rw-r--r--release/riscv/riscv64.conf1
-rw-r--r--release/scripts/FreeBSD_install_cdrom.conf1
-rwxr-xr-xrelease/scripts/atlas-upload.sh1
-rwxr-xr-xrelease/scripts/list-new-changesets.py1
-rwxr-xr-xrelease/scripts/make-manifest.sh1
-rwxr-xr-xrelease/scripts/make-pkg-package.sh2
-rwxr-xr-xrelease/scripts/mk-vmimage.sh13
-rwxr-xr-xrelease/scripts/mm-mtree.sh2
-rw-r--r--release/scripts/mtree-to-plist.awk20
-rwxr-xr-xrelease/scripts/pkg-stage.sh35
-rw-r--r--release/tools/arm.subr84
-rw-r--r--release/tools/azure.conf13
-rw-r--r--release/tools/basic-ci.conf1
-rw-r--r--release/tools/basic-cloudinit.conf36
-rw-r--r--release/tools/ec2-base.conf52
-rw-r--r--release/tools/ec2-cloud-init.conf32
-rw-r--r--release/tools/ec2.conf124
-rw-r--r--release/tools/gce.conf21
-rw-r--r--release/tools/oci.conf94
-rw-r--r--release/tools/openstack.conf3
-rw-r--r--release/tools/vagrant-virtualbox.conf2
-rw-r--r--release/tools/vagrant-vmware.conf2
-rw-r--r--release/tools/vagrant.conf6
-rw-r--r--release/tools/vmimage.subr123
89 files changed, 1381 insertions, 970 deletions
diff --git a/release/Makefile b/release/Makefile
index 646b9f8738d2..489cf4623ff4 100644
--- a/release/Makefile
+++ b/release/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
# Makefile for building releases and release media.
#
@@ -37,6 +36,8 @@
WORLDDIR?= ${.CURDIR}/..
PORTSDIR?= /usr/ports
+.include "${WORLDDIR}/share/mk/bsd.compat.pre.mk"
+
.if !defined(TARGET) || empty(TARGET)
TARGET= ${MACHINE}
.endif
@@ -74,12 +75,12 @@ VOLUME_LABEL= FreeBSD_Install
NOPORTS= true
.endif
-EXTRA_PACKAGES=
+DISTRIBUTIONS= base.txz kernel.txz
.if !defined(NOPORTS)
-EXTRA_PACKAGES+= ports.txz
+DISTRIBUTIONS+= ports.txz
.endif
.if !defined(NOSRC)
-EXTRA_PACKAGES+= src.txz
+DISTRIBUTIONS+= src.txz
.endif
RELEASE_TARGETS= ftp
@@ -108,7 +109,7 @@ CLEANFILES+= ${I}.xz
.if defined(WITH_DVD) && !empty(WITH_DVD)
CLEANFILES+= pkg-stage
.endif
-CLEANDIRS= dist ftp disc1 bootonly dvd
+CLEANDIRS= dist ftp disc1 disc1-disc1 disc1-memstick bootonly bootonly-bootonly bootonly-memstick dvd
beforeclean:
chflags -R noschg .
.include <bsd.obj.mk>
@@ -116,53 +117,66 @@ clean: beforeclean
base.txz:
mkdir -p ${DISTDIR}
- cd ${WORLDDIR} && ${IMAKE} distributeworld DISTDIR=${.OBJDIR}/${DISTDIR}
-# Set up mergemaster root database
- sh ${.CURDIR}/scripts/mm-mtree.sh -m ${WORLDDIR} -F \
- "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET} ${.MAKE.JOBS:D-j${.MAKE.JOBS}}" \
- -D "${.OBJDIR}/${DISTDIR}/base"
- etcupdate extract -B -M "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" \
- -s ${WORLDDIR} -d "${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate"
+ ( cd ${WORLDDIR} && ${IMAKE} distributeworld DISTDIR=${.OBJDIR}/${DISTDIR} )
+ # Bootstrap etcupdate(8) database.
+ sh ${WORLDDIR}/usr.sbin/etcupdate/etcupdate.sh extract -B \
+ -m "${MAKE}" -M "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" \
+ -s ${WORLDDIR} -d "${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate" \
+ ${NO_ROOT:D-N}
+.if defined(NO_ROOT)
+ echo "./var/db/etcupdate type=dir uname=root gname=wheel mode=0755" >> ${.OBJDIR}/${DISTDIR}/base.meta
+ sed -n 's,^\.,./var/db/etcupdate/current,p' ${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate/current/METALOG \
+ >> ${.OBJDIR}/${DISTDIR}/base.meta
+ rm ${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate/current/METALOG
+.endif
# Package all components
- cd ${WORLDDIR} && ${IMAKE} packageworld DISTDIR=${.OBJDIR}/${DISTDIR}
+ ( cd ${WORLDDIR} && ${IMAKE} packageworld DISTDIR=${.OBJDIR}/${DISTDIR} )
mv ${DISTDIR}/*.txz .
kernel.txz:
mkdir -p ${DISTDIR}
- cd ${WORLDDIR} && ${IMAKE} distributekernel packagekernel DISTDIR=${.OBJDIR}/${DISTDIR}
+ ( cd ${WORLDDIR} && ${IMAKE} distributekernel DISTDIR=${.OBJDIR}/${DISTDIR} )
+ ( cd ${WORLDDIR} && ${IMAKE} packagekernel DISTDIR=${.OBJDIR}/${DISTDIR} )
mv ${DISTDIR}/kernel*.txz .
src.txz:
mkdir -p ${DISTDIR}/usr
ln -fs ${WORLDDIR} ${DISTDIR}/usr/src
- cd ${DISTDIR} && tar cLvf - --exclude .svn --exclude .zfs \
+ ( cd ${DISTDIR} && ${TAR_CMD} cLvf - --exclude .svn --exclude .zfs \
--exclude .git --exclude @ --exclude usr/src/release/dist usr/src | \
- ${XZ_CMD} > ${.OBJDIR}/src.txz
+ ${XZ_CMD} > ${.OBJDIR}/src.txz )
ports.txz:
mkdir -p ${DISTDIR}/usr
ln -fs ${PORTSDIR} ${DISTDIR}/usr/ports
- cd ${DISTDIR} && tar cLvf - \
+ ( cd ${DISTDIR} && ${TAR_CMD} cLvf - \
--exclude .git --exclude .svn \
--exclude usr/ports/distfiles --exclude usr/ports/packages \
--exclude 'usr/ports/INDEX*' --exclude work usr/ports | \
- ${XZ_CMD} > ${.OBJDIR}/ports.txz
+ ${XZ_CMD} > ${.OBJDIR}/ports.txz )
disc1: packagesystem
# Install system
mkdir -p ${.TARGET}
- cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
+ ( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
DESTDIR=${.OBJDIR}/${.TARGET} MK_AT=no \
- MK_INSTALLLIB=no MK_LIB32=no MK_MAIL=no \
+ MK_INSTALLLIB=no MK_MAIL=no \
+ ${_ALL_LIBCOMPATS:@v@MK_LIB$v=no@} \
MK_TOOLCHAIN=no MK_PROFILE=no \
MK_RESCUE=no MK_DICT=no \
MK_KERNEL_SYMBOLS=no MK_TESTS=no MK_DEBUG_FILES=no \
- -DDB_FROM_SRC
+ -DDB_FROM_SRC )
# Copy distfiles
mkdir -p ${.TARGET}/usr/freebsd-dist
- for dist in MANIFEST $$(ls *.txz | grep -vE -- '(base|lib32)-dbg'); \
+ for dist in MANIFEST $$(ls *.txz | grep -vE -- '(${base ${_ALL_libcompats}:L:ts|})-dbg'); \
do cp $${dist} ${.TARGET}/usr/freebsd-dist; \
done
+.if defined(NO_ROOT)
+ echo "./usr/freebsd-dist type=dir uname=root gname=wheel mode=0755" >> ${.TARGET}/METALOG
+ for dist in MANIFEST $$(ls *.txz | grep -vE -- '(${base ${_ALL_libcompats}:L:ts|})-dbg'); \
+ do echo "./usr/freebsd-dist/$${dist} type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG; \
+ done
+.endif
# Set up installation environment
ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf
@@ -170,23 +184,36 @@ disc1: packagesystem
echo debug.witness.trace=0 >> ${.TARGET}/etc/sysctl.conf
echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
+ echo loader_menu_multi_user_prompt=\"Installer\" >> ${.TARGET}/boot/loader.conf
cp ${.CURDIR}/rc.local ${.TARGET}/etc
+.if defined(NO_ROOT)
+ echo "./etc/resolv.conf type=link uname=root gname=wheel mode=0644 link=/tmp/bsdinstall_etc/resolv.conf" >> ${.TARGET}/METALOG
+ echo "./etc/rc.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
+ echo "./etc/sysctl.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
+ echo "./boot/loader.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
+ echo "./etc/rc.local type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
+.endif
touch ${.TARGET}
bootonly: packagesystem
# Install system
mkdir -p ${.TARGET}
- cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
+ ( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
DESTDIR=${.OBJDIR}/${.TARGET} MK_AT=no \
MK_GAMES=no \
- MK_INSTALLLIB=no MK_LIB32=no MK_MAIL=no \
+ MK_INSTALLLIB=no MK_MAIL=no \
+ ${_ALL_LIBCOMPATS:@v@MK_LIB$v=no@} \
MK_TOOLCHAIN=no MK_PROFILE=no \
MK_RESCUE=no MK_DICT=no \
MK_KERNEL_SYMBOLS=no MK_TESTS=no MK_DEBUG_FILES=no \
- -DDB_FROM_SRC
+ -DDB_FROM_SRC )
# Copy manifest only (no distfiles) to get checksums
mkdir -p ${.TARGET}/usr/freebsd-dist
cp MANIFEST ${.TARGET}/usr/freebsd-dist
+.if defined(NO_ROOT)
+ 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
# Set up installation environment
ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf
@@ -194,20 +221,34 @@ bootonly: packagesystem
echo debug.witness.trace=0 >> ${.TARGET}/etc/sysctl.conf
echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
+ echo loader_menu_multi_user_prompt=\"Installer\" >> ${.TARGET}/boot/loader.conf
cp ${.CURDIR}/rc.local ${.TARGET}/etc
+.if defined(NO_ROOT)
+ echo "./etc/resolv.conf type=link uname=root gname=wheel mode=0644 link=/tmp/bsdinstall_etc/resolv.conf" >> ${.TARGET}/METALOG
+ echo "./etc/rc.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
+ echo "./etc/sysctl.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
+ echo "./boot/loader.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
+ echo "./etc/rc.local type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
+.endif
dvd: packagesystem
# Install system
mkdir -p ${.TARGET}
- cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
+ ( cd ${WORLDDIR} && ${IMAKE} installworld installkernel distribution \
DESTDIR=${.OBJDIR}/${.TARGET} MK_RESCUE=no MK_KERNEL_SYMBOLS=no \
MK_TESTS=no MK_DEBUG_FILES=no \
- -DDB_FROM_SRC
+ -DDB_FROM_SRC )
# Copy distfiles
mkdir -p ${.TARGET}/usr/freebsd-dist
- for dist in MANIFEST $$(ls *.txz | grep -v -- '(base|lib32)-dbg'); \
+ for dist in MANIFEST $$(ls *.txz | grep -v -- '(${base ${_ALL_libcompats}:L:ts|})-dbg'); \
do cp $${dist} ${.TARGET}/usr/freebsd-dist; \
done
+.if defined(NO_ROOT)
+ echo "./usr/freebsd-dist type=dir uname=root gname=wheel mode=0755" >> ${.TARGET}/METALOG
+ for dist in MANIFEST $$(ls *.txz | grep -vE -- '(${base ${_ALL_libcompats}:L:ts|})-dbg'); \
+ do echo "./usr/freebsd-dist/$${dist} type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG; \
+ done
+.endif
# Set up installation environment
ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf
@@ -215,32 +256,49 @@ dvd: packagesystem
echo debug.witness.trace=0 >> ${.TARGET}/etc/sysctl.conf
echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
+ echo loader_menu_multi_user_prompt=\"Installer\" >> ${.TARGET}/boot/loader.conf
cp ${.CURDIR}/rc.local ${.TARGET}/etc
+.if defined(NO_ROOT)
+ echo "./etc/resolv.conf type=link uname=root gname=wheel mode=0644 link=/tmp/bsdinstall_etc/resolv.conf" >> ${.TARGET}/METALOG
+ echo "./etc/rc.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
+ echo "./etc/sysctl.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
+ echo "./boot/loader.conf type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
+ echo "./etc/rc.local type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG
+.endif
touch ${.TARGET}
+disc1-disc1 disc1-memstick: disc1
+ mkdir ${.TARGET}
+ tar -cf- -C disc1 . | tar -xf- -C ${.TARGET}
+
+bootonly-bootonly bootonly-memstick: bootonly
+ mkdir ${.TARGET}
+ tar -cf- -C bootonly . | tar -xf- -C ${.TARGET}
+
release.iso: disc1.iso
-disc1.iso: disc1
- sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_CD ${.TARGET} disc1 ${XTRADIR}
+disc1.iso: disc1-disc1
+ cd disc1-disc1 && sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_CD ../${.TARGET} .${NO_ROOT:D/METALOG} ${XTRADIR}
dvd1.iso: dvd pkg-stage
- sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_DVD ${.TARGET} dvd ${XTRADIR}
+ cd dvd && sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_DVD ../${.TARGET} .${NO_ROOT:D/METALOG} ${XTRADIR}
-bootonly.iso: bootonly
- sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_BO ${.TARGET} bootonly ${XTRADIR}
+bootonly.iso: bootonly-bootonly
+ cd bootonly-bootonly && sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_BO ../${.TARGET} .${NO_ROOT:D/METALOG} ${XTRADIR}
memstick: memstick.img
-memstick.img: disc1
- sh ${.CURDIR}/${TARGET}/make-memstick.sh disc1 ${.TARGET}
+memstick.img: disc1-memstick
+ cd disc1-memstick && sh ${.CURDIR}/${TARGET}/make-memstick.sh .${NO_ROOT:D/METALOG} ../${.TARGET}
mini-memstick: mini-memstick.img
-mini-memstick.img: bootonly
- sh ${.CURDIR}/${TARGET}/make-memstick.sh bootonly ${.TARGET}
+mini-memstick.img: bootonly-memstick
+ cd bootonly-memstick && sh ${.CURDIR}/${TARGET}/make-memstick.sh .${NO_ROOT:D/METALOG} ../${.TARGET}
-packagesystem: base.txz kernel.txz ${EXTRA_PACKAGES}
+packagesystem: ${DISTRIBUTIONS}
sh ${.CURDIR}/scripts/make-manifest.sh *.txz > MANIFEST
touch ${.TARGET}
-pkg-stage:
+pkg-stage: dvd
+# TODO: Support for -DNO_ROOT
.if !defined(NOPKG) || empty(NOPKG)
env PORTSDIR=${PORTSDIR} REPOS_DIR=${.CURDIR}/pkg_repos/ \
sh ${.CURDIR}/scripts/pkg-stage.sh
@@ -282,8 +340,8 @@ release-install:
${XZ_CMD} -k ${DESTDIR}/${OSRELEASE}-${I}
. endif
.endfor
- cd ${DESTDIR} && sha512 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA512
- cd ${DESTDIR} && sha256 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA256
+ ( cd ${DESTDIR} && sha512 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA512 )
+ ( cd ${DESTDIR} && sha256 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA256 )
.endif
.include "${.CURDIR}/Makefile.inc1"
diff --git a/release/Makefile.azure b/release/Makefile.azure
index 4e9e33184dfc..36f3f8715de1 100644
--- a/release/Makefile.azure
+++ b/release/Makefile.azure
@@ -1,11 +1,9 @@
#
-# $FreeBSD$
#
#
# Makefile for uploading Microsoft Azure disk images.
#
-AZURE_IMG?= ${.OBJDIR}/azure.vhdf
AZURE_UPLOAD_TGTS= azure-check-depends \
azure-do-upload
CLEANFILES+= ${AZURE_UPLOAD_TGTS}
@@ -20,8 +18,6 @@ AZURE${VAR}!= grep -E '^AZURE${VAR}' ${AZURE_UPLOAD_CONF} | awk -F ' ' '{print $
SNAPSHOT_DATE!= date +-${BUILDDATE}
.endif
-AZURE_TARGET:= ${OSRELEASE}${SNAPSHOT_DATE}
-
START_DATE!= date -v-1d -I -u
EXPIRY_DATE!= date -v+1m -I -u
@@ -39,20 +35,26 @@ azure-check-depends:
. if !exists(/usr/local/sbin/pkg-static)
env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf
. endif
- env ASSUME_ALWAYS_YES=yes pkg install -y py38-azure-cli
+ env ASSUME_ALWAYS_YES=yes pkg install -y sysutils/py-azure-cli
. else
- env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/sysutils/py-azure-cli BATCH=1 all install clean
+ env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/sysutils/py-azure-cli \
+ BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
+ all install clean
. endif
.endif
-azure-do-upload:
+.for _FS in ${AZURE_FSLIST}
+AZURE_IMG_${_FS}= ${.OBJDIR}/azure.${_FS}.vhdf
+AZURE_TARGET_${_FS}= ${OSRELEASE}-${_FS}${SNAPSHOT_DATE}
+
+azure-do-upload-${_FS}:
/usr/local/bin/az storage blob upload \
--account-name ${AZURE_ACCOUNT} --account-key ${AZURE_KEY} \
--container-name ${AZURE_STORAGE} --type page \
- --file ${AZURE_IMG} --name ${AZURE_TARGET}.vhd
+ --file ${AZURE_IMG_${_FS}} --name ${AZURE_TARGET_${_FS}}.vhd
@echo "The disk access URL with shared access signature is:"
@echo
- @echo -n https://${AZURE_ACCOUNT}.blob.core.windows.net/${AZURE_STORAGE}/${AZURE_TARGET}.vhd?
+ @echo -n https://${AZURE_ACCOUNT}.blob.core.windows.net/${AZURE_STORAGE}/${AZURE_TARGET_${_FS}}.vhd?
@/usr/local/bin/az storage container generate-sas \
--account-name ${AZURE_ACCOUNT} --account-key ${AZURE_KEY} \
--name ${AZURE_STORAGE} \
@@ -68,5 +70,8 @@ azure-do-upload:
@echo
@echo /usr/local/bin/az storage blob delete \
--account-name ${AZURE_ACCOUNT} --account-key ${AZURE_KEY} \
- --container-name ${AZURE_STORAGE} --name ${AZURE_TARGET}.vhd
+ --container-name ${AZURE_STORAGE} --name ${AZURE_TARGET_${_FS}}.vhd
@echo
+.endfor
+
+azure-do-upload: azure-do-upload-${VMFS}
diff --git a/release/Makefile.ec2 b/release/Makefile.ec2
index b29f54715fb3..8f5f6f205779 100644
--- a/release/Makefile.ec2
+++ b/release/Makefile.ec2
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
#
# Makefile for creating an EC2 AMI from a disk image.
@@ -18,18 +17,18 @@ PUBLICSNAP= --publicsnap
EC2SNSREL= ${REVISION}-${BRANCH}
EC2SNSVERS= ${GITBRANCH}@${GITREV}
.endif
-.if defined(SSMPREFIX) && !empty(SSMPREFIX)
-SSMOPTS= --ssm-name ${SSMPREFIX}/${TARGET_ARCH:S/aarch64/arm64/}/base/ufs/${REVISION}/${BRANCH}
-.endif
.if ${TARGET_ARCH} != "amd64"
EC2ARCH= --${TARGET_ARCH:S/aarch64/arm64/}
.endif
.if !defined(AMIBOOTMETHOD)
-AMIBOOTMETHOD= UEFI
+AMIBOOTMETHOD= UEFI-PREFERRED
.endif
.if ${AMIBOOTMETHOD} == "UEFI" && ${TARGET_ARCH} == "amd64"
BOOTMODEOPT= --uefi
.endif
+.if ${AMIBOOTMETHOD} == "UEFI-PREFERRED" && ${TARGET_ARCH} == "amd64"
+BOOTMODEOPT= --uefi-preferred
+.endif
CLEANFILES+= ec2ami
@@ -41,17 +40,27 @@ CW_EC2_PORTINSTALL=
.endif
cw-ec2-portinstall:
-.if exists(${PORTSDIR}/net/bsdec2-image-upload/Makefile)
- env - UNAME_r=${UNAME_r} PATH=$$PATH make -C ${PORTSDIR}/net/bsdec2-image-upload BATCH=1 all install clean
-.else
-. if !exists(/usr/local/sbin/pkg-static)
- env ASSUME_ALWAYS_YES=yes pkg bootstrap -y
-. endif
+.if !exists(/usr/local/bin/bsdec2-image-upload)
+. if !exists(${PORTSDIR}/net/bsdec2-image-upload/Makefile)
+. if !exists(/usr/local/sbin/pkg-static)
+ env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf
+. endif
env ASSUME_ALWAYS_YES=yes pkg install -y net/bsdec2-image-upload
+. else
+ env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/net/bsdec2-image-upload \
+ BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
+ all install clean
+. endif
.endif
@touch ${.TARGET}
-ec2ami: cw-ec2 ${CW_EC2_PORTINSTALL}
+.for _FS in ${EC2_FSLIST}
+.for _FL in ${EC2_FLAVOURS:tl}
+.if defined(SSMPREFIX) && !empty(SSMPREFIX)
+SSMOPTS_${_FL}_${_FS}= --ssm-name ${SSMPREFIX}/${TARGET_ARCH:S/aarch64/arm64/}/${_FL}/${_FS}/${REVISION}/${BRANCH}
+.endif
+EC2AMILIST+= ec2ami-${_FL}-${_FS}
+ec2ami-${_FL}-${_FS}: cw-ec2-${_FL}-${_FS} ${CW_EC2_PORTINSTALL}
.if !defined(AWSKEYFILE) || !exists(${AWSKEYFILE})
@echo "--------------------------------------------------------------"
@echo ">>> AWSKEYFILE must point at AWS keys for EC2 AMI creation"
@@ -71,10 +80,15 @@ ec2ami: cw-ec2 ${CW_EC2_PORTINSTALL}
@false
.endif
/usr/local/bin/bsdec2-image-upload ${PUBLISH} ${PUBLICSNAP} \
- ${EC2ARCH} ${SSMOPTS} ${BOOTMODEOPT} --sriov --ena \
- ${.OBJDIR}/ec2.raw \
- "${TYPE} ${REVISION}-${BRANCH}-${TARGET}${AMINAMESUFFIX} ${AMIBOOTMETHOD}" \
+ ${EC2ARCH} ${SSMOPTS_${_FL}_${_FS}} ${BOOTMODEOPT} --sriov --ena \
+ ${.OBJDIR}/${EC2-${_FL:tu}${_FS:tu}IMAGE} \
+ "${TYPE} ${REVISION}-${BRANCH}-${TARGET}${AMINAMESUFFIX} ${AMIBOOTMETHOD} ${_FL} ${_FS:tu}" \
"${TYPE}/${TARGET} ${GITBRANCH}@${GITREV}" \
${AWSREGION} ${AWSBUCKET} ${AWSKEYFILE} \
${EC2SNSTOPIC} ${EC2SNSREL} ${EC2SNSVERS}
@touch ${.TARGET}
+.endfor
+.endfor
+
+ec2ami: ec2ami-base-${VMFS}
+ec2amis: ${EC2AMILIST}
diff --git a/release/Makefile.firecracker b/release/Makefile.firecracker
new file mode 100644
index 000000000000..dc5506f364d2
--- /dev/null
+++ b/release/Makefile.firecracker
@@ -0,0 +1,59 @@
+#
+# Makefile for creating FreeBSD/Firecracker artifacts
+#
+
+CLEANDIRS+= ${TARGET}/firecracker-kern ${TARGET}/firecracker-world
+
+# Bits related to hardware which won't exist in a VM.
+WITHOUT_VM_ENOENT=WITHOUT_APM=YES WITHOUT_BLUETOOTH=YES WITHOUT_CXGBETOOL=YES \
+ WITHOUT_FLOPPY=YES WITHOUT_GPIO=YES WITHOUT_MLX5TOOL=YES WITHOUT_USB=YES \
+ WITHOUT_USB_GADGET_EXAMPLES=YES WITHOUT_VT=YES WITHOUT_WIRELESS=YES
+# Bits related to software which doesn't exist in Firecracker specifically.
+WITHOUT_FC_ENOENT=WITHOUT_ACPI=YES WITHOUT_BOOT=YES WITHOUT_BHYVE=YES \
+ WITHOUT_EFI=YES WITHOUT_FDT=YES WITHOUT_HYPERV=YES \
+ WITHOUT_LEGACY_CONSOLE=YES WITHOUT_SYSCONS=YES
+# Bits which take up a lot of space and probably won't be wanted inside a
+# Firecracker VM.
+WITHOUT_FC_FEATURES=WITHOUT_DEBUG_FILES=YES WITHOUT_INCLUDES=YES \
+ WITHOUT_INSTALLLIB=YES WITHOUT_TESTS=YES WITHOUT_TOOLCHAIN=YES
+# All the excluded bits
+WITHOUTS?=${WITHOUT_VM_ENOENT} ${WITHOUT_FC_ENOENT} ${WITHOUT_FC_FEATURES}
+
+firecracker: firecracker-freebsd-kern.bin firecracker-freebsd-rootfs.bin
+
+FCKDIR= ${.OBJDIR}/${TARGET}/firecracker-kern
+firecracker-freebsd-kern.bin:
+.if !defined(DESTDIR) || !exists(${DESTDIR})
+ @echo "--------------------------------------------------------------"
+ @echo ">>> DESTDIR must point to destination for Firecracker binaries"
+ @echo "--------------------------------------------------------------"
+ @false
+.endif
+ mkdir -p ${FCKDIR}
+ ${MAKE} -C ${WORLDDIR} DESTDIR=${FCKDIR} \
+ KERNCONF=FIRECRACKER TARGET=${TARGET} installkernel
+ cp ${FCKDIR}/boot/kernel/kernel ${DESTDIR}/freebsd-kern.bin
+
+FCWDIR= ${.OBJDIR}/${TARGET}/firecracker-world
+FCROOTFSSZ?= 1g
+firecracker-freebsd-rootfs.bin:
+ mkdir -p ${FCWDIR}
+ ${MAKE} -C ${WORLDDIR} DESTDIR=${FCWDIR} \
+ ${WITHOUTS} TARGET=${TARGET} installworld distribution distrib-dirs
+ echo '/dev/ufs/rootfs / ufs rw 1 1' > ${FCWDIR}/etc/fstab
+ echo 'hostname="freebsd"' >> ${FCWDIR}/etc/rc.conf
+ echo 'ifconfig_vtnet0="inet 10.0.0.2 netmask 255.255.0.0"' >> ${FCWDIR}/etc/rc.conf
+ echo 'defaultrouter="10.0.0.1"' >> ${FCWDIR}/etc/rc.conf
+ echo 'sshd_enable="YES"' >> ${FCWDIR}/etc/rc.conf
+ echo 'sshd_rsa_enable="NO"' >> ${FCWDIR}/etc/rc.conf
+ echo 'growfs_enable="YES"' >> ${FCWDIR}/etc/rc.conf
+ echo 'nameserver 8.8.8.8' >> ${FCWDIR}/etc/resolv.conf
+ sed -i '' -e '/periodic/s/^/#/' ${FCWDIR}/etc/crontab
+ pw -R ${FCWDIR} groupadd freebsd -g 1001
+ mkdir -p ${FCWDIR}/home/freebsd
+ pw -R ${FCWDIR} useradd freebsd -m -M 0755 -w yes -n freebsd \
+ -u 1001 -g 1001 -G 0 -c "FreeBSD User" -d /home/freebsd -s /bin/sh
+ pw -R ${FCWDIR} usermod root -w yes
+ touch ${FCWDIR}/firstboot
+ makefs -s ${FCROOTFSSZ} -o label=rootfs -o version=2 -o softupdates=1 \
+ ${DESTDIR}/freebsd-rootfs.bin ${FCWDIR}
diff --git a/release/Makefile.gce b/release/Makefile.gce
index fac6918eab34..51dc5e3436e2 100644
--- a/release/Makefile.gce
+++ b/release/Makefile.gce
@@ -1,11 +1,9 @@
#
-# $FreeBSD$
#
#
# Makefile for uploading Google Compute Engine disk images.
#
-GCE_IMG?= ${.OBJDIR}/gce.raw
GCE_UPLOAD_TGTS= gce-check-depends \
gce-do-package \
gce-do-upload
@@ -28,10 +26,6 @@ SNAPSHOT_DATE= -v${BUILDDATE}
GCE_FAMILY_SUFX= -snap
.endif
-# Really? Uppercase characters are not allowed? Sigh...
-# And don't even get me started on the '.'.
-GCE_TARGET:= ${OSRELEASE:S,.raw,,:tl:S,.,-,g}${SNAPSHOT_DATE}
-
gce-upload: ${GCE_UPLOAD_TGTS}
gce-check-depends:
@@ -46,31 +40,47 @@ gce-check-depends:
. if !exists(/usr/local/sbin/pkg-static)
env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf
. endif
- env ASSUME_ALWAYS_YES=yes pkg install -y net/google-cloud-sdk
+ env ASSUME_ALWAYS_YES=yes pkg install -y net/google-cloud-sdk \
+ lang/python
. else
- env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/net/google-cloud-sdk BATCH=1 all install clean
+ env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/net/google-cloud-sdk \
+ BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
+ all install clean
+ env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/lang/python \
+ BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
+ all install clean
. endif
.endif
-gce-do-package:
- @# Yes, really... Sigh.
- cd ${.OBJDIR} && mv gce.raw disk.raw
- cd ${.OBJDIR} && tar --format=gnutar -zcf \
- ${GCE_TARGET:S,${.OBJDIR}/,,}.tar.gz disk.raw
- cd ${.OBJDIR} && mv disk.raw gce.raw
- touch ${.OBJDIR}/${.TARGET}
-
gce-do-login:
@echo "This requires human interaction, which is not yet supported."
@true
-gce-do-upload:
+.for _FS in ${GCE_FSLIST}
+GCE_IMG_${_FS}= ${.OBJDIR}/gce.${_FS}.raw
+# Really? Uppercase characters are not allowed? Sigh...
+# And don't even get me started on the '.'.
+GCE_TARGET_${_FS}= ${OSRELEASE:S,.raw,,:tl:S,.,-,g}-${_FS}${SNAPSHOT_DATE}
+
+gce-do-package-${_FS}:
+ @# Yes, really... Sigh.
+ cd ${.OBJDIR} && mv ${GCE_IMG_${_FS}} disk.raw
+ cd ${.OBJDIR} && tar --format=gnutar -zcf \
+ ${GCE_TARGET_${_FS}:S,${.OBJDIR}/,,}.tar.gz disk.raw
+ cd ${.OBJDIR} && mv disk.raw ${GCE_IMG_${_FS}}
+ touch ${.OBJDIR}/${.TARGET}
+
+gce-do-upload-${_FS}:
@# Fallthrough in case the bucket already exists.
/usr/local/bin/gsutil mb gs://${GCE_BUCKET} || true
- /usr/local/bin/gsutil cp ${.OBJDIR}/${GCE_TARGET}.tar.gz \
+ /usr/local/bin/gsutil cp ${.OBJDIR}/${GCE_TARGET_${_FS}}.tar.gz \
gs://${GCE_BUCKET}/
- /usr/local/bin/gcloud compute images create ${GCE_TARGET} \
+ /usr/local/bin/gcloud compute images create ${GCE_TARGET_${_FS}} \
--family=${GCE_FAMILY}${GCE_FAMILY_SUFX} ${GCE_LICENSE} \
- --source-uri gs://${GCE_BUCKET}/${GCE_TARGET}.tar.gz
+ --guest-os-features=GVNIC,UEFI_COMPATIBLE \
+ --source-uri gs://${GCE_BUCKET}/${GCE_TARGET_${_FS}}.tar.gz
touch ${.OBJDIR}/${.TARGET}
+.endfor
+gce-do-package: gce-do-package-${VMFS}
+gce-do-upload: gce-do-upload-${VMFS}
diff --git a/release/Makefile.inc1 b/release/Makefile.inc1
index 99d61a45e700..552b6cb60f3c 100644
--- a/release/Makefile.inc1
+++ b/release/Makefile.inc1
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Figure out where the git binary is.
diff --git a/release/Makefile.mirrors b/release/Makefile.mirrors
index 522844a6b057..591fd85b29ea 100644
--- a/release/Makefile.mirrors
+++ b/release/Makefile.mirrors
@@ -9,7 +9,6 @@
#
# Don't use this unless you know why you're using it.
#
-# $FreeBSD$
#
.include "${.CURDIR}/Makefile"
@@ -194,6 +193,16 @@ vm-images-stage:
cd ${VM_DIR}/Latest && \
ln -s ../${BUILDDATE}/${OSRELEASE}-${SNAP_SUFFIX}.${VMFORMAT}.xz \
${OSRELEASE}.${VMFORMAT}.xz
+. for FS in ${VMFSLIST}
+ cd ${RELEASEDIR}/vmimages && \
+ mv ${OSRELEASE}-${FS}.${VMFORMAT}.xz \
+ ${OSRELEASE}-${FS}-${SNAP_SUFFIX}.${VMFORMAT}.xz
+ cp -p ${RELEASEDIR}/vmimages/${OSRELEASE}-${FS}-${SNAP_SUFFIX}.${VMFORMAT}.xz \
+ ${VM_DIR}/${BUILDDATE}/${OSRELEASE}-${FS}-${SNAP_SUFFIX}.${VMFORMAT}.xz
+ cd ${VM_DIR}/Latest && \
+ ln -s ../${BUILDDATE}/${OSRELEASE}-${FS}-${SNAP_SUFFIX}.${VMFORMAT}.xz \
+ ${OSRELEASE}-${FS}.${VMFORMAT}.xz
+. endfor
. endfor
cd ${RELEASEDIR}/vmimages && rm -f CHECKSUM.*
. for CHECKSUM in ${CHECKSUM_FILES}
@@ -213,6 +222,10 @@ vm-images-stage:
. for VMFORMAT in ${VMFORMATS}
cp -p ${RELEASEDIR}/vmimages/${OSRELEASE}.${VMFORMAT}.xz \
${VM_DIR}/Latest/${OSRELEASE}.${VMFORMAT}.xz
+. for FS in ${VMFSLIST}
+ cp -p ${RELEASEDIR}/vmimages/${OSRELEASE}-${FS}.${VMFORMAT}.xz \
+ ${VM_DIR}/Latest/${OSRELEASE}-${FS}.${VMFORMAT}.xz
+. endfor
. endfor
. for CHECKSUM in ${CHECKSUM_FILES}
cp -p ${RELEASEDIR}/vmimages/CHECKSUM.${CHECKSUM} \
diff --git a/release/Makefile.vagrant b/release/Makefile.vagrant
index afbef8f2f3bf..d8f3c14e9498 100644
--- a/release/Makefile.vagrant
+++ b/release/Makefile.vagrant
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Makefile for producing and uploading Vagrant boxes to Hashicorp Atlas
#
@@ -58,7 +57,9 @@ vagrant-check-depends:
. endif
env ASSUME_ALWAYS_YES=yes pkg install -y curl
. else
- env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/ftp/curl BATCH=1 all install clean
+ env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/ftp/curl \
+ BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
+ all install clean
. endif
.endif
diff --git a/release/Makefile.vm b/release/Makefile.vm
index 72b150022ef7..548b4c1cca3b 100644
--- a/release/Makefile.vm
+++ b/release/Makefile.vm
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
#
# Makefile for building virtual machine and cloud provider disk images.
@@ -7,7 +6,9 @@
VMTARGETS= vm-image
VMFORMATS?= vhd vmdk qcow2 raw
-VMSIZE?= 4096m
+VMSIZE?= 5120m
+VMFS?= ufs
+VMFSLIST?= ufs zfs
SWAPSIZE?= 1g
VMBASE?= vm
@@ -16,32 +17,55 @@ VMDK_DESC= VMWare, VirtualBox disk image
QCOW2_DESC= Qemu, KVM disk image
RAW_DESC= Unformatted raw disk image
-CLOUDWARE?= BASIC-CI \
+CLOUDWARE_TYPES?= AZURE \
+ BASIC-CI \
+ BASIC-CLOUDINIT \
EC2 \
GCE \
- VAGRANT-VIRTUALBOX \
- VAGRANT-VMWARE
+ OCI \
+ VAGRANT
AZURE_FORMAT= vhdf
+AZURE_FSLIST?= ufs zfs
AZURE_DESC= Microsoft Azure platform image
-AZURE_DISK= ${OSRELEASE}.${AZURE_FORMAT}
BASIC-CI_FORMAT= raw
+BASIC-CI_FSLIST?= ufs
BASIC-CI_DESC= Image for CI
-BASIC-CI_DISK= ${OSRELEASE}.${BASIC-CI_FORMAT}
+BASIC-CLOUDINIT_FORMAT= raw qcow2
+BASIC-CLOUDINIT_FSLIST?= ufs zfs
+BASIC-CLOUDINIT_DESC?= Images for VM with cloudinit disk config support
EC2_FORMAT= raw
-EC2_DESC= Amazon EC2 image
-EC2_DISK= ${OSRELEASE}.${EC2_FORMAT}
+EC2_FSLIST?= ufs zfs
+EC2_FLAVOURS?= BASE CLOUD-INIT
+EC2-BASE_DESC= Amazon EC2 image
+EC2-CLOUD-INIT_DESC= Amazon EC2 Cloud-Init image
GCE_FORMAT= raw
+GCE_FSLIST?= ufs zfs
GCE_DESC= Google Compute Engine image
-GCE_DISK= disk.${GCE_FORMAT}
+OCI_FORMAT= qcow2
+OCI_FSLIST?= ufs
+OCI_DESC= Oracle Cloud Infrastructure image
OPENSTACK_FORMAT=qcow2
+OPENSTACK_FSLIST?= ufs
OPENSTACK_DESC= OpenStack platform image
-OPENSTACK_DISK= ${OSRELEASE}.${OPENSTACK_FORMAT}
-VAGRANT-VIRTUALBOX_FORMAT= vmdk
+VAGRANT_FORMAT= vmdk
+VAGRANT_FSLIST?= ufs
+VAGRANT_FLAVOURS?= VIRTUALBOX VMWARE
VAGRANT-VIRTUALBOX_DESC= Vagrant Image for VirtualBox
-VAGRANT-VIRTUALBOX_DISK= ${OSRELEASE}.vbox.${VAGRANT_FORMAT}
-VAGRANT-VMWARE_FORMAT= vmdk
VAGRANT-VMWARE_DESC= Vagrant Image for VMWare
-VAGRANT-VMWARE_DISK= ${OSRELEASE}.vmware.${VAGRANT_FORMAT}
+
+.for _CWT in ${CLOUDWARE_TYPES}
+. if defined(${_CWT}_FLAVOURS)
+. for _CWF in ${${_CWT}_FLAVOURS}
+CLOUDWARE_GEN+= ${_CWT}-${_CWF}
+${_CWT}-${_CWF}_FORMAT?= ${${_CWT}_FORMAT}
+${_CWT}-${_CWF}_FSLIST?= ${${_CWT}_FSLIST}
+${_CWT}-${_CWF}_DESC?= ${${_CWT}_DESC}
+. endfor
+. else
+CLOUDWARE_GEN+= ${_CWT}
+. endif
+.endfor
+CLOUDWARE?= ${CLOUDWARE_GEN}
.for _V in TYPE BRANCH REVISION
. if !defined(${_V}) || empty(${_V})
@@ -50,11 +74,12 @@ ${_V}!= eval $$(awk '/^${_V}=/{print}' ${.CURDIR}/../sys/conf/newvers.sh); echo
.endfor
emulator-portinstall:
-.if ${TARGET_ARCH} != ${MACHINE_ARCH}
-.if ( ${TARGET_ARCH} != "i386" ) || ( ${MACHINE_ARCH} != "amd64" )
.if !exists(/usr/local/bin/qemu-${TARGET_ARCH}-static)
.if exists(${PORTSDIR}/emulators/qemu-user-static/Makefile)
- env - UNAME_r=${UNAME_r} PATH=$$PATH make -C ${PORTSDIR}/emulators/qemu-user-static BATCH=1 all install clean
+ env - UNAME_r=${UNAME_r} PATH=$$PATH \
+ make -C ${PORTSDIR}/emulators/qemu-user-static \
+ BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
+ all install clean
.else
.if !exists(/usr/local/sbin/pkg-static)
env ASSUME_ALWAYS_YES=yes pkg bootstrap -y
@@ -62,67 +87,89 @@ emulator-portinstall:
env ASSUME_ALWAYS_YES=yes pkg install -y emulators/qemu-user-static
.endif
.endif
+ touch ${.TARGET}
+.if ${TARGET_ARCH} != ${MACHINE_ARCH}
+.if ( ${TARGET_ARCH} != "i386" ) || ( ${MACHINE_ARCH} != "amd64" )
QEMUSTATIC=/usr/local/bin/qemu-${TARGET_ARCH}-static
+QEMUTGT=emulator-portinstall
.endif
.endif
+QEMUTGT?=
.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
. for _CW in ${CLOUDWARE}
-CLOUDTARGETS+= cw-${_CW:tl}
-CLEANDIRS+= cw-${_CW:tl}
-CLEANFILES+= ${_CW:tl}.img \
- ${_CW:tl}.${${_CW:tu}_FORMAT} \
- ${_CW:tl}.${${_CW:tu}_FORMAT}.raw \
- cw${_CW:tl}-package
-CLOUDPACKAGE+= cw${_CW:tl}-package
-${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT}
. if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF)
${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf
. endif
-
-cw-${_CW:tl}: emulator-portinstall
+. for _FS in ${${_CW:tu}_FSLIST}
+. for _FMT in ${${_CW:tu}_FORMAT}
+CLOUDTARGETS+= cw-${_CW:tl}-${_FS}-${_FMT}
+CLEANDIRS+= cw-${_CW:tl}-${_FS}-${_FMT}
+CLEANFILES+= ${_CW:tl}.${_FS}.${_FMT}.img \
+ ${_CW:tl}.${_FS}.${_FMT} \
+ ${_CW:tl}.${_FS}.${_FMT}.raw
+${_CW:tu}${_FS:tu}${_FMT:tu}IMAGE= ${_CW:tl}.${_FS}.${_FMT}
+
+cw-${_CW:tl}-${_FS}-${_FMT}: ${QEMUTGT}
mkdir -p ${.OBJDIR}/${.TARGET}
env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \
QEMUSTATIC=${QEMUSTATIC} \
${.CURDIR}/scripts/mk-vmimage.sh \
- -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
- -i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW:tu}_FORMAT} \
- -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW:tu}IMAGE} -c ${${_CW:tu}CONF}
+ -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} -F ${_FS} \
+ -i ${.OBJDIR}/${_CW:tl}.${_FS}.${_FMT}.img -s ${VMSIZE} -f ${_FMT} \
+ -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW:tu}${_FS:tu}${_FMT:tu}IMAGE} -c ${${_CW:tu}CONF}
touch ${.TARGET}
+. endfor
+. endfor
-cw${_CW:tl}-package:
- @# Special target to handle packaging cloud images in the formats
- @# specific to each hosting provider.
-.if exists(${.CURDIR}/tools/${_CW:tl}-package.sh)
- env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
- ${.CURDIR}/tools/${_CW:tl}-package.sh \
- -D ${DESTDIR} -I ${${_CW}_DISK} -S ${WORLDDIR}
-.endif
- touch ${.TARGET}
+# Hardlinks from "foo.${FMT}" to "foo-${VMFS}.${FMT}". These can go away once
+# all of the cloudware code knows how to handle multiple filesystem images (or
+# at least knows the name of the UFS image).
+. for _FMT in ${${_CW:tu}_FORMAT}
+CLOUDTARGETS+= cw-${_CW:tl}-${_FMT}
+CLEANFILES+= ${_CW:tl}.${_FMT}
+${_CW:tu}${_FMT:tu}IMAGE= ${_CW:tl}.${_FMT}
+cw-${_CW:tl}-${_FMT}: cw-${_CW:tl}-${VMFS}-${_FMT}
+ ln -f ${${_CW:tu}${VMFS:tu}${_FMT:tu}IMAGE} ${${_CW:tu}${_FMT:tu}IMAGE}
+. endfor
+# Targets without a disk format listed are the first disk format on the list
+. for _FS in ${${_CW:tu}_FSLIST}
+${_CW:tu}${_FS:tu}IMAGE= ${_CW:tl}.${_FS}.${${_CW:tu}_FORMAT:[1]}
+cw-${_CW:tl}-${_FS}: cw-${_CW:tl}-${_FS}-${${_CW:tu}_FORMAT:[1]}
+. endfor
+${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT:[1]}
+cw-${_CW:tl}: cw-${_CW:tl}-${${_CW:tu}_FORMAT:[1]}
. endfor
.endif
.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
-CLEANDIRS+= ${VMTARGETS}
+CLEANFILES+= vm-image
. for FORMAT in ${VMFORMATS}
-CLEANFILES+= ${FORMAT}.img
-CLEANFILES+= ${VMBASE}.${FORMAT}
+. for FS in ${VMFSLIST}
+CLEANDIRS+= vm-image-${FORMAT}-${FS}
+CLEANFILES+= ${FORMAT}.${FS}.img
+CLEANFILES+= ${VMBASE}.${FS}.${FORMAT}
+. endfor
. endfor
.endif
vm-base: vm-image
-vm-image:
+vm-image: ${QEMUTGT}
.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
. for FORMAT in ${VMFORMATS}
- mkdir -p ${.OBJDIR}/${.TARGET}
+. for FS in ${VMFSLIST}
+ mkdir -p ${.OBJDIR}/${.TARGET}-${FORMAT}-${FS}
env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \
+ QEMUSTATIC=${QEMUSTATIC} \
${.CURDIR}/scripts/mk-vmimage.sh \
- -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
- -i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \
- -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT}
+ -C ${.CURDIR}/tools/vmimage.subr \
+ -d ${.OBJDIR}/${.TARGET}-${FORMAT}-${FS} -F ${FS} \
+ -i ${.OBJDIR}/${FORMAT}.${FS}.img -s ${VMSIZE} -f ${FORMAT} \
+ -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FS}.${FORMAT}
+. endfor
. endfor
.endif
touch ${.TARGET}
@@ -149,33 +196,48 @@ vm-install:
.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
mkdir -p ${DESTDIR}/vmimages
. for FORMAT in ${VMFORMATS}
- cp -p ${VMBASE}.${FORMAT} \
- ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
+. for FS in ${VMFSLIST}
+ cp -p ${VMBASE}.${FS}.${FORMAT} \
+ ${DESTDIR}/vmimages/${OSRELEASE}-${FS}.${FORMAT}
+. endfor
. endfor
. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES)
. for FORMAT in ${VMFORMATS}
+. for FS in ${VMFSLIST}
# Don't keep the originals. There is a copy in ${.OBJDIR} if needed.
- ${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
+ ${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}-${FS}.${FORMAT}
+. endfor
. endfor
. endif
+ # Compatibility hardlinks from "foo.bar" to "foo-${VMFS}.bar".
+. for FORMAT in ${VMFORMATS}
+. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES)
+ ln -f ${DESTDIR}/vmimages/${OSRELEASE}-${VMFS}.${FORMAT}.xz ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}.xz
+. else
+ ln -f ${DESTDIR}/vmimages/${OSRELEASE}-${VMFS}.${FORMAT} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
+. endif
+. endfor
cd ${DESTDIR}/vmimages && sha512 ${OSRELEASE}* > \
${DESTDIR}/vmimages/CHECKSUM.SHA512
cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \
${DESTDIR}/vmimages/CHECKSUM.SHA256
.endif
-vm-release:
.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
- ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS}
+vm-release: ${VMTARGETS}
+.else
+vm-release:
.endif
-cloudware-release:
.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
- ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS}
+cloudware-release: ${CLOUDTARGETS}
+.else
+cloudware-release:
.endif
.include "${.CURDIR}/Makefile.azure"
.include "${.CURDIR}/Makefile.ec2"
+.include "${.CURDIR}/Makefile.firecracker"
.include "${.CURDIR}/Makefile.gce"
.include "${.CURDIR}/Makefile.vagrant"
.include "${.CURDIR}/Makefile.inc1"
diff --git a/release/amd64/amd64.conf b/release/amd64/amd64.conf
index 1cc71ed6c1c2..e709c10b743a 100644
--- a/release/amd64/amd64.conf
+++ b/release/amd64/amd64.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# Configuration file for release/release.sh to build amd64/amd64.
diff --git a/release/amd64/make-memstick.sh b/release/amd64/make-memstick.sh
index c0e405c3a976..4c51d7d65af4 100755
--- a/release/amd64/make-memstick.sh
+++ b/release/amd64/make-memstick.sh
@@ -5,9 +5,8 @@
# clean up after itself very well for error conditions on purpose so the
# problem can be diagnosed (full filesystem most likely but ...).
#
-# Usage: make-memstick.sh <directory tree> <image filename>
+# Usage: make-memstick.sh <directory tree or manifest> <image filename>
#
-# $FreeBSD$
#
set -e
@@ -15,16 +14,26 @@ set -e
scriptdir=$(dirname $(realpath $0))
. ${scriptdir}/../../tools/boot/install-boot.sh
-PATH=/bin:/usr/bin:/sbin:/usr/sbin
-export PATH
+if [ "$(uname -s)" = "FreeBSD" ]; then
+ PATH=/bin:/usr/bin:/sbin:/usr/sbin
+ export PATH
+fi
if [ $# -ne 2 ]; then
- echo "make-memstick.sh /path/to/directory /path/to/image/file"
+ echo "make-memstick.sh /path/to/directory/or/manifest /path/to/image/file"
exit 1
fi
-if [ ! -d ${1} ]; then
- echo "${1} must be a directory"
+MAKEFSARG=${1}
+
+if [ -f ${MAKEFSARG} ]; then
+ BASEBITSDIR=`dirname ${MAKEFSARG}`
+ METALOG=${MAKEFSARG}
+elif [ -d ${MAKEFSARG} ]; then
+ BASEBITSDIR=${MAKEFSARG}
+ METALOG=
+else
+ echo "${MAKEFSARG} must exist"
exit 1
fi
@@ -33,20 +42,30 @@ if [ -e ${2} ]; then
exit 1
fi
-echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${1}/etc/fstab
-echo 'root_rw_mount="NO"' > ${1}/etc/rc.conf.local
-makefs -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${1}
-rm ${1}/etc/fstab
-rm ${1}/etc/rc.conf.local
+echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${BASEBITSDIR}/etc/fstab
+echo 'root_rw_mount="NO"' > ${BASEBITSDIR}/etc/rc.conf.local
+if [ -n "${METALOG}" ]; then
+ metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
+ cat ${METALOG} > ${metalogfilename}
+ echo "./etc/fstab type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ echo "./etc/rc.conf.local type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ MAKEFSARG=${metalogfilename}
+fi
+makefs -D -N ${BASEBITSDIR}/etc -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${MAKEFSARG}
+rm ${BASEBITSDIR}/etc/fstab
+rm ${BASEBITSDIR}/etc/rc.conf.local
+if [ -n "${METALOG}" ]; then
+ rm ${metalogfilename}
+fi
# Make an ESP in a file.
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
-make_esp_file ${espfilename} ${fat32min} ${1}/boot/loader.efi
+make_esp_file ${espfilename} ${fat32min} ${BASEBITSDIR}/boot/loader.efi
mkimg -s mbr \
- -b ${1}/boot/mbr \
+ -b ${BASEBITSDIR}/boot/mbr \
-p efi:=${espfilename} \
- -p freebsd:-"mkimg -s bsd -b ${1}/boot/boot -p freebsd-ufs:=${2}.part" \
+ -p freebsd:-"mkimg -s bsd -b ${BASEBITSDIR}/boot/boot -p freebsd-ufs:=${2}.part" \
-a 2 \
-o ${2}
rm ${espfilename}
diff --git a/release/amd64/mkisoimages.sh b/release/amd64/mkisoimages.sh
index a9e8a2c04392..3cc7a6cc919e 100644
--- a/release/amd64/mkisoimages.sh
+++ b/release/amd64/mkisoimages.sh
@@ -4,7 +4,6 @@
# Author: Jordan K Hubbard
# Date: 22 June 2001
#
-# $FreeBSD$
#
# This script is used by release/Makefile to build the (optional) ISO images
# for a FreeBSD release. It is considered architecture dependent since each
@@ -41,7 +40,23 @@ if [ -z $MKIMG ]; then
fi
if [ "$1" = "-b" ]; then
- BASEBITSDIR="$4"
+ MAKEFSARG="$4"
+else
+ MAKEFSARG="$3"
+fi
+
+if [ -f ${MAKEFSARG} ]; then
+ BASEBITSDIR=`dirname ${MAKEFSARG}`
+ METALOG=${MAKEFSARG}
+elif [ -d ${MAKEFSARG} ]; then
+ BASEBITSDIR=${MAKEFSARG}
+ METALOG=
+else
+ echo "${MAKEFSARG} must exist"
+ exit 1
+fi
+
+if [ "$1" = "-b" ]; then
# This is highly x86-centric and will be used directly below.
bootable="-o bootimage=i386;$BASEBITSDIR/boot/cdboot -o no-emul-boot"
@@ -54,7 +69,6 @@ if [ "$1" = "-b" ]; then
shift
else
- BASEBITSDIR="$3"
bootable=""
fi
@@ -65,12 +79,23 @@ fi
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
NAME="$1"; shift
+# MAKEFSARG extracted already
+shift
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$BASEBITSDIR/etc/fstab"
-$MAKEFS -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$@"
+if [ -n "${METALOG}" ]; then
+ metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
+ cat ${METALOG} > ${metalogfilename}
+ echo "./etc/fstab type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ MAKEFSARG=${metalogfilename}
+fi
+$MAKEFS -D -N ${BASEBITSDIR}/etc -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$MAKEFSARG" "$@"
rm -f "$BASEBITSDIR/etc/fstab"
rm -f ${espfilename}
+if [ -n "${METALOG}" ]; then
+ rm ${metalogfilename}
+fi
if [ "$bootable" != "" ]; then
# Look for the EFI System Partition image we dropped in the ISO image.
@@ -85,15 +110,20 @@ if [ "$bootable" != "" ]; then
done
# Create a GPT image containing the partitions we need for hybrid boot.
- imgsize=`stat -f %z "$NAME"`
+ hybridfilename=$(mktemp /tmp/hybrid.img.XXXXXX)
+ if [ "$(uname -s)" = "Linux" ]; then
+ imgsize=`stat -c %s "$NAME"`
+ else
+ imgsize=`stat -f %z "$NAME"`
+ fi
$MKIMG -s gpt \
--capacity $imgsize \
-b "$BASEBITSDIR/boot/pmbr" \
-p freebsd-boot:="$BASEBITSDIR/boot/isoboot" \
$espparam \
- -o hybrid.img
+ -o $hybridfilename
# Drop the PMBR, GPT, and boot code into the System Area of the ISO.
- dd if=hybrid.img of="$NAME" bs=32k count=1 conv=notrunc
- rm -f hybrid.img
+ dd if=$hybridfilename of="$NAME" bs=32k count=1 conv=notrunc
+ rm -f $hybridfilename
fi
diff --git a/release/arm/GENERICSD.conf b/release/arm/GENERICSD.conf
index c76829b22b04..d700c69a7f67 100644
--- a/release/arm/GENERICSD.conf
+++ b/release/arm/GENERICSD.conf
@@ -1,18 +1,16 @@
#!/bin/sh
#
-# $FreeBSD$
#
EMBEDDED_TARGET_ARCH="armv7"
EMBEDDED_TARGET="arm"
EMBEDDEDBUILD=1
-EMBEDDEDPORTS="sysutils/u-boot-beaglebone sysutils/u-boot-rpi2 sysutils/rpi-firmware"
+EMBEDDEDPORTS="sysutils/u-boot-rpi2 sysutils/rpi-firmware"
FAT_SIZE="50m -b 1m"
FAT_TYPE="16"
-IMAGE_SIZE="3072M"
+IMAGE_SIZE="5120M"
KERNEL="GENERIC"
MD_ARGS="-x 63 -y 255"
-BBB_UBOOT_DIR="/usr/local/share/u-boot/u-boot-beaglebone"
RPI_UBOOT_DIR="/usr/local/share/u-boot/u-boot-rpi2"
RPI_FIRMWARE_DIR="/usr/local/share/rpi-firmware"
RPI_OL_DIR="${RPI_FIRMWARE_DIR}/overlays"
@@ -49,20 +47,6 @@ arm_install_uboot_rpi2() {
return 0
}
-arm_install_uboot_bbb() {
- FATMOUNT="${DESTDIR%${KERNEL}}/fat"
- chroot ${CHROOTDIR} mkdir -p "${FATMOUNT}"
- chroot ${CHROOTDIR} mount_msdosfs /dev/${mddev}s1 ${FATMOUNT}
- chroot ${CHROOTDIR} cp -p ${BBB_UBOOT_DIR}/MLO ${FATMOUNT}/MLO
- chroot ${CHROOTDIR} cp -p ${BBB_UBOOT_DIR}/u-boot.img ${FATMOUNT}/u-boot.img
- sync
- umount_loop ${CHROOTDIR}/${FATMOUNT}
- chroot ${CHROOTDIR} rmdir ${FATMOUNT}
-
- return 0
-}
-
arm_install_uboot() {
- arm_install_uboot_bbb
arm_install_uboot_rpi2
}
diff --git a/release/arm/RPI-B.conf b/release/arm/RPI-B.conf
deleted file mode 100644
index f164edd25b90..000000000000
--- a/release/arm/RPI-B.conf
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh
-#
-# $FreeBSD$
-#
-
-EMBEDDED_TARGET_ARCH="armv6"
-EMBEDDED_TARGET="arm"
-EMBEDDEDBUILD=1
-EMBEDDEDPORTS="sysutils/u-boot-rpi sysutils/rpi-firmware"
-FAT_SIZE="50m"
-FAT_TYPE="16"
-IMAGE_SIZE="3072M"
-KERNEL="RPI-B"
-MD_ARGS="-x 63 -y 255"
-UBOOT_DIR="/usr/local/share/u-boot/u-boot-rpi"
-RPI_FIRMWARE_DIR="/usr/local/share/rpi-firmware"
-OL_DIR="${RPI_FIRMWARE_DIR}/overlays"
-OVERLAYS="mmc.dtbo disable-bt.dtbo"
-PART_SCHEME="MBR"
-export BOARDNAME="RPI-B"
-
-arm_install_uboot() {
- UBOOT_FILES="u-boot.bin"
- RPI_FIRMWARE_FILES="bootcode.bin config.txt \
- fixup.dat fixup_cd.dat fixup_db.dat fixup_x.dat \
- start.elf start_cd.elf start_db.elf start_x.elf \
- bcm2708-rpi-zero-w.dtb bcm2708-rpi-b-plus.dtb \
- bcm2708-rpi-b.dtb bcm2708-rpi-cm.dtb"
- FATMOUNT="${DESTDIR%${KERNEL}}/fat"
- chroot ${CHROOTDIR} mkdir -p "${FATMOUNT}"
- chroot ${CHROOTDIR} mount_msdosfs /dev/${mddev}s1 ${FATMOUNT}
- for _UF in ${UBOOT_FILES}; do
- chroot ${CHROOTDIR} cp -p ${UBOOT_DIR}/${_UF} \
- ${FATMOUNT}/${_UF}
- done
- for _UF in ${RPI_FIRMWARE_FILES}; do
- chroot ${CHROOTDIR} cp -p ${RPI_FIRMWARE_DIR}/${_UF} \
- ${FATMOUNT}/${_UF}
- done
- chroot ${CHROOTDIR} mkdir -p ${FATMOUNT}/overlays
- for _OL in ${OVERLAYS}; do
- chroot ${CHROOTDIR} cp -p ${OL_DIR}/${_OL} \
- ${FATMOUNT}/overlays/${_OL}
- done
- sync
- umount_loop ${CHROOTDIR}/${FATMOUNT}
- chroot ${CHROOTDIR} rmdir ${FATMOUNT}
-
- return 0
-}
diff --git a/release/arm64/PINE64-LTS.conf b/release/arm64/PINE64-LTS.conf
index fa4ab6fd5302..bf05ba9cb5ab 100644
--- a/release/arm64/PINE64-LTS.conf
+++ b/release/arm64/PINE64-LTS.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
EMBEDDED_TARGET_ARCH="aarch64"
@@ -9,7 +8,7 @@ EMBEDDEDBUILD=1
EMBEDDEDPORTS="sysutils/u-boot-pine64-lts"
FAT_SIZE="54m -b 1m"
FAT_TYPE="16"
-IMAGE_SIZE="3072M"
+IMAGE_SIZE="5120M"
KERNEL="GENERIC"
MD_ARGS="-x 63 -y 255"
PART_SCHEME="GPT"
diff --git a/release/arm64/PINE64.conf b/release/arm64/PINE64.conf
index c5aa86fc8160..a5c7ed2b2a95 100644
--- a/release/arm64/PINE64.conf
+++ b/release/arm64/PINE64.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
EMBEDDED_TARGET_ARCH="aarch64"
@@ -9,7 +8,7 @@ EMBEDDEDBUILD=1
EMBEDDEDPORTS="sysutils/u-boot-pine64"
FAT_SIZE="54m -b 1m"
FAT_TYPE="16"
-IMAGE_SIZE="3072M"
+IMAGE_SIZE="5120M"
KERNEL="GENERIC"
MD_ARGS="-x 63 -y 255"
PART_SCHEME="GPT"
diff --git a/release/arm64/PINEBOOK.conf b/release/arm64/PINEBOOK.conf
index 17e287bc55ad..53e7327b4ffb 100644
--- a/release/arm64/PINEBOOK.conf
+++ b/release/arm64/PINEBOOK.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
EMBEDDED_TARGET_ARCH="aarch64"
@@ -9,7 +8,7 @@ EMBEDDEDBUILD=1
EMBEDDEDPORTS="sysutils/u-boot-pinebook"
FAT_SIZE="54m -b 1m"
FAT_TYPE="16"
-IMAGE_SIZE="3072M"
+IMAGE_SIZE="5120M"
KERNEL="GENERIC"
MD_ARGS="-x 63 -y 255"
PART_SCHEME="GPT"
diff --git a/release/arm64/ROCK64.conf b/release/arm64/ROCK64.conf
index e77930b73661..5a89c4e2331a 100644
--- a/release/arm64/ROCK64.conf
+++ b/release/arm64/ROCK64.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
EMBEDDED_TARGET_ARCH="aarch64"
@@ -9,7 +8,7 @@ EMBEDDEDBUILD=1
EMBEDDEDPORTS="sysutils/u-boot-rock64"
FAT_SIZE="50m -b 16m"
FAT_TYPE="16"
-IMAGE_SIZE="3072M"
+IMAGE_SIZE="5120M"
KERNEL="GENERIC"
MD_ARGS="-x 63 -y 255"
PART_SCHEME="GPT"
diff --git a/release/arm64/ROCKPRO64.conf b/release/arm64/ROCKPRO64.conf
index e09c3a8b491f..52b1c6d9c62a 100644
--- a/release/arm64/ROCKPRO64.conf
+++ b/release/arm64/ROCKPRO64.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
EMBEDDED_TARGET_ARCH="aarch64"
@@ -9,7 +8,7 @@ EMBEDDEDBUILD=1
EMBEDDEDPORTS="sysutils/u-boot-rockpro64"
FAT_SIZE="50m -b 16m"
FAT_TYPE="16"
-IMAGE_SIZE="3072M"
+IMAGE_SIZE="5120M"
KERNEL="GENERIC"
MD_ARGS="-x 63 -y 255"
PART_SCHEME="GPT"
diff --git a/release/arm64/RPI.conf b/release/arm64/RPI.conf
index bce6236fbfae..b973687c535d 100644
--- a/release/arm64/RPI.conf
+++ b/release/arm64/RPI.conf
@@ -1,23 +1,24 @@
#!/bin/sh
#
-# $FreeBSD$
#
DTB_DIR="/usr/local/share/rpi-firmware"
-DTB="bcm2710-rpi-2-b.dtb bcm2710-rpi-3-b.dtb bcm2710-rpi-3-b-plus.dtb bcm2710-rpi-cm3.dtb bcm2711-rpi-4-b.dtb"
+DTB="bcm2710-rpi-2-b.dtb bcm2710-rpi-3-b.dtb bcm2710-rpi-3-b-plus.dtb bcm2710-rpi-cm3.dtb \
+ bcm2711-rpi-4-b.dtb bcm2711-rpi-cm4-io.dtb bcm2711-rpi-cm4.dtb"
EMBEDDED_TARGET_ARCH="aarch64"
EMBEDDED_TARGET="arm64"
EMBEDDEDBUILD=1
EMBEDDEDPORTS="sysutils/u-boot-rpi-arm64 sysutils/rpi-firmware"
FAT_SIZE="50m -b 1m"
FAT_TYPE="16"
-IMAGE_SIZE="3072M"
+IMAGE_SIZE="5120M"
KERNEL="GENERIC"
MD_ARGS="-x 63 -y 255"
OL_DIR="${DTB_DIR}/overlays"
OVERLAYS="mmc.dtbo pwm.dtbo disable-bt.dtbo"
PART_SCHEME="MBR"
export BOARDNAME="RPI"
+CONFIG_POWERD_ENABLE=1
arm_install_uboot() {
UBOOT_DIR="/usr/local/share/u-boot/u-boot-rpi-arm64"
diff --git a/release/arm64/aarch64.conf b/release/arm64/aarch64.conf
index ea6335cd02d8..c6355cba53ba 100644
--- a/release/arm64/aarch64.conf
+++ b/release/arm64/aarch64.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# Configuration file for release/release.sh to build arm64/aarch64
diff --git a/release/arm64/make-memstick.sh b/release/arm64/make-memstick.sh
index 0cde77b018b8..90ff98b394c7 100755
--- a/release/arm64/make-memstick.sh
+++ b/release/arm64/make-memstick.sh
@@ -5,26 +5,35 @@
# clean up after itself very well for error conditions on purpose so the
# problem can be diagnosed (full filesystem most likely but ...).
#
-# Usage: make-memstick.sh <directory tree> <image filename>
+# Usage: make-memstick.sh <directory tree or manifest> <image filename>
#
-# $FreeBSD$
#
set -e
-PATH=/bin:/usr/bin:/sbin:/usr/sbin
-export PATH
+if [ "$(uname -s)" = "FreeBSD" ]; then
+ PATH=/bin:/usr/bin:/sbin:/usr/sbin
+ export PATH
+fi
scriptdir=$(dirname $(realpath $0))
. ${scriptdir}/../../tools/boot/install-boot.sh
if [ $# -ne 2 ]; then
- echo "make-memstick.sh /path/to/directory /path/to/image/file"
+ echo "make-memstick.sh /path/to/directory/or/manifest /path/to/image/file"
exit 1
fi
-if [ ! -d ${1} ]; then
- echo "${1} must be a directory"
+MAKEFSARG=${1}
+
+if [ -f ${MAKEFSARG} ]; then
+ BASEBITSDIR=`dirname ${MAKEFSARG}`
+ METALOG=${MAKEFSARG}
+elif [ -d ${MAKEFSARG} ]; then
+ BASEBITSDIR=${MAKEFSARG}
+ METALOG=
+else
+ echo "${MAKEFSARG} must exist"
exit 1
fi
@@ -33,15 +42,25 @@ if [ -e ${2} ]; then
exit 1
fi
-echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${1}/etc/fstab
-echo 'root_rw_mount="NO"' > ${1}/etc/rc.conf.local
-makefs -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${1}
-rm ${1}/etc/fstab
-rm ${1}/etc/rc.conf.local
+echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${BASEBITSDIR}/etc/fstab
+echo 'root_rw_mount="NO"' > ${BASEBITSDIR}/etc/rc.conf.local
+if [ -n "${METALOG}" ]; then
+ metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
+ cat ${METALOG} > ${metalogfilename}
+ echo "./etc/fstab type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ echo "./etc/rc.conf.local type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ MAKEFSARG=${metalogfilename}
+fi
+makefs -D -N ${BASEBITSDIR}/etc -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${MAKEFSARG}
+rm ${BASEBITSDIR}/etc/fstab
+rm ${BASEBITSDIR}/etc/rc.conf.local
+if [ -n "${METALOG}" ]; then
+ rm ${metalogfilename}
+fi
# Make an ESP in a file.
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
-make_esp_file ${espfilename} ${fat32min} ${1}/boot/loader.efi
+make_esp_file ${espfilename} ${fat32min} ${BASEBITSDIR}/boot/loader.efi
mkimg -s gpt \
-p efi:=${espfilename} \
diff --git a/release/arm64/mkisoimages.sh b/release/arm64/mkisoimages.sh
index 5556336840cd..cb58178ed4b9 100644
--- a/release/arm64/mkisoimages.sh
+++ b/release/arm64/mkisoimages.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# This script is used by release/Makefile to build the (optional) ISO images
# for a FreeBSD release. It is considered architecture dependent since each
@@ -37,8 +36,23 @@ if [ -z $MKIMG ]; then
fi
if [ "$1" = "-b" ]; then
- BASEBITSDIR="$4"
+ MAKEFSARG="$4"
+else
+ MAKEFSARG="$3"
+fi
+if [ -f ${MAKEFSARG} ]; then
+ BASEBITSDIR=`dirname ${MAKEFSARG}`
+ METALOG=${MAKEFSARG}
+elif [ -d ${MAKEFSARG} ]; then
+ BASEBITSDIR=${MAKEFSARG}
+ METALOG=
+else
+ echo "${MAKEFSARG} must exist"
+ exit 1
+fi
+
+if [ "$1" = "-b" ]; then
# Make an EFI system partition.
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
# ESP file size in KB.
@@ -49,7 +63,6 @@ if [ "$1" = "-b" ]; then
shift
else
- BASEBITSDIR="$3"
bootable=""
fi
@@ -60,12 +73,23 @@ fi
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
NAME="$1"; shift
+# MAKEFSARG extracted already
+shift
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$BASEBITSDIR/etc/fstab"
-$MAKEFS -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$@"
+if [ -n "${METALOG}" ]; then
+ metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
+ cat ${METALOG} > ${metalogfilename}
+ echo "./etc/fstab type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ MAKEFSARG=${metalogfilename}
+fi
+$MAKEFS -D -N ${BASEBITSDIR}/etc -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$MAKEFSARG" "$@"
rm -f "$BASEBITSDIR/etc/fstab"
rm -f ${espfilename}
+if [ -n "${METALOG}" ]; then
+ rm ${metalogfilename}
+fi
if [ "$bootable" != "" ]; then
# Look for the EFI System Partition image we dropped in the ISO image.
@@ -81,13 +105,18 @@ if [ "$bootable" != "" ]; then
done
# Create a GPT image containing the EFI partition.
- imgsize=`stat -f %z "$NAME"`
+ efifilename=$(mktemp /tmp/efi.img.XXXXXX)
+ if [ "$(uname -s)" = "Linux" ]; then
+ imgsize=`stat -c %s "$NAME"`
+ else
+ imgsize=`stat -f %z "$NAME"`
+ fi
$MKIMG -s gpt \
--capacity $imgsize \
$espparam \
- -o efi.img
+ -o $efifilename
# Drop the GPT into the System Area of the ISO.
- dd if=efi.img of="$NAME" bs=32k count=1 conv=notrunc
- rm -f efi.img
+ dd if=$efifilename of="$NAME" bs=32k count=1 conv=notrunc
+ rm -f $efifilename
fi
diff --git a/release/i386/i386.conf b/release/i386/i386.conf
index dd5aa137c52d..a387a4e9fcc0 100644
--- a/release/i386/i386.conf
+++ b/release/i386/i386.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# Configuration file for release/release.sh to build i386/i386.
diff --git a/release/i386/make-memstick.sh b/release/i386/make-memstick.sh
index 6774e86ae550..7a20be20c026 100755
--- a/release/i386/make-memstick.sh
+++ b/release/i386/make-memstick.sh
@@ -5,23 +5,32 @@
# clean up after itself very well for error conditions on purpose so the
# problem can be diagnosed (full filesystem most likely but ...).
#
-# Usage: make-memstick.sh <directory tree> <image filename>
+# Usage: make-memstick.sh <directory tree or manifest> <image filename>
#
-# $FreeBSD$
#
set -e
-PATH=/bin:/usr/bin:/sbin:/usr/sbin
-export PATH
+if [ "$(uname -s)" = "FreeBSD" ]; then
+ PATH=/bin:/usr/bin:/sbin:/usr/sbin
+ export PATH
+fi
if [ $# -ne 2 ]; then
- echo "make-memstick.sh /path/to/directory /path/to/image/file"
+ echo "make-memstick.sh /path/to/directory/or/manifest /path/to/image/file"
exit 1
fi
-if [ ! -d ${1} ]; then
- echo "${1} must be a directory"
+MAKEFSARG=${1}
+
+if [ -f ${MAKEFSARG} ]; then
+ BASEBITSDIR=`dirname ${MAKEFSARG}`
+ METALOG=${MAKEFSARG}
+elif [ -d ${MAKEFSARG} ]; then
+ BASEBITSDIR=${MAKEFSARG}
+ METALOG=
+else
+ echo "${MAKEFSARG} must exist"
exit 1
fi
@@ -30,15 +39,25 @@ if [ -e ${2} ]; then
exit 1
fi
-echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${1}/etc/fstab
-echo 'root_rw_mount="NO"' > ${1}/etc/rc.conf.local
-makefs -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${1}
-rm ${1}/etc/fstab
-rm ${1}/etc/rc.conf.local
+echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${BASEBITSDIR}/etc/fstab
+echo 'root_rw_mount="NO"' > ${BASEBITSDIR}/etc/rc.conf.local
+if [ -n "${METALOG}" ]; then
+ metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
+ cat ${METALOG} > ${metalogfilename}
+ echo "./etc/fstab type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ echo "./etc/rc.conf.local type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ MAKEFSARG=${metalogfilename}
+fi
+makefs -D -N ${BASEBITSDIR}/etc -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${MAKEFSARG}
+rm ${BASEBITSDIR}/etc/fstab
+rm ${BASEBITSDIR}/etc/rc.conf.local
+if [ -n "${METALOG}" ]; then
+ rm ${metalogfilename}
+fi
mkimg -s mbr \
- -b ${1}/boot/mbr \
- -p freebsd:-"mkimg -s bsd -b ${1}/boot/boot -p freebsd-ufs:=${2}.part" \
+ -b ${BASEBITSDIR}/boot/mbr \
+ -p freebsd:-"mkimg -s bsd -b ${BASEBITSDIR}/boot/boot -p freebsd-ufs:=${2}.part" \
-o ${2}
rm ${2}.part
diff --git a/release/i386/mkisoimages.sh b/release/i386/mkisoimages.sh
index b9eb893edeef..8f000aae3b17 100644
--- a/release/i386/mkisoimages.sh
+++ b/release/i386/mkisoimages.sh
@@ -4,7 +4,6 @@
# Author: Jordan K Hubbard
# Date: 22 June 2001
#
-# $FreeBSD$
#
# This script is used by release/Makefile to build the (optional) ISO images
# for a FreeBSD release. It is considered architecture dependent since each
@@ -26,8 +25,25 @@
set -e
if [ "$1" = "-b" ]; then
+ MAKEFSARG="$4"
+else
+ MAKEFSARG="$3"
+fi
+
+if [ -f ${MAKEFSARG} ]; then
+ BASEBITSDIR=`dirname ${MAKEFSARG}`
+ METALOG=${MAKEFSARG}
+elif [ -d ${MAKEFSARG} ]; then
+ BASEBITSDIR=${MAKEFSARG}
+ METALOG=
+else
+ echo "${MAKEFSARG} must exist"
+ exit 1
+fi
+
+if [ "$1" = "-b" ]; then
# This is highly x86-centric and will be used directly below.
- bootable="-o bootimage=i386;$4/boot/cdboot -o no-emul-boot"
+ bootable="-o bootimage=i386;$BASEBITSDIR/boot/cdboot -o no-emul-boot"
shift
else
bootable=""
@@ -40,8 +56,19 @@ fi
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
NAME="$1"; shift
+# MAKEFSARG extracted already
+shift
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
-echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$1/etc/fstab"
-makefs -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$@"
-rm -f "$1/etc/fstab"
+echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$BASEBITSDIR/etc/fstab"
+if [ -n "${METALOG}" ]; then
+ metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
+ cat ${METALOG} > ${metalogfilename}
+ echo "./etc/fstab type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ MAKEFSARG=${metalogfilename}
+fi
+makefs -D -N ${BASEBITSDIR}/etc -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$MAKEFSARG" "$@"
+rm -f "$BASEBITSDIR/etc/fstab"
+if [ -n "${METALOG}" ]; then
+ rm ${metalogfilename}
+fi
diff --git a/release/packages/Makefile.package b/release/packages/Makefile.package
index 0edee34d8556..87585f7eac38 100644
--- a/release/packages/Makefile.package
+++ b/release/packages/Makefile.package
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
acct_COMMENT= System Accounting Utilities
@@ -12,12 +11,16 @@ apm_COMMENT= APM Utilities
apm_DESC= APM Utilities
at_COMMENT= AT Utilities
at_DESC= AT Utilities
+audit_COMMENT= OpenBSM auditing utilities
+audit_DESC= OpenBSM auditing utilities
autofs_COMMENT= Autofs Utilities
autofs_DESC= Autofs Utilities
bhyve_COMMENT= Bhyve Utilities
bhyve_DESC= Bhyve Utilities
binutils_COMMENT= Binutils
binutils_DESC= Binutils
+blocklist_COMMENT= Blocklist Utilities
+blocklist_DESC= Blocklist Utilities
bluetooth_COMMENT= Bluetooth Utilities
bluetooth_DESC= Bluetooth Utilities
bootloader_COMMENT= Bootloader
@@ -26,14 +29,30 @@ bsdinstall_COMMENT= BSDInstall Utilities
bsdinstall_DESC= BSDInstall Utilities
bsnmp_COMMENT= BSNMP Utilities
bsnmp_DESC= BSNMP Utilities
+caroot_COMMENT= SSL Certificates
+caroot_DESC= SSL Certificates
clang_COMMENT= Clang Utilities
clang_DESC= Clang Utilities
clibs_COMMENT= Core C Libraries
clibs_DESC= Core C Libraries
+certctl_COMMENT= SSL Certificate Utility
+certctl_DESC= SSL Certificate Utility
+console-tools_COMMENT= Console Utilities
+console-tools_DESC= Console Utilities
+cron_COMMENT= cron(8) and crontab(1)
+cron_DESC= cron(8) and crontab(1)
csh_COMMENT= C Shell
csh_DESC= C Shell
+ctf-tools_COMMENT= CTF Utilities
+ctf-tools_DESC= CTF Utilities
cxgbe-tools_COMMENT= Chelsio cxbge Utilities
cxgbe-tools_DESC= Chelsio cxbge Utilities
+devd_COMMENT= Devd Utility and scripts
+devd_DESC= Devd Utility and scripts
+devmatch_COMMENT= Devmatch Utility
+devmatch_DESC= Devmatch Utility
+dhclient_COMMENT= DHCP Client
+dhclient_DESC= DHCP Client
dma_COMMENT= DMA Mail Agent Utilities
dma_DESC= DMA Mail Agent Utilities
docs_COMMENT= Documentation
@@ -46,24 +65,32 @@ ee_COMMENT= Easy Editor Utilities
ee_DESC= Easy Editor Utilities
efi-tools_COMMENT= UEFI Utilities
efi-tools_DESC= UEFI Utilities
+elftoolchain_COMMENT= ElfToolchain programs and libraries
+elftoolchain_DESC= ElfToolchain programs and libraries
+examples_COMMENT= Examples in /usr/share/examples
+examples_DESC= Examples in /usr/share/examples
fetch_COMMENT= Fetch Utility
fetch_DESC= Fetch Utility
ftp_COMMENT= FTP Utilities
ftp_DESC= FTP Utilities
ftpd_COMMENT= FTP Daemon
ftpd_DESC= FTP Daemon
-gdb_COMMENT= GDB Utilities
-gdb_DESC= GDB Utilities
+fwget_COMMENT= FWGET Utility
+fwget_DESC= FWGET Utility
+games_COMMENT= Games
+games_DESC= Games
+geom_COMMENT= GEOM Utilitites
+geom_DESC= GEOM Utilitites
ggate_COMMENT= GEOM Gate Utilities
ggate_DESC= GEOM Gate Utilities
-groff_COMMENT= Groff Utilities
-groff_DESC= Groff Utilities
hast_COMMENT= Highly Available Storage daemon
hast_DESC= Highly Available Storage daemon
hostapd_COMMENT= 802.11 Access Point Daemon an Utilities
hostapd_DESC= 802.11 Access Point Daemon an Utilities
hyperv-tools_COMMENT= Microsoft HyperV Utilities
hyperv-tools_DESC= Microsoft HyperV Utilities
+inetd_COMMENT= Internet super-server
+inetd_DESC= Internet super-server
jail_COMMENT= Jail Utilities
jail_DESC= Jail Utilities
jail-debug_DESCR= Debugging Symbols
@@ -75,20 +102,34 @@ jail-lib32-development_DESCR=32-bit Development Files
jail-lib32-profile_DESCR=32-bit Profiling Libraries
kerberos_COMMENT= Kerberos Utilities
kerberos_DESC= Kerberos Utilities
+kerberos-lib_COMMENT= Kerberos Libraries
+kerberos-lib_DESC= Kerberos Libraries
kernel_COMMENT= FreeBSD Kernel
kernel_DESC= FreeBSD Kernel
+lp_COMMENT= Printer subsystem
+lp_DESC= Printer subsystem
manuals_COMMENT= Manual Pages
manuals_DESC= Manual Pages
mlx-tools_COMMENT= Mellanox Utilities
mlx-tools_DESC= Mellanox Utilities
mtree_COMMENT= MTREE Files
mtree_DESC= MTREE Files
+netmap_COMMENT= Netmap Library and Utilities
+netmap_DESC= Netmap Library and Utilities
newsyslog_COMMENT= Newsyslog Utility
newsyslog_DESC= Newsyslog Utility
nfs_COMMENT= NFS Utilities
nfs_DESC= NFS Utilities
-openssl_COMMENT= OpenSSL Library and Utility
-openssl_DESC= OpenSSL Library and Utility
+ntp_COMMENT= Network Time Protocol server and client
+ntp_DESC= Network Time Protocol server and client
+nuageinit_COMMENT= CloudInit support scripts
+nuageinit_DESC= CloudInit support scripts
+nvme-tools_COMMENT= NVME Utilities
+nvme-tools_DESC= NVME Utilities
+openssl_COMMENT= OpenSSL Utility
+openssl_DESC= OpenSSL Utility
+openssl-lib_COMMENT= OpenSSL Libraries
+openssl-lib_DESC= OpenSSL Libraries
pkg-bootstrap_COMMENT= pkg bootstrap Utility
pkg-bootstrap_DESC= pkg bootstrap Utility
periodic_COMMENT= Periodic Utility
@@ -101,6 +142,8 @@ rdma_COMMENT= RDMA Utilities
rdma_DESC= RDMA Utilities
rescue_COMMENT= Rescue Utilities
rescue_DESC= Rescue Utilities
+resolvconf_COMMENT= Resolvconf Utility and scripts
+resolvconf_DESC= Resolvconf Utility and scripts
runtime_COMMENT= FreeBSD Base System
runtime_DESC= FreeBSD Base System
runtime-debug_DESCR= Debugging Symbols
@@ -112,20 +155,22 @@ runtime-lib32-development_DESCR=32-bit Development Files
runtime-lib32-profile_DESCR=32-bit Profiling Libraries
sendmail_COMMENT= Sendmail Utilities
sendmail_DESC= Sendmail Utilities
+smbutils_COMMENT= SMB Utilities
+smbutils_DESC= SMB Utilities
ssh_COMMENT= Secure Shell Utilities
ssh_DESC= Secure Shell Utilities
-svn_COMMENT= Subversion Version Control System
-svn_DESC= Subversion Version Control System
syscons_COMMENT= Syscons Console
syscons_DESC= Syscons Console
syslogd_COMMENT= Syslog Daemon
syslogd_DESC= Syslog Daemon
tcpd_COMMENT= TCP Wrapper utilities
tcpd_DESC= TCP Wrapper utilities
-telnet_COMMENT= Telnet and telnetd
-telnet_DESC= Telnet and telnetd
+telnet_COMMENT= Telnet client
+telnet_DESC= Telnet client
tests_COMMENT= Test Suite
tests_DESC= Test Suite
+ufs_COMMENT= UFS Libraries and Utilities
+ufs_DESC= UFS Libraries and Utilities
unbound_COMMENT= Unbound DNS Resolver
unbound_DESC= Unbound DNS Resolver
utilities_COMMENT= Non-vital programs and libraries
@@ -138,3 +183,5 @@ wpa_COMMENT= 802.11 Supplicant
wpa_DESC= 802.11 Supplicant
yp_COMMENT= Yellow Pages programs
yp_DESC= Yellow Pages programs
+zfs_COMMENT= ZFS Libraries and Utilities
+zfs_DESC= ZFS Libraries and Utilities
diff --git a/release/packages/binutils.ucl b/release/packages/binutils.ucl
deleted file mode 100644
index ec246dfacd75..000000000000
--- a/release/packages/binutils.ucl
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
-prefix = "/"
-licenselogic = "single"
-licenses = [ GPLv2 ]
-desc = <<EOD
-%DESC%
-EOD
-
diff --git a/release/packages/caroot.ucl b/release/packages/certctl.ucl
index bc298efcabf4..664a6d139585 100644
--- a/release/packages/caroot.ucl
+++ b/release/packages/certctl.ucl
@@ -1,20 +1,3 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = %PKG_MAINTAINER%
-www = "%PKG_WWW%"
-prefix = "/"
-licenselogic = "single"
-licenses = [ BSD2CLAUSE ]
-desc = <<EOD
-%DESC%
-EOD
scripts: {
# XXX If pkg picks up a mechanism to detect in the post-install script
# files being added or removed, we should use it instead to gate the
diff --git a/release/packages/clang-all.ucl b/release/packages/clang-all.ucl
new file mode 100644
index 000000000000..41a697ebe53d
--- /dev/null
+++ b/release/packages/clang-all.ucl
@@ -0,0 +1 @@
+licenses = [ NCSA ]
diff --git a/release/packages/clang.ucl b/release/packages/clang.ucl
deleted file mode 100644
index 0642f21d1daa..000000000000
--- a/release/packages/clang.ucl
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
-prefix = "/"
-licenselogic = "single"
-licenses = [ NCSA ]
-desc = <<EOD
-%DESC%
-EOD
-
diff --git a/release/packages/clibs.ucl b/release/packages/clibs.ucl
new file mode 100644
index 000000000000..093fbb60248a
--- /dev/null
+++ b/release/packages/clibs.ucl
@@ -0,0 +1 @@
+vital: true
diff --git a/release/packages/gdb.ucl b/release/packages/gdb.ucl
deleted file mode 100644
index ec246dfacd75..000000000000
--- a/release/packages/gdb.ucl
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
-prefix = "/"
-licenselogic = "single"
-licenses = [ GPLv2 ]
-desc = <<EOD
-%DESC%
-EOD
-
diff --git a/release/packages/generate-ucl.lua b/release/packages/generate-ucl.lua
new file mode 100755
index 000000000000..de52802913f8
--- /dev/null
+++ b/release/packages/generate-ucl.lua
@@ -0,0 +1,35 @@
+#!/usr/libexec/flua
+
+--[[ usage:
+generare-ucl.lua [<variablename> <variablevalue>]... <sourceucl> <destucl>
+
+In the <destucl> files the variable <variablename> (in the form ${variablename}
+in the <sourceucl>) will be expanded to <variablevalue>.
+
+The undefined variables will reamin unmofifier "${variablename}"
+]]--
+
+local ucl = require("ucl")
+
+if #arg < 2 or #arg % 2 ~= 0 then
+ io.stderr:write(arg[0] .. ": expected an even number of arguments, got " .. #arg)
+ os.exit(1)
+end
+
+local parser = ucl.parser()
+for i = 2, #arg - 2, 2 do
+ parser:register_variable(arg[i - 1], arg[i])
+end
+local res,err = parser:parse_file(arg[#arg - 1])
+if not res then
+ io.stderr:write(arg[0] .. ": fail to parse("..arg[#arg - 1].."): "..err)
+ os.exit(1)
+end
+local f,err = io.open(arg[#arg], "w")
+if not f then
+ io.stderr:write(arg[0] .. ": fail to open("..arg[#arg].."): ".. err)
+ os.exit(1)
+end
+local obj = parser:get_object()
+f:write(ucl.to_format(obj, 'ucl'))
+f:close()
diff --git a/release/packages/generate-ucl.sh b/release/packages/generate-ucl.sh
index 2988b48b10a9..27adddad96c0 100755
--- a/release/packages/generate-ucl.sh
+++ b/release/packages/generate-ucl.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
main() {
@@ -31,19 +30,33 @@ main() {
shift $(( ${OPTIND} - 1 ))
- vital="false"
-
case "${outname}" in
bootloader)
pkgdeps=""
;;
- clibs)
- vital="true"
- # clibs should not have any dependencies or anything
- # else imposed on it.
+ certctl)
+ pkgdeps="caroot openssl"
+ ;;
+ clang)
+ pkgdeps="lld libcompiler_rt-dev"
+ ;;
+ periodic)
+ pkgdeps="cron"
+ ;;
+
+ # -dev packages that have no corresponding non-dev package
+ # as a dependency.
+ libcompat-dev|libcompiler_rt-dev|liby-dev)
+ outname=${outname%%-dev}
+ _descr="Development Files"
+ ;;
+ libcompat-lib32_dev|libcompiler_rt-lib32_dev|liby-lib32_dev)
+ outname=${outname%%-lib32_dev}
+ _descr="32-bit Libraries, Development Files"
;;
- caroot)
- pkgdeps="openssl"
+ libcompat-man|libelftc-man)
+ outname=${outname%%-man}
+ _descr="Manual Pages"
;;
utilities)
uclfile="${uclfile}"
@@ -51,7 +64,6 @@ main() {
runtime)
outname="runtime"
_descr="$(make -C ${srctree}/release/packages -f Makefile.package -V ${outname}_DESCR)"
- vital="true"
;;
*-lib32_dev)
outname="${outname%%-lib32_dev}"
@@ -84,7 +96,6 @@ main() {
pkgdeps="${outname}"
;;
${origname})
- pkgdeps="runtime"
;;
*)
uclfile="${outname##*}${origname}"
@@ -95,10 +106,7 @@ main() {
desc="$(make -C ${srctree}/release/packages -f Makefile.package -V ${outname}_DESC)"
comment="$(make -C ${srctree}/release/packages -f Makefile.package -V ${outname}_COMMENT)"
- uclsource="${srctree}/release/packages/${outname}.ucl"
- if [ ! -e "${uclsource}" ]; then
- uclsource="${srctree}/release/packages/template.ucl"
- fi
+ uclsource="${srctree}/release/packages/template.ucl"
if [ ! -z "${debug}" ]; then
echo ""
@@ -125,26 +133,31 @@ main() {
cp "${uclsource}" "${uclfile}"
if [ ! -z "${pkgdeps}" ]; then
- cat <<EOF >> ${uclfile}
-deps: {
- FreeBSD-${pkgdeps}: {
+ echo 'deps: {' >> ${uclfile}
+ for dep in ${pkgdeps}; do
+ cat <<EOF >> ${uclfile}
+ FreeBSD-${dep}: {
origin: "base",
version: "${PKG_VERSION}"
}
-}
EOF
+ done
+ echo '}' >> ${uclfile}
fi
cap_arg="$( make -f ${srctree}/share/mk/bsd.endian.mk -VCAP_MKDB_ENDIAN )"
- sed -i '' -e "s/%VERSION%/${PKG_VERSION}/" \
- -e "s/%PKGNAME%/${origname}/" \
- -e "s/%COMMENT%/${comment}/" \
- -e "s/%DESC%/${desc}/" \
- -e "s/%VITAL%/${vital}/" \
- -e "s/%CAP_MKDB_ENDIAN%/${cap_arg}/g" \
- -e "s/%PKG_NAME_PREFIX%/${PKG_NAME_PREFIX}/" \
- -e "s|%PKG_WWW%|${PKG_WWW}|" \
- -e "s/%PKG_MAINTAINER%/${PKG_MAINTAINER}/" \
- ${uclfile}
+ ${srctree}/release/packages/generate-ucl.lua \
+ VERSION "${PKG_VERSION}" \
+ PKGNAME "${origname}" \
+ PKGGENNAME "${outname}" \
+ PKG_NAME_PREFIX "${PKG_NAME_PREFIX}" \
+ COMMENT "${comment}" \
+ DESC "${desc}" \
+ CAP_MKDB_ENDIAN "${cap_arg}" \
+ PKG_WWW "${PKG_WWW}" \
+ PKG_MAINTAINER "${PKG_MAINTAINER}" \
+ UCLFILES "${srctree}/release/packages/" \
+ ${uclfile} ${uclfile}
+
return 0
}
diff --git a/release/packages/groff.ucl b/release/packages/groff.ucl
deleted file mode 100644
index ec246dfacd75..000000000000
--- a/release/packages/groff.ucl
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
-prefix = "/"
-licenselogic = "single"
-licenses = [ GPLv2 ]
-desc = <<EOD
-%DESC%
-EOD
-
diff --git a/release/packages/jail.ucl b/release/packages/jail.ucl
deleted file mode 100644
index cc22cf042a76..000000000000
--- a/release/packages/jail.ucl
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
-prefix = "/"
-vital = %VITAL%
-licenselogic = "single"
-licenses = [ BSD2CLAUSE ]
-desc = <<EOD
-%DESC%
-EOD
-
diff --git a/release/packages/kernel.ucl b/release/packages/kernel.ucl
deleted file mode 100644
index b7317cae507c..000000000000
--- a/release/packages/kernel.ucl
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
-prefix = "/"
-licenselogic = "single"
-licenses = [ BSD2CLAUSE ]
-desc = <<EOD
-%DESC%
-EOD
-scripts: {
- post-install = <<EOD
- /usr/sbin/kldxref ${PKG_ROOTDIR}/boot/%KERNELDIR%
-EOD
-}
diff --git a/release/packages/lld-all.ucl b/release/packages/lld-all.ucl
new file mode 100644
index 000000000000..41a697ebe53d
--- /dev/null
+++ b/release/packages/lld-all.ucl
@@ -0,0 +1 @@
+licenses = [ NCSA ]
diff --git a/release/packages/lld.ucl b/release/packages/lld.ucl
deleted file mode 100644
index 0642f21d1daa..000000000000
--- a/release/packages/lld.ucl
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
-prefix = "/"
-licenselogic = "single"
-licenses = [ NCSA ]
-desc = <<EOD
-%DESC%
-EOD
-
diff --git a/release/packages/lldb-all.ucl b/release/packages/lldb-all.ucl
new file mode 100644
index 000000000000..41a697ebe53d
--- /dev/null
+++ b/release/packages/lldb-all.ucl
@@ -0,0 +1 @@
+licenses = [ NCSA ]
diff --git a/release/packages/lldb.ucl b/release/packages/lldb.ucl
deleted file mode 100644
index 0642f21d1daa..000000000000
--- a/release/packages/lldb.ucl
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
-prefix = "/"
-licenselogic = "single"
-licenses = [ NCSA ]
-desc = <<EOD
-%DESC%
-EOD
-
diff --git a/release/packages/runtime.ucl b/release/packages/runtime.ucl
index 398ca760e11f..8a337c038fdd 100644
--- a/release/packages/runtime.ucl
+++ b/release/packages/runtime.ucl
@@ -1,26 +1,9 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
-prefix = "/"
-vital = %VITAL%
-licenselogic = "single"
-licenses = [ BSD2CLAUSE ]
-desc = <<EOD
-%DESC%
-EOD
+vital: true
scripts: {
- post-install = <<EOD
- pwd_mkdb -i -p -d ${PKG_ROOTDIR}/etc ${PKG_ROOTDIR}/etc/master.passwd
- services_mkdb %CAP_MKDB_ENDIAN% -q -o ${PKG_ROOTDIR}/var/db/services.db ${PKG_ROOTDIR}/etc/services
- chmod 1777 ${PKG_ROOTDIR}/tmp
+ post-install = <<EOD
+ pwd_mkdb -i -p -d ${PKG_ROOTDIR}/etc ${PKG_ROOTDIR}/etc/master.passwd
+ services_mkdb ${CAP_MKDB_ENDIAN} -q -o ${PKG_ROOTDIR}/var/db/services.db ${PKG_ROOTDIR}/
+ chmod 1777 ${PKG_ROOTDIR}/tmp
EOD
}
directories: {
diff --git a/release/packages/ssh-all.ucl b/release/packages/ssh-all.ucl
new file mode 100644
index 000000000000..4f78d80fa68e
--- /dev/null
+++ b/release/packages/ssh-all.ucl
@@ -0,0 +1 @@
+licenses = [ ISCL ]
diff --git a/release/packages/ssh.ucl b/release/packages/ssh.ucl
deleted file mode 100644
index 415094e9d69f..000000000000
--- a/release/packages/ssh.ucl
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
-prefix = "/"
-licenselogic = "single"
-licenses = [ ISCL ]
-desc = <<EOD
-%DESC%
-EOD
-
diff --git a/release/packages/svn.ucl b/release/packages/svn.ucl
deleted file mode 100644
index f80da47be55b..000000000000
--- a/release/packages/svn.ucl
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
-prefix = "/"
-licenselogic = "single"
-licenses = [ APACHE20 ]
-desc = <<EOD
-%DESC%
-EOD
-
diff --git a/release/packages/template.ucl b/release/packages/template.ucl
index 12830eed1178..a65f58868118 100644
--- a/release/packages/template.ucl
+++ b/release/packages/template.ucl
@@ -1,18 +1,19 @@
#
-# $FreeBSD$
#
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
+name = "${PKG_NAME_PREFIX}-${PKGNAME}"
origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
+version = "${VERSION}"
+comment = "${COMMENT}"
categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
+maintainer = "${PKG_MAINTAINER}"
+www = "${PKG_WWW}"
prefix = "/"
-vital = %VITAL%
licenselogic = "single"
licenses = [ BSD2CLAUSE ]
desc = <<EOD
-%DESC%
+${DESC}
EOD
+.include(try=true,duplicate=rewrite) "${UCLFILES}/${PKGGENNAME}-all.ucl"
+.include(try=true,duplicate=rewrite) "${UCLFILES}/${PKGNAME}.ucl"
+.include(try=true,duplicate=rewrite) "${UCLFILES}/${FORCEINCLUDE}.ucl"
diff --git a/release/packages/unbound-all.ucl b/release/packages/unbound-all.ucl
new file mode 100644
index 000000000000..78bb1f284ff2
--- /dev/null
+++ b/release/packages/unbound-all.ucl
@@ -0,0 +1 @@
+licenses = [ BSD4CLAUSE ]
diff --git a/release/packages/unbound.ucl b/release/packages/unbound.ucl
deleted file mode 100644
index d250e76752f9..000000000000
--- a/release/packages/unbound.ucl
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
-prefix = "/"
-licenselogic = "single"
-licenses = [ BSD4CLAUSE ]
-desc = <<EOD
-%DESC%
-EOD
-
diff --git a/release/packages/utilities.ucl b/release/packages/utilities.ucl
index bdee3b23a362..4eb98cae292a 100644
--- a/release/packages/utilities.ucl
+++ b/release/packages/utilities.ucl
@@ -1,23 +1,5 @@
-#
-# $FreeBSD$
-#
-
-name = "%PKG_NAME_PREFIX%-%PKGNAME%"
-origin = "base"
-version = "%VERSION%"
-comment = "%COMMENT%"
-categories = [ base ]
-maintainer = "%PKG_MAINTAINER%"
-www = "%PKG_WWW%"
-prefix = "/"
-vital = %VITAL%
-licenselogic = "single"
-licenses = [ BSD2CLAUSE ]
-desc = <<EOD
-%DESC%
-EOD
scripts: {
- post-install = <<EOD
- cap_mkdb %CAP_MKDB_ENDIAN% ${PKG_ROOTDIR}/etc/login.conf
+ post-install = <<EOD
+ cap_mkdb ${CAP_MKDB_ENDIAN} ${PKG_ROOTDIR}/etc/login.conf
EOD
}
diff --git a/release/pkg_repos/release-dvd.conf b/release/pkg_repos/release-dvd.conf
index 95413592b719..c2e64c43a56f 100644
--- a/release/pkg_repos/release-dvd.conf
+++ b/release/pkg_repos/release-dvd.conf
@@ -1,4 +1,3 @@
-# $FreeBSD$
release: {
url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
mirror_type: "srv",
diff --git a/release/powerpc/boot.tbxi b/release/powerpc/boot.tbxi
index 70897866bec8..adf76e1c6e07 100644
--- a/release/powerpc/boot.tbxi
+++ b/release/powerpc/boot.tbxi
@@ -1,6 +1,5 @@
<CHRP-BOOT>
<LICENSE>
-$FreeBSD$
</LICENSE>
<COMPATIBLE>
MacRISC MacRISC3 MacRISC4
diff --git a/release/powerpc/generate-hfs.sh b/release/powerpc/generate-hfs.sh
index 7db43d671488..50f77933f273 100755
--- a/release/powerpc/generate-hfs.sh
+++ b/release/powerpc/generate-hfs.sh
@@ -10,8 +10,6 @@
# template (e.g. because the boot block or the CHRP script have grown),
# you must install it from ports.
-# $FreeBSD$
-
HFS_SIZE=400 #Size in 2048-byte blocks of the produced image
LOADER_SIZE=500k
@@ -57,7 +55,6 @@ rm loader.tmp
bzip2 $OUTPUT_FILE
echo 'HFS boot filesystem created by generate-hfs.sh' > $OUTPUT_FILE.bz2.uu
echo 'DO NOT EDIT' >> $OUTPUT_FILE.bz2.uu
-echo '$FreeBSD$' >> $OUTPUT_FILE.bz2.uu
uuencode $OUTPUT_FILE.bz2 $OUTPUT_FILE.bz2 >> $OUTPUT_FILE.bz2.uu
rm $OUTPUT_FILE.bz2
diff --git a/release/powerpc/hfs-boot.bz2.uu b/release/powerpc/hfs-boot.bz2.uu
index dccd3fa4906e..fbae44dcb432 100644
--- a/release/powerpc/hfs-boot.bz2.uu
+++ b/release/powerpc/hfs-boot.bz2.uu
@@ -1,6 +1,5 @@
HFS boot filesystem created by generate-hfs.sh
DO NOT EDIT
-$FreeBSD$
begin 644 hfs-boot.bz2
M0EIH.3%!62936=IZTD$``"__]__O_G)7!_Y]OV??5']UW\1$0`$$0```P&`@
M`$A`3,`"L#DRUJM"4E,32>D\*>4\HS2-`:`#0````>IH`>H!H-`$B23)H"8%
diff --git a/release/powerpc/mkisoimages.sh b/release/powerpc/mkisoimages.sh
index 2d5ea76ca7a2..ba7c32f87bee 100644
--- a/release/powerpc/mkisoimages.sh
+++ b/release/powerpc/mkisoimages.sh
@@ -4,7 +4,6 @@
# Author: Jordan K Hubbard
# Date: 22 June 2001
#
-# $FreeBSD$
#
# This script is used by release/Makefile to build the (optional) ISO images
# for a FreeBSD release. It is considered architecture dependent since each
@@ -26,6 +25,23 @@
set -e
if [ "$1" = "-b" ]; then
+ MAKEFSARG="$4"
+else
+ MAKEFSARG="$3"
+fi
+
+if [ -f ${MAKEFSARG} ]; then
+ BASEBITSDIR=`dirname ${MAKEFSARG}`
+ METALOG=${MAKEFSARG}
+elif [ -d ${MAKEFSARG} ]; then
+ BASEBITSDIR=${MAKEFSARG}
+ METALOG=
+else
+ echo "${MAKEFSARG} must exist"
+ exit 1
+fi
+
+if [ "$1" = "-b" ]; then
bootable=1
shift
else
@@ -39,23 +55,32 @@ fi
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
NAME="$1"; shift
+# MAKEFSARG extracted already
+shift
+
+if [ -n "${METALOG}" ]; then
+ metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
+ cat ${METALOG} > ${metalogfilename}
+ MAKEFSARG=${metalogfilename}
+fi
if [ -n "$bootable" ]; then
echo "Building bootable disc"
+ BOOTBLOCK=$(mktemp /tmp/hfs-boot-block.XXXXXX)
+
# Apple boot code
- uudecode -o /tmp/hfs-boot-block.bz2 "`dirname "$0"`/hfs-boot.bz2.uu"
- bzip2 -d /tmp/hfs-boot-block.bz2
- OFFSET=$(hd /tmp/hfs-boot-block | grep 'Loader START' | cut -f 1 -d ' ')
+ uudecode -p "`dirname "$0"`/hfs-boot.bz2.uu" | bunzip2 > $BOOTBLOCK
+ OFFSET=$(hd $BOOTBLOCK | grep 'Loader START' | cut -f 1 -d ' ')
OFFSET=0x$(echo 0x$OFFSET | awk '{printf("%x\n",$1/512);}')
- dd if="$1/boot/loader" of=/tmp/hfs-boot-block seek=$OFFSET conv=notrunc
+ dd if="$BASEBITSDIR/boot/loader" of=$BOOTBLOCK seek=$OFFSET conv=notrunc
- bootable="-o bootimage=macppc;/tmp/hfs-boot-block -o no-emul-boot"
+ bootable="-o bootimage=macppc;$BOOTBLOCK -o no-emul-boot"
# pSeries/PAPR boot code
- mkdir -p "$1/ppc/chrp"
- cp "$1/boot/loader" "$1/ppc/chrp"
- cat > "$1/ppc/bootinfo.txt" << EOF
+ mkdir -p "$BASEBITSDIR/ppc/chrp"
+ cp "$BASEBITSDIR/boot/loader" "$BASEBITSDIR/ppc/chrp"
+ cat > "$BASEBITSDIR/ppc/bootinfo.txt" << EOF
<chrp-boot>
<description>FreeBSD Install</description>
<os-name>FreeBSD</os-name>
@@ -63,14 +88,31 @@ if [ -n "$bootable" ]; then
</chrp-boot>
EOF
bootable="$bootable -o chrp-boot"
+ if [ -n "${METALOG}" ]; then
+ echo "./ppc type=dir uname=root gname=wheel mode=0755" >> ${metalogfilename}
+ echo "./ppc/chrp type=dir uname=root gname=wheel mode=0755" >> ${metalogfilename}
+ echo "./ppc/chrp/loader type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ echo "./ppc/bootinfo.txt type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ fi
# Petitboot config for PS3/PowerNV
- echo FreeBSD Install=\'/boot/kernel/kernel vfs.root.mountfrom=cd9660:/dev/iso9660/$LABEL\' > "$1/etc/kboot.conf"
+ echo FreeBSD Install=\'/boot/kernel/kernel vfs.root.mountfrom=cd9660:/dev/iso9660/$LABEL\' > "$BASEBITSDIR/etc/kboot.conf"
+ if [ -n "${METALOG}" ]; then
+ echo "./etc/kboot.conf type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ fi
fi
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
-echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$1/etc/fstab"
-makefs -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$@"
-rm -f "$1/etc/fstab"
-rm -f /tmp/hfs-boot-block
-rm -rf "$1/ppc"
+echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$BASEBITSDIR/etc/fstab"
+if [ -n "${METALOG}" ]; then
+ echo "./etc/fstab type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+fi
+makefs -D -N ${BASEBITSDIR}/etc -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$MAKEFSARG" "$@"
+rm -f "$BASEBITSDIR/etc/fstab"
+if [ n "$bootable" ]; then
+ rm $BOOTBLOCK
+fi
+rm -rf "$BASEBITSDIR/ppc"
+if [ -n "${METALOG}" ]; then
+ rm ${metalogfilename}
+fi
diff --git a/release/powerpc/powerpc.conf b/release/powerpc/powerpc.conf
index 5cf9a48387fd..8acafaa8bd86 100644
--- a/release/powerpc/powerpc.conf
+++ b/release/powerpc/powerpc.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# Configuration file for release/release.sh to build powerpc/powerpc.
diff --git a/release/powerpc/powerpc64.conf b/release/powerpc/powerpc64.conf
index 7c756d413dc3..fe859bdb7624 100644
--- a/release/powerpc/powerpc64.conf
+++ b/release/powerpc/powerpc64.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# Configuration file for release/release.sh to build powerpc/powerpc64.
diff --git a/release/powerpc/powerpc64le.conf b/release/powerpc/powerpc64le.conf
index af7acfbdc8ea..f9660836c364 100644
--- a/release/powerpc/powerpc64le.conf
+++ b/release/powerpc/powerpc64le.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# Configuration file for release/release.sh to build powerpc/powerpc64le.
diff --git a/release/powerpc/powerpcspe.conf b/release/powerpc/powerpcspe.conf
index 13b043e4cd23..955287f94e3c 100644
--- a/release/powerpc/powerpcspe.conf
+++ b/release/powerpc/powerpcspe.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# Configuration file for release/release.sh to build powerpc/powerpcspe.
diff --git a/release/rc.local b/release/rc.local
index 8162cd1efff6..a2c1676313c5 100755
--- a/release/rc.local
+++ b/release/rc.local
@@ -1,89 +1,57 @@
#!/bin/sh
-# $FreeBSD$
-
-: ${DIALOG_OK=0}
-: ${DIALOG_CANCEL=1}
-: ${DIALOG_HELP=2}
-: ${DIALOG_EXTRA=3}
-: ${DIALOG_ITEM_HELP=4}
-: ${DIALOG_ESC=255}
-
-MACHINE=`uname -m`
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Jessica Clarke <jrtc27@FreeBSD.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+bsdinstall_multicons_disabled()
+{
+ local var value
+
+ var=bsdinstall.multicons_disable
+ value=`kenv -q $var`
+ case "${value:-NO}" in
+ [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
+ return 0
+ ;;
+ [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0)
+ return 1
+ ;;
+ *)
+ warn "$var is not set properly, ignoring"
+ return 1
+ ;;
+ esac
+}
# resolv.conf from DHCP ends up in here, so make sure the directory exists
mkdir /tmp/bsdinstall_etc
-kbdcontrol -d >/dev/null 2>&1
-if [ $? -eq 0 ]; then
- # Syscons: use xterm, start interesting things on other VTYs
- TERM=xterm
-
- # Don't send ESC on function-key 62/63 (left/right command key)
- kbdcontrol -f 62 '' > /dev/null 2>&1
- kbdcontrol -f 63 '' > /dev/null 2>&1
-
- if [ -z "$EXTERNAL_VTY_STARTED" ]; then
- # Init will clean these processes up if/when the system
- # goes multiuser
- touch /tmp/bsdinstall_log
- tail -f /tmp/bsdinstall_log > /dev/ttyv2 &
- /usr/libexec/getty autologin ttyv3 &
- EXTERNAL_VTY_STARTED=1
- fi
+if bsdinstall_multicons_disabled; then
+ /usr/libexec/bsdinstall/startbsdinstall primary
else
- # Serial or other console
- echo
- echo "Welcome to FreeBSD!"
- echo
- echo "Please choose the appropriate terminal type for your system."
- echo "Common console types are:"
- echo " ansi Standard ANSI terminal"
- echo " vt100 VT100 or compatible terminal"
- echo " xterm xterm terminal emulator (or compatible)"
- echo " cons25w cons25w terminal"
echo
- echo -n "Console type [vt100]: "
- read TERM
- TERM=${TERM:-vt100}
+ /usr/libexec/bsdinstall/runconsoles /usr/libexec/bsdinstall/startbsdinstall %
fi
-export TERM
-
-if [ -f /etc/installerconfig ]; then
- if bsdinstall script /etc/installerconfig; then
- dialog --backtitle "FreeBSD Installer" --title "Complete" --no-cancel --ok-label "Reboot" --pause "Installation of FreeBSD complete! Rebooting in 10 seconds" 10 30 10
- reboot
- else
- dialog --backtitle "FreeBSD Installer" --title "Error" --textbox /tmp/bsdinstall_log 0 0
- fi
- exit
-fi
-
-dialog --backtitle "FreeBSD Installer" --title "Welcome" --extra-button --extra-label "Shell" --ok-label "Install" --cancel-label "Live CD" --yesno "Welcome to FreeBSD! Would you like to begin an installation or use the live CD?" 0 0
-
-case $? in
-$DIALOG_OK) # Install
- # If not netbooting, have the installer configure the network
- dlv=`/sbin/sysctl -n vfs.nfs.diskless_valid 2> /dev/null`
- if [ ${dlv:=0} -eq 0 -a ! -f /etc/diskless ]; then
- BSDINSTALL_CONFIGCURRENT=yes; export BSDINSTALL_CONFIGCURRENT
- fi
-
- trap true SIGINT # Ignore cntrl-C here
- bsdinstall
- if [ $? -eq 0 ]; then
- dialog --backtitle "FreeBSD Installer" --title "Complete" --yes-label "Reboot" --no-label "Live CD" --yesno "Installation of FreeBSD complete! Would you like to reboot into the installed system now?" 0 0 && reboot
- else
- . /etc/rc.local
- fi
- ;;
-$DIALOG_CANCEL) # Live CD
- exit 0
- ;;
-$DIALOG_EXTRA) # Shell
- clear
- echo "When finished, type 'exit' to return to the installer."
- /bin/sh
- . /etc/rc.local
- ;;
-esac
-
diff --git a/release/release.conf.sample b/release/release.conf.sample
index bd7be15b0227..40f8457e8f89 100644
--- a/release/release.conf.sample
+++ b/release/release.conf.sample
@@ -113,4 +113,4 @@ PORTBRANCH="main"
## If WITH_CLOUDWARE is set to a non-empty value, this is a list of providers
## to create disk images.
-#CLOUDWARE="EC2 GCE VAGRANT-VIRTUALBOX VAGRANT-VMWARE"
+#CLOUDWARE="EC2 GCE OCI VAGRANT-VIRTUALBOX VAGRANT-VMWARE"
diff --git a/release/release.sh b/release/release.sh
index 75278a12daa6..3c68f89c2cc3 100755
--- a/release/release.sh
+++ b/release/release.sh
@@ -89,9 +89,11 @@ env_setup() {
SRC_CONF="/dev/null"
# The number of make(1) jobs, defaults to the number of CPUs available
- # for buildworld, and half of number of CPUs available for buildkernel.
+ # for buildworld, and half of number of CPUs available for buildkernel
+ # and 'make release'.
WORLD_FLAGS="-j$(sysctl -n hw.ncpu)"
KERNEL_FLAGS="-j$(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2))"
+ RELEASE_FLAGS="-j$(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2))"
MAKE_FLAGS="-s"
@@ -190,7 +192,7 @@ env_check() {
${CONF_FILES}"
RELEASE_KMAKEFLAGS="${MAKE_FLAGS} ${KERNEL_FLAGS} \
KERNCONF=\"${KERNEL}\" ${ARCH_FLAGS} ${CONF_FILES}"
- RELEASE_RMAKEFLAGS="${ARCH_FLAGS} \
+ RELEASE_RMAKEFLAGS="${ARCH_FLAGS} ${RELEASE_FLAGS} \
KERNCONF=\"${KERNEL}\" ${CONF_FILES} ${SRCPORTS} \
WITH_DVD=${WITH_DVD} WITH_VMIMAGES=${WITH_VMIMAGES} \
WITH_CLOUDWARE=${WITH_CLOUDWARE} XZ_THREADS=${XZ_THREADS}"
@@ -252,11 +254,11 @@ extra_chroot_setup() {
cp ${SRC_CONF} ${CHROOTDIR}/${SRC_CONF}
fi
- if [ -z "${NOGIT}" ]; then
- # Install git from ports or packages if the ports tree is
- # available and VCSCMD is unset.
- _gitcmd="$(which git)"
- if [ -d ${CHROOTDIR}/usr/ports -a -z "${_gitcmd}" ]; then
+ _gitcmd="$(which git)"
+ if [ -z "${NOGIT}" -a -z "${_gitcmd}" ]; then
+ # Install git from ports if the ports tree is available;
+ # otherwise install the pkg.
+ if [ -d ${CHROOTDIR}/usr/ports ]; then
# Trick the ports 'run-autotools-fixup' target to do the right
# thing.
_OSVERSION=$(chroot ${CHROOTDIR} /usr/bin/uname -U)
diff --git a/release/riscv/GENERICSD.conf b/release/riscv/GENERICSD.conf
index e969914dabe5..d4abbc7965b8 100644
--- a/release/riscv/GENERICSD.conf
+++ b/release/riscv/GENERICSD.conf
@@ -1,15 +1,26 @@
#!/bin/sh
-#
-# $FreeBSD$
-#
EMBEDDED_TARGET_ARCH="riscv64"
EMBEDDED_TARGET="riscv"
EMBEDDEDBUILD=1
FAT_SIZE="54m -b 8m"
FAT_TYPE="16"
-IMAGE_SIZE="4096M"
+IMAGE_SIZE="6144M"
KERNEL="GENERIC"
MD_ARGS="-x 63 -y 255"
PART_SCHEME="GPT"
+EFIPART_SUFFIX=p3
+ROOTFSPART_SUFFIX=p4
export BOARDNAME="GENERICSD"
+
+arm_create_partitions() {
+ # Create two partitions for firmware, preceding EFI and ROOTFS:
+ # 1. u-boot SPL
+ # 2. u-boot loader
+ #
+ # The exact partition types can be rewritten by the user, but they should
+ # be reserved now.
+
+ chroot ${CHROOTDIR} gpart add -t hifive-fsbl -l spl -a 512k -b 2m -s 2m ${mddev}
+ chroot ${CHROOTDIR} gpart add -t hifive-bbl -l uboot -a 512k -b 4m -s 4m ${mddev}
+}
diff --git a/release/riscv/make-memstick.sh b/release/riscv/make-memstick.sh
index 0cde77b018b8..90ff98b394c7 100755
--- a/release/riscv/make-memstick.sh
+++ b/release/riscv/make-memstick.sh
@@ -5,26 +5,35 @@
# clean up after itself very well for error conditions on purpose so the
# problem can be diagnosed (full filesystem most likely but ...).
#
-# Usage: make-memstick.sh <directory tree> <image filename>
+# Usage: make-memstick.sh <directory tree or manifest> <image filename>
#
-# $FreeBSD$
#
set -e
-PATH=/bin:/usr/bin:/sbin:/usr/sbin
-export PATH
+if [ "$(uname -s)" = "FreeBSD" ]; then
+ PATH=/bin:/usr/bin:/sbin:/usr/sbin
+ export PATH
+fi
scriptdir=$(dirname $(realpath $0))
. ${scriptdir}/../../tools/boot/install-boot.sh
if [ $# -ne 2 ]; then
- echo "make-memstick.sh /path/to/directory /path/to/image/file"
+ echo "make-memstick.sh /path/to/directory/or/manifest /path/to/image/file"
exit 1
fi
-if [ ! -d ${1} ]; then
- echo "${1} must be a directory"
+MAKEFSARG=${1}
+
+if [ -f ${MAKEFSARG} ]; then
+ BASEBITSDIR=`dirname ${MAKEFSARG}`
+ METALOG=${MAKEFSARG}
+elif [ -d ${MAKEFSARG} ]; then
+ BASEBITSDIR=${MAKEFSARG}
+ METALOG=
+else
+ echo "${MAKEFSARG} must exist"
exit 1
fi
@@ -33,15 +42,25 @@ if [ -e ${2} ]; then
exit 1
fi
-echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${1}/etc/fstab
-echo 'root_rw_mount="NO"' > ${1}/etc/rc.conf.local
-makefs -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${1}
-rm ${1}/etc/fstab
-rm ${1}/etc/rc.conf.local
+echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${BASEBITSDIR}/etc/fstab
+echo 'root_rw_mount="NO"' > ${BASEBITSDIR}/etc/rc.conf.local
+if [ -n "${METALOG}" ]; then
+ metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
+ cat ${METALOG} > ${metalogfilename}
+ echo "./etc/fstab type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ echo "./etc/rc.conf.local type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ MAKEFSARG=${metalogfilename}
+fi
+makefs -D -N ${BASEBITSDIR}/etc -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${MAKEFSARG}
+rm ${BASEBITSDIR}/etc/fstab
+rm ${BASEBITSDIR}/etc/rc.conf.local
+if [ -n "${METALOG}" ]; then
+ rm ${metalogfilename}
+fi
# Make an ESP in a file.
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
-make_esp_file ${espfilename} ${fat32min} ${1}/boot/loader.efi
+make_esp_file ${espfilename} ${fat32min} ${BASEBITSDIR}/boot/loader.efi
mkimg -s gpt \
-p efi:=${espfilename} \
diff --git a/release/riscv/mkisoimages.sh b/release/riscv/mkisoimages.sh
index 5556336840cd..cb58178ed4b9 100644
--- a/release/riscv/mkisoimages.sh
+++ b/release/riscv/mkisoimages.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# This script is used by release/Makefile to build the (optional) ISO images
# for a FreeBSD release. It is considered architecture dependent since each
@@ -37,8 +36,23 @@ if [ -z $MKIMG ]; then
fi
if [ "$1" = "-b" ]; then
- BASEBITSDIR="$4"
+ MAKEFSARG="$4"
+else
+ MAKEFSARG="$3"
+fi
+if [ -f ${MAKEFSARG} ]; then
+ BASEBITSDIR=`dirname ${MAKEFSARG}`
+ METALOG=${MAKEFSARG}
+elif [ -d ${MAKEFSARG} ]; then
+ BASEBITSDIR=${MAKEFSARG}
+ METALOG=
+else
+ echo "${MAKEFSARG} must exist"
+ exit 1
+fi
+
+if [ "$1" = "-b" ]; then
# Make an EFI system partition.
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
# ESP file size in KB.
@@ -49,7 +63,6 @@ if [ "$1" = "-b" ]; then
shift
else
- BASEBITSDIR="$3"
bootable=""
fi
@@ -60,12 +73,23 @@ fi
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
NAME="$1"; shift
+# MAKEFSARG extracted already
+shift
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$BASEBITSDIR/etc/fstab"
-$MAKEFS -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$@"
+if [ -n "${METALOG}" ]; then
+ metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
+ cat ${METALOG} > ${metalogfilename}
+ echo "./etc/fstab type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
+ MAKEFSARG=${metalogfilename}
+fi
+$MAKEFS -D -N ${BASEBITSDIR}/etc -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$MAKEFSARG" "$@"
rm -f "$BASEBITSDIR/etc/fstab"
rm -f ${espfilename}
+if [ -n "${METALOG}" ]; then
+ rm ${metalogfilename}
+fi
if [ "$bootable" != "" ]; then
# Look for the EFI System Partition image we dropped in the ISO image.
@@ -81,13 +105,18 @@ if [ "$bootable" != "" ]; then
done
# Create a GPT image containing the EFI partition.
- imgsize=`stat -f %z "$NAME"`
+ efifilename=$(mktemp /tmp/efi.img.XXXXXX)
+ if [ "$(uname -s)" = "Linux" ]; then
+ imgsize=`stat -c %s "$NAME"`
+ else
+ imgsize=`stat -f %z "$NAME"`
+ fi
$MKIMG -s gpt \
--capacity $imgsize \
$espparam \
- -o efi.img
+ -o $efifilename
# Drop the GPT into the System Area of the ISO.
- dd if=efi.img of="$NAME" bs=32k count=1 conv=notrunc
- rm -f efi.img
+ dd if=$efifilename of="$NAME" bs=32k count=1 conv=notrunc
+ rm -f $efifilename
fi
diff --git a/release/riscv/riscv64.conf b/release/riscv/riscv64.conf
index 00e8eaacee7e..24d4c9ab2145 100644
--- a/release/riscv/riscv64.conf
+++ b/release/riscv/riscv64.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
TARGET="riscv"
diff --git a/release/scripts/FreeBSD_install_cdrom.conf b/release/scripts/FreeBSD_install_cdrom.conf
index 7a6d7878a62e..4da532803987 100644
--- a/release/scripts/FreeBSD_install_cdrom.conf
+++ b/release/scripts/FreeBSD_install_cdrom.conf
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# The pkg(8) repository configuration file for the installation DVD.
#
diff --git a/release/scripts/atlas-upload.sh b/release/scripts/atlas-upload.sh
index f7c40b463f67..6fa1a6a2e9d4 100755
--- a/release/scripts/atlas-upload.sh
+++ b/release/scripts/atlas-upload.sh
@@ -23,7 +23,6 @@
#
# Upload a Vagrant image to Hashicorp's Atlas service
#
-# $FreeBSD$
#
ATLAS_API_URL=''
diff --git a/release/scripts/list-new-changesets.py b/release/scripts/list-new-changesets.py
index ffb4f48ccb86..1bca2789ed8a 100755
--- a/release/scripts/list-new-changesets.py
+++ b/release/scripts/list-new-changesets.py
@@ -24,7 +24,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
# Display SVN log entries for changesets which have files which were
# Added or Deleted.
diff --git a/release/scripts/make-manifest.sh b/release/scripts/make-manifest.sh
index 8dc182a55bf1..8105d0023d40 100755
--- a/release/scripts/make-manifest.sh
+++ b/release/scripts/make-manifest.sh
@@ -7,7 +7,6 @@
# The output file looks like this (tab-delimited):
# foo1.txz SHA256-checksum Number-of-files foo1 Description Install-by-default
#
-# $FreeBSD$
base="Base system"
kernel="Kernel"
diff --git a/release/scripts/make-pkg-package.sh b/release/scripts/make-pkg-package.sh
index 39814f17453f..68172c47f326 100755
--- a/release/scripts/make-pkg-package.sh
+++ b/release/scripts/make-pkg-package.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# Simulate the build environment.
@@ -10,6 +9,7 @@ export WSTAGEDIR=${WSTAGEDIR}
export REPODIR=${REPODIR}
export PKG_CMD=${PKG_CMD}
export PKG_VERSION=${PKG_VERSION}
+export OSVERSION=${OSVERSION}
export WRKDIR=$(make -C ${PORTSDIR}/ports-mgmt/pkg -V WRKDIR)
make -C ${PORTSDIR}/ports-mgmt/pkg TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
diff --git a/release/scripts/mk-vmimage.sh b/release/scripts/mk-vmimage.sh
index d5985ceb0d25..dfd91f43140d 100755
--- a/release/scripts/mk-vmimage.sh
+++ b/release/scripts/mk-vmimage.sh
@@ -1,7 +1,6 @@
#!/bin/sh
#-
# Copyright (c) 2014, 2015 The FreeBSD Foundation
-# All rights reserved.
#
# This software was developed by Glen Barber under sponsorship
# from the FreeBSD Foundation.
@@ -29,7 +28,6 @@
#
# mk-vmimage.sh: Create virtual machine disk images in various formats.
#
-# $FreeBSD$
#
usage() {
@@ -41,7 +39,7 @@ usage() {
main() {
local arg
VMCONFIG="/dev/null"
- while getopts "C:c:d:f:i:o:s:S:" arg; do
+ while getopts "C:c:d:F:f:i:o:s:S:" arg; do
case "${arg}" in
C)
VMBUILDCONF="${OPTARG}"
@@ -52,6 +50,9 @@ main() {
d)
DESTDIR="${OPTARG}"
;;
+ F)
+ VMFS="${OPTARG}"
+ ;;
f)
VMFORMAT="${OPTARG}"
;;
@@ -77,7 +78,8 @@ main() {
-z "${WORLDDIR}" -o \
-z "${DESTDIR}" -o \
-z "${VMSIZE}" -o \
- -z "${VMIMAGE}" ];
+ -z "${VMIMAGE}" -o \
+ -z "${VMFS}" ];
then
usage || exit 0
fi
@@ -95,13 +97,14 @@ main() {
vm_create_base
vm_install_base
+ vm_emulation_setup
vm_extra_install_base
vm_extra_install_packages
vm_extra_install_ports
vm_extra_enable_services
vm_extra_pre_umount
vm_extra_pkg_rmcache
- cleanup
+ vm_emulation_cleanup
vm_copy_base
vm_create_disk || return 0
vm_extra_create_disk
diff --git a/release/scripts/mm-mtree.sh b/release/scripts/mm-mtree.sh
index 790154595798..7ba7d0c9694a 100755
--- a/release/scripts/mm-mtree.sh
+++ b/release/scripts/mm-mtree.sh
@@ -11,8 +11,6 @@
# Copyright 2009 Douglas Barton
# dougb@FreeBSD.org
-# $FreeBSD$
-
PATH=/bin:/usr/bin:/usr/sbin
display_usage () {
diff --git a/release/scripts/mtree-to-plist.awk b/release/scripts/mtree-to-plist.awk
index 7fcac9b92a81..a5ff6fef235a 100644
--- a/release/scripts/mtree-to-plist.awk
+++ b/release/scripts/mtree-to-plist.awk
@@ -23,9 +23,13 @@
}
}
if (kernel != "") {
- tags="package=kernel"
- if (_kernconf != "") {
- tags=tags""_kernconf
+ if ($1 ~ /^\/boot\/dtb\//) {
+ tags="package=dtb"
+ } else {
+ tags="package=kernel"
+ if (_kernconf != "") {
+ tags=tags""_kernconf
+ }
}
}
if (length(tags) == 0)
@@ -36,8 +40,12 @@
for (i in a) {
if (a[i] ~ /^package=/) {
pkgname=a[i]
- if ($1 ~ /^\/boot\//)
- pkgname="bootloader"
+ if ($1 ~ /^\/boot\//) {
+ if (kernel != "" && $1 ~ /^\/boot\/dtb\//)
+ pkgname="dtb"
+ else
+ pkgname="bootloader"
+ }
gsub(/package=/, "", pkgname)
} else if (a[i] == "config") {
type="config"
@@ -64,7 +72,7 @@
print "No packages specified in line: $0"
next
}
- if (kernel != "") {
+ if (kernel != "" && pkgname != "dtb") {
output="kernel"
if (_kernconf != "") {
output=output"."_kernconf
diff --git a/release/scripts/pkg-stage.sh b/release/scripts/pkg-stage.sh
index 6dd9f2b62f27..551876eca8c6 100755
--- a/release/scripts/pkg-stage.sh
+++ b/release/scripts/pkg-stage.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
set -e
@@ -9,15 +8,16 @@ export ASSUME_ALWAYS_YES="YES"
export PKG_DBDIR="/tmp/pkg"
export PERMISSIVE="YES"
export REPO_AUTOUPDATE="NO"
-export PKGCMD="/usr/sbin/pkg -d"
+export ROOTDIR="$PWD/dvd"
+export PKGCMD="/usr/sbin/pkg -d --rootdir ${ROOTDIR}"
export PORTSDIR="${PORTSDIR:-/usr/ports}"
_DVD_PACKAGES="archivers/unzip
-devel/subversion
-devel/subversion-static
-emulators/linux_base-c6
-graphics/drm-legacy-kmod
-graphics/drm-stable-kmod
+devel/git
+emulators/linux_base-c7
+graphics/drm-kmod
+graphics/drm-510-kmod
+graphics/drm-515-kmod
misc/freebsd-doc-all
net/mpd5
net/rsync
@@ -31,8 +31,9 @@ sysutils/tmux
www/firefox
www/links
x11-drivers/xf86-video-vmware
-x11/gnome3
+x11/gnome
x11/kde5
+x11/sddm
x11/xorg"
# If NOPORTS is set for the release, do not attempt to build pkg(8).
@@ -48,14 +49,13 @@ if [ ! -x /usr/local/sbin/pkg ]; then
/usr/bin/make -C ${PORTSDIR}/ports-mgmt/pkg install clean
fi
-export DVD_DIR="dvd/packages"
-export PKG_ABI=$(pkg config ABI)
-export PKG_ALTABI=$(pkg config ALTABI 2>/dev/null)
-export PKG_REPODIR="${DVD_DIR}/${PKG_ABI}"
+export PKG_ABI=$(pkg --rootdir ${ROOTDIR} config ABI)
+export PKG_ALTABI=$(pkg --rootdir ${ROOTDIR} config ALTABI 2>/dev/null)
+export PKG_REPODIR="packages/${PKG_ABI}"
-/bin/mkdir -p ${PKG_REPODIR}
+/bin/mkdir -p ${ROOTDIR}/${PKG_REPODIR}
if [ ! -z "${PKG_ALTABI}" ]; then
- (cd ${DVD_DIR} && ln -s ${PKG_ABI} ${PKG_ALTABI})
+ ln -s ${PKG_ABI} ${ROOTDIR}/packages/${PKG_ALTABI}
fi
# Ensure the ports listed in _DVD_PACKAGES exist to sanitize the
@@ -84,9 +84,10 @@ ${PKGCMD} fetch -o ${PKG_REPODIR} -d ${DVD_PACKAGES}
# Create the 'Latest/pkg.txz' symlink so 'pkg bootstrap' works
# using the on-disc packages.
-mkdir -p ${PKG_REPODIR}/Latest
-(cd ${PKG_REPODIR}/Latest && \
- ln -s ../All/$(${PKGCMD} rquery %n-%v pkg).txz pkg.txz)
+export LATEST_DIR="${ROOTDIR}/${PKG_REPODIR}/Latest"
+mkdir -p ${LATEST_DIR}
+ln -s ../All/$(${PKGCMD} rquery %n-%v pkg).pkg ${LATEST_DIR}/pkg.pkg
+ln -sf pkg.pkg ${LATEST_DIR}/pkg.txz
${PKGCMD} repo ${PKG_REPODIR}
diff --git a/release/tools/arm.subr b/release/tools/arm.subr
index 89b52077e836..983c3ea75dc7 100644
--- a/release/tools/arm.subr
+++ b/release/tools/arm.subr
@@ -1,7 +1,6 @@
#!/bin/sh
#-
# Copyright (c) 2015-2017 The FreeBSD Foundation
-# All rights reserved.
#
# Portions of this software were developed by Glen Barber
# under sponsorship from the FreeBSD Foundation.
@@ -29,7 +28,6 @@
#
# Common subroutines used to build arm, arm64, or RISC-V SD card images.
#
-# $FreeBSD$
#
cleanup() {
@@ -63,24 +61,31 @@ umount_loop() {
}
arm_create_disk() {
+ if [ $(sysctl -n kern.geom.part.mbr.enforce_chs) != 0 ]; then
+ return 1
+ fi
+
# Create the target raw file and temporary work directory.
chroot ${CHROOTDIR} gpart create -s ${PART_SCHEME} ${mddev}
+
+ arm_create_partitions
+
if [ "${PART_SCHEME}" = "GPT" ]; then
chroot ${CHROOTDIR} gpart add -t efi -l efi -a 512k -s ${FAT_SIZE} ${mddev}
- chroot ${CHROOTDIR} newfs_msdos -L efi -F ${FAT_TYPE} /dev/${mddev}p1
chroot ${CHROOTDIR} gpart add -t freebsd-ufs -l rootfs -a 64k ${mddev}
- chroot ${CHROOTDIR} newfs -U -L rootfs /dev/${mddev}p2
fi
if [ "${PART_SCHEME}" = "MBR" ]; then
chroot ${CHROOTDIR} gpart add -t '!12' -a 512k -s ${FAT_SIZE} ${mddev}
chroot ${CHROOTDIR} gpart set -a active -i 1 ${mddev}
- chroot ${CHROOTDIR} newfs_msdos -L msdosboot -F ${FAT_TYPE} /dev/${mddev}s1
chroot ${CHROOTDIR} gpart add -t freebsd ${mddev}
- chroot ${CHROOTDIR} gpart create -s bsd ${mddev}s2
- chroot ${CHROOTDIR} gpart add -t freebsd-ufs -a 64k /dev/${mddev}s2
- chroot ${CHROOTDIR} newfs -U -L rootfs /dev/${mddev}s2a
+ chroot ${CHROOTDIR} gpart create -s bsd ${mddev}${BSDLABEL_SUFFIX}
+ chroot ${CHROOTDIR} gpart add -t freebsd-ufs -a 64k -b 64k ${mddev}${BSDLABEL_SUFFIX}
fi
+ # Create the EFI and UFS filesystems
+ chroot ${CHROOTDIR} newfs_msdos -L efi -F ${FAT_TYPE} /dev/${mddev}${EFIPART_SUFFIX}
+ chroot ${CHROOTDIR} newfs -U -L rootfs /dev/${mddev}${ROOTFSPART_SUFFIX}
+
return 0
}
@@ -169,12 +174,7 @@ arm_setup_minimal_loader() {
}
arm_install_base() {
- if [ "${PART_SCHEME}" = "GPT" ]; then
- chroot ${CHROOTDIR} mount /dev/${mddev}p2 ${DESTDIR}
- fi
- if [ "${PART_SCHEME}" = "MBR" ]; then
- chroot ${CHROOTDIR} mount /dev/${mddev}s2a ${DESTDIR}
- fi
+ chroot ${CHROOTDIR} mount /dev/${mddev}${ROOTFSPART_SUFFIX} ${DESTDIR}
_OSVERSION=$(chroot ${CHROOTDIR} /usr/bin/uname -U)
REVISION=$(chroot ${CHROOTDIR} make -C /usr/src/release -V REVISION)
BRANCH=$(chroot ${CHROOTDIR} make -C /usr/src/release -V BRANCH)
@@ -185,7 +185,8 @@ arm_install_base() {
DESTDIR=${DESTDIR} KERNCONF=${KERNEL} \
${CONF_FILES} installworld installkernel distribution
chroot ${CHROOTDIR} mkdir -p ${DESTDIR}/boot/efi
- chroot ${CHROOTDIR} mkdir -p ${DESTDIR}/boot/msdos
+ # Compatibility symlink to /boot/msdos for 13.1 and earlier
+ chroot ${CHROOTDIR} ln -s efi ${DESTDIR}/boot/msdos
arm_create_user
arm_setup_usb_otg
@@ -196,31 +197,26 @@ arm_install_base() {
echo '# Custom /etc/fstab for FreeBSD embedded images' \
> ${CHROOTDIR}/${DESTDIR}/etc/fstab
- if [ "${PART_SCHEME}" = "GPT" ]; then
- echo "/dev/ufs/rootfs / ufs rw 1 1" \
- >> ${CHROOTDIR}/${DESTDIR}/etc/fstab
- echo "/dev/msdosfs/EFI /boot/efi msdosfs rw,noatime 0 0" \
- >> ${CHROOTDIR}/${DESTDIR}/etc/fstab
- fi
- if [ "${PART_SCHEME}" = "MBR" ]; then
- echo "/dev/ufs/rootfs / ufs rw 1 1" \
- >> ${CHROOTDIR}/${DESTDIR}/etc/fstab
- echo "/dev/msdosfs/MSDOSBOOT /boot/msdos msdosfs rw,noatime 0 0" \
- >> ${CHROOTDIR}/${DESTDIR}/etc/fstab
- fi
+ echo "/dev/ufs/rootfs / ufs rw 1 1" \
+ >> ${CHROOTDIR}/${DESTDIR}/etc/fstab
+ echo "/dev/msdosfs/EFI /boot/efi msdosfs rw,noatime 0 0" \
+ >> ${CHROOTDIR}/${DESTDIR}/etc/fstab
echo "tmpfs /tmp tmpfs rw,mode=1777 0 0" \
>> ${CHROOTDIR}/${DESTDIR}/etc/fstab
local hostname
hostname="$(echo ${KERNEL} | tr '[:upper:]' '[:lower:]')"
echo "hostname=\"${hostname}\"" > ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
- echo 'ifconfig_DEFAULT="DHCP"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
+ echo 'ifconfig_DEFAULT="DHCP inet6 accept_rtadv"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
echo 'sshd_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
echo 'sendmail_enable="NONE"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
echo 'sendmail_submit_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
echo 'sendmail_outbound_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
echo 'sendmail_msp_queue_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
echo 'growfs_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
+ if [ -n "${CONFIG_POWERD_ENABLE}" ]; then
+ echo 'powerd_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
+ fi
sync
umount_loop ${CHROOTDIR}/${DESTDIR}
@@ -232,23 +228,12 @@ arm_install_boot() {
FATMOUNT="${DESTDIR%${KERNEL}}/fat"
UFSMOUNT="${DESTDIR%${KERNEL}}/ufs"
chroot ${CHROOTDIR} mkdir -p "${FATMOUNT}" "${UFSMOUNT}"
- if [ "${PART_SCHEME}" = "GPT" ]; then
- dospart="/dev/${mddev}p1"
- ufspart="/dev/${mddev}p2"
- fi
- if [ "${PART_SCHEME}" = "MBR" ]; then
- dospart="/dev/${mddev}s1"
- ufspart="/dev/${mddev}s2a"
- fi
+ dospart="/dev/${mddev}${EFIPART_SUFFIX}"
+ ufspart="/dev/${mddev}${ROOTFSPART_SUFFIX}"
chroot ${CHROOTDIR} mount_msdosfs ${dospart} ${FATMOUNT}
chroot ${CHROOTDIR} mount ${ufspart} ${UFSMOUNT}
- if [ "${EMBEDDED_TARGET}" = "arm" ]; then
- chroot ${CHROOTDIR} cp -p ${UFSMOUNT}/boot/ubldr.bin \
- ${FATMOUNT}/ubldr.bin
- fi
-
BOOTFILES="$(chroot ${CHROOTDIR} \
env TARGET=${EMBEDDED_TARGET} TARGET_ARCH=${EMBEDDED_TARGET_ARCH} \
WITH_UNIFIED_OBJDIR=yes \
@@ -278,3 +263,20 @@ arm_install_uboot() {
arm_do_quirk() {
# Override in the ${EMBEDDED_TARGET}/${BOARDNAME}.conf file.
}
+
+arm_create_partitions() {
+ # Override in the ${EMBEDDED_TARGET}/${BOARDNAME}.conf file.
+
+ # Set defaults for EFIPART_SUFFIX, ROOTFSPART_SUFFIX, and
+ # BSDLABEL_SUFFIX (MBR only), needed elsewhere.
+
+ if [ "${PART_SCHEME}" = "GPT" ]; then
+ export EFIPART_SUFFIX=p1
+ export ROOTFSPART_SUFFIX=p2
+ fi
+ if [ "${PART_SCHEME}" = "MBR" ]; then
+ export EFIPART_SUFFIX=s1
+ export BSDLABEL_SUFFIX=s2
+ export ROOTFSPART_SUFFIX=s2a
+ fi
+}
diff --git a/release/tools/azure.conf b/release/tools/azure.conf
index a9126ed8c389..9da2b19de694 100644
--- a/release/tools/azure.conf
+++ b/release/tools/azure.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# Convention of Linux type VM on Azure is 30G
@@ -16,21 +15,23 @@ export VM_RC_LIST="ntpd sshd waagent firstboot_freebsd_update firstboot_pkgs"
# See ResourceDisk.EnableSwap and ResourceDisk.SwapSizeMB in waagent.conf
export NOSWAP=YES
-# https://docs.microsoft.com/en-us/azure/marketplace/azure-vm-create-certification-faq#vm-images-must-have-1mb-free-space
+# https://learn.microsoft.com/en-us/partner-center/marketplace/azure-vm-certification-faq#vm-images-must-have-1-mb-of-free-space
export VM_BOOTPARTSOFFSET=1M
vm_extra_pre_umount() {
+ mount -t devfs devfs ${DESTDIR}/dev
+
# The firstboot_pkgs rc.d script will download the repository
# catalogue and install or update pkg when the instance first
# launches, so these files would just be replaced anyway; removing
# them from the image allows it to boot faster.
- mount -t devfs devfs ${DESTDIR}/dev
chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
/usr/sbin/pkg delete -f -y pkg
- umount ${DESTDIR}/dev
rm ${DESTDIR}/var/db/pkg/repo-*.sqlite
- yes | chroot ${DESTDIR} ${EMULATOR} /usr/local/sbin/waagent -deprovision
+ chroot ${DESTDIR} ${EMULATOR} pw usermod root -h -
+
+ umount ${DESTDIR}/dev
cat << EOF >> ${DESTDIR}/etc/rc.conf
ifconfig_hn0="SYNCDHCP"
@@ -52,7 +53,5 @@ EOF
touch ${DESTDIR}/firstboot
- rm -f ${DESTDIR}/etc/resolv.conf
-
return 0
}
diff --git a/release/tools/basic-ci.conf b/release/tools/basic-ci.conf
index 9dc05c57d0f4..5acc04b1e530 100644
--- a/release/tools/basic-ci.conf
+++ b/release/tools/basic-ci.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# Should be enough for base image, image can be resized in needed
diff --git a/release/tools/basic-cloudinit.conf b/release/tools/basic-cloudinit.conf
new file mode 100644
index 000000000000..da4bed5ea5b5
--- /dev/null
+++ b/release/tools/basic-cloudinit.conf
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+#
+
+# Should be enough for base image, image can be resized in needed
+export VMSIZE=5g
+
+# 1M config drive should be enough in most cases
+export CONFIG_DRIVE=YES
+export CONFIG_DRIVE_SIZE=1M
+
+# Set to a list of third-party software to enable in rc.conf(5).
+export VM_RC_LIST="sshd growfs nuageinit"
+
+vm_extra_pre_umount() {
+ cat << EOF >> ${DESTDIR}/etc/rc.conf
+dumpdev="AUTO"
+ifconfig_DEFAULT="DHCP"
+sshd_enable="YES"
+EOF
+
+ cat << EOF >> ${DESTDIR}/boot/loader.conf
+autoboot_delay="-1"
+beastie_disable="YES"
+loader_logo="none"
+console="comconsole,vidconsole"
+EOF
+ cat <<EOF >> ${DESTDIR}/etc/ssh/sshd_config
+PasswordAuthentication yes
+UsePAM no
+EOF
+
+ touch ${DESTDIR}/firstboot
+
+ return 0
+}
diff --git a/release/tools/ec2-base.conf b/release/tools/ec2-base.conf
new file mode 100644
index 000000000000..f4c46fe285cd
--- /dev/null
+++ b/release/tools/ec2-base.conf
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+. ${WORLDDIR}/release/tools/ec2.conf
+
+# Packages to install into the image we're creating. In addition to packages
+# present on all EC2 AMIs, we install:
+# * ec2-scripts, which provides a range of EC2ification startup scripts,
+# * firstboot-freebsd-update, to install security updates at first boot,
+# * firstboot-pkgs, to install packages at first boot, and
+# * isc-dhcp44-client, used for IPv6 network setup.
+export VM_EXTRA_PACKAGES="${VM_EXTRA_PACKAGES} ec2-scripts \
+ firstboot-freebsd-update firstboot-pkgs isc-dhcp44-client"
+
+# Services to enable in rc.conf(5).
+export VM_RC_LIST="${VM_RC_LIST} ec2_configinit ec2_ephemeral_swap \
+ ec2_fetchkey ec2_loghostkey firstboot_freebsd_update firstboot_pkgs \
+ growfs sshd"
+
+vm_extra_pre_umount() {
+ # The AWS CLI tools are generally useful, and small enough that they
+ # will download quickly; but users will often override this setting
+ # via EC2 user-data.
+ echo 'firstboot_pkgs_list="devel/py-awscli"' >> ${DESTDIR}/etc/rc.conf
+
+ # EC2 instances use DHCP to get their network configuration. IPv6
+ # requires accept_rtadv.
+ echo 'ifconfig_DEFAULT="SYNCDHCP accept_rtadv"' >> ${DESTDIR}/etc/rc.conf
+
+ # Enable IPv6 on all interfaces, and spawn DHCPv6 via rtsold
+ echo 'ipv6_activate_all_interfaces="YES"' >> ${DESTDIR}/etc/rc.conf
+ echo 'rtsold_enable="YES"' >> ${DESTDIR}/etc/rc.conf
+ echo 'rtsold_flags="-M /usr/local/libexec/rtsold-M -a"' >> ${DESTDIR}/etc/rc.conf
+
+ # Provide a script which rtsold can use to launch DHCPv6
+ mkdir -p ${DESTDIR}/usr/local/libexec
+ cat > ${DESTDIR}/usr/local/libexec/rtsold-M <<'EOF'
+#!/bin/sh
+
+/usr/local/sbin/dhclient -6 -nw -N -cf /dev/null $1
+EOF
+ chmod 755 ${DESTDIR}/usr/local/libexec/rtsold-M
+
+ # Any EC2 ephemeral disks seen when the system first boots will
+ # be "new" disks; there is no "previous boot" when they might have
+ # been seen and used already.
+ touch ${DESTDIR}/var/db/ec2_ephemeral_diskseen
+
+ # Configuration common to all EC2 AMIs
+ ec2_common
+
+ return 0
+}
diff --git a/release/tools/ec2-cloud-init.conf b/release/tools/ec2-cloud-init.conf
new file mode 100644
index 000000000000..7682d635b1d6
--- /dev/null
+++ b/release/tools/ec2-cloud-init.conf
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+. ${WORLDDIR}/release/tools/ec2.conf
+
+# Packages to install into the image we're creating. In addition to packages
+# present on all EC2 AMIs, we install cloud-init.
+export VM_EXTRA_PACKAGES="${VM_EXTRA_PACKAGES} net/cloud-init"
+
+# Services to enable in rc.conf(5).
+export VM_RC_LIST="${VM_RC_LIST} cloudinit sshd"
+
+vm_extra_pre_umount() {
+ # Configuration common to all EC2 AMIs
+ ec2_common
+
+ # Configure cloud-init
+ cat <<-'EOF' > ${DESTDIR}/usr/local/etc/cloud/cloud.cfg.d/98_ec2.cfg
+ disable_root: true
+ system_info:
+ distro: freebsd
+ default_user:
+ name: ec2-user
+ lock_passwd: True
+ groups: [wheel]
+ shell: /bin/sh
+ homedir: /home/ec2-user
+ doas:
+ - permit nopass ec2-user
+ EOF
+
+ return 0
+}
diff --git a/release/tools/ec2.conf b/release/tools/ec2.conf
index f0665646088b..989e8a05a318 100644
--- a/release/tools/ec2.conf
+++ b/release/tools/ec2.conf
@@ -1,101 +1,47 @@
#!/bin/sh
-#
-# $FreeBSD$
-#
-
-# Packages to install into the image we're creating. This is a deliberately
-# minimalist set, providing only the packages necessary to bootstrap further
-# package installation as specified via EC2 user-data.
-export VM_EXTRA_PACKAGES="${VM_EXTRA_PACKAGES} ec2-scripts \
- firstboot-freebsd-update firstboot-pkgs isc-dhcp44-client \
- ebsnvme-id"
-
-# Include the amazon-ssm-agent package in amd64 images, since some users want
-# to be able to use it on systems which are not connected to the Internet.
-# (It is not enabled by default, however.) This package does not exist for
-# aarch64, so we have to be selective about when we install it.
-if [ "${TARGET_ARCH}" = "amd64" ]; then
- export VM_EXTRA_PACKAGES="${VM_EXTRA_PACKAGES} amazon-ssm-agent"
-fi
-# Set to a list of third-party software to enable in rc.conf(5).
-export VM_RC_LIST="ec2_configinit ec2_fetchkey ec2_loghostkey firstboot_freebsd_update firstboot_pkgs ntpd dev_aws_disk"
+# Packages which should be installed onto all EC2 AMIs:
+# * ebsnvme-id, which is very minimal and provides important EBS-specific
+# functionality,
+# * amazon-ssm-agent (not enabled by default, but some users need to use
+# it on systems not connected to the internet).
+export VM_EXTRA_PACKAGES="${VM_EXTRA_PACKAGES} ebsnvme-id amazon-ssm-agent"
+
+# Services which should be enabled by default in rc.conf(5).
+export VM_RC_LIST="dev_aws_disk ntpd"
-# Build with a 4.9 GB UFS partition; the growfs rc.d script will expand
+# Build with a 5.9 GB partition; the growfs rc.d script will expand
# the partition to fill the root disk after the EC2 instance is launched.
# Note that if this is set to <N>G, we will end up with an <N+1> GB disk
-# image since VMSIZE is the size of the UFS partition, not the disk which
-# it resides within.
-export VMSIZE=5000m
-
-# No swap space; the ec2_ephemeralswap rc.d script will allocate swap
-# space on EC2 ephemeral disks. (If they exist -- the T2 low-cost instances
-# and the C4 compute-optimized instances don't have ephemeral disks. But
-# it would be silly to bloat the image and increase costs for every instance
-# just for those two families, especially since instances ranging in size
-# from 1 GB of RAM to 60 GB of RAM would need different sizes of swap space
-# anyway.)
+# image since VMSIZE is the size of the filesystem partition, not the disk
+# which it resides within.
+export VMSIZE=6000m
+
+# No swap space; it doesn't make sense to provision any as part of the disk
+# image when we could be launching onto a system with anywhere between 0.5
+# and 4096 GB of RAM.
export NOSWAP=YES
-vm_extra_pre_umount() {
- # The firstboot_pkgs rc.d script will download the repository
- # catalogue and install or update pkg when the instance first
- # launches, so these files would just be replaced anyway; removing
- # them from the image allows it to boot faster.
+ec2_common() {
+ # Delete the pkg package and the repo database; they will likely be
+ # long out of date before the EC2 instance is launched.
mount -t devfs devfs ${DESTDIR}/dev
chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
/usr/sbin/pkg delete -f -y pkg
umount ${DESTDIR}/dev
rm ${DESTDIR}/var/db/pkg/repo-*.sqlite
- # The size of the EC2 root disk can be configured at instance launch
- # time; expand our filesystem to fill the disk.
- echo 'growfs_enable="YES"' >> ${DESTDIR}/etc/rc.conf
-
- # EC2 instances use DHCP to get their network configuration. IPv6
- # requires accept_rtadv.
- echo 'ifconfig_DEFAULT="SYNCDHCP accept_rtadv"' >> ${DESTDIR}/etc/rc.conf
-
- # Unless the system has been configured via EC2 user-data, the user
- # will need to SSH in to do anything.
- echo 'sshd_enable="YES"' >> ${DESTDIR}/etc/rc.conf
-
- # The AWS CLI tools are generally useful, and small enough that they
- # will download quickly; but users will often override this setting
- # via EC2 user-data.
- echo 'firstboot_pkgs_list="awscli"' >> ${DESTDIR}/etc/rc.conf
-
- # Enable IPv6 on all interfaces, and spawn DHCPv6 via rtsold
- echo 'ipv6_activate_all_interfaces="YES"' >> ${DESTDIR}/etc/rc.conf
- echo 'rtsold_enable="YES"' >> ${DESTDIR}/etc/rc.conf
- echo 'rtsold_flags="-M /usr/local/libexec/rtsold-M -a"' >> ${DESTDIR}/etc/rc.conf
-
# Turn off IPv6 Duplicate Address Detection; the EC2 networking
# configuration makes it unnecessary.
echo 'net.inet6.ip6.dad_count=0' >> ${DESTDIR}/etc/sysctl.conf
- # Provide a script which rtsold can use to launch DHCPv6
- mkdir -p ${DESTDIR}/usr/local/libexec
- cat > ${DESTDIR}/usr/local/libexec/rtsold-M <<'EOF'
-#!/bin/sh
-
-/usr/local/sbin/dhclient -6 -nw -N -cf /dev/null $1
-EOF
- chmod 755 ${DESTDIR}/usr/local/libexec/rtsold-M
-
- # The EC2 console is output-only, so while printing a backtrace can
- # be useful, there's no point dropping into a debugger or waiting
- # for a keypress.
- echo 'debug.trace_on_panic=1' >> ${DESTDIR}/boot/loader.conf
- echo 'debug.debugger_on_panic=0' >> ${DESTDIR}/boot/loader.conf
- echo 'kern.panic_reboot_wait_time=0' >> ${DESTDIR}/boot/loader.conf
-
- # The console is not interactive, so we might as well boot quickly.
+ # Booting quickly is more important than giving users a chance to
+ # access the boot loader via the serial port.
echo 'autoboot_delay="-1"' >> ${DESTDIR}/boot/loader.conf
echo 'beastie_disable="YES"' >> ${DESTDIR}/boot/loader.conf
- # Tell gptboot not to wait 3 seconds for a keypress which won't
- # arrive either.
+ # Tell gptboot not to wait 3 seconds for a keypress which will
+ # never arrive.
printf -- "-n\n" > ${DESTDIR}/boot.config
# The emulated keyboard attached to EC2 instances is inaccessible to
@@ -122,17 +68,14 @@ EOF
# historical "nvd" driver.
echo 'hw.nvme.use_nvd="0"' >> ${DESTDIR}/boot/loader.conf
- # Disable ChallengeResponseAuthentication according to EC2
- # requirements.
+ # Disable KbdInteractiveAuthentication according to EC2 requirements.
sed -i '' -e \
- 's/^#ChallengeResponseAuthentication yes/ChallengeResponseAuthentication no/' \
+ 's/^#KbdInteractiveAuthentication yes/KbdInteractiveAuthentication no/' \
${DESTDIR}/etc/ssh/sshd_config
- # Use FreeBSD Update and Portsnap mirrors hosted in AWS
+ # Use FreeBSD Update mirrors hosted in AWS
sed -i '' -e 's/update.FreeBSD.org/aws.update.FreeBSD.org/' \
${DESTDIR}/etc/freebsd-update.conf
- sed -i '' -e 's/portsnap.FreeBSD.org/aws.portsnap.FreeBSD.org/' \
- ${DESTDIR}/etc/portsnap.conf
# Use the NTP service provided by Amazon
sed -i '' -e 's/^pool/#pool/' \
@@ -156,19 +99,8 @@ echo "-nfsv4,minorversion=1,oneopenown ${FS}.efs.${REGION}.amazonaws.com:/"
EOF
chmod 755 ${DESTDIR}/etc/autofs/special_efs
- # The first time the AMI boots, the installed "first boot" scripts
- # should be allowed to run:
- # * ec2_configinit (download and process EC2 user-data)
- # * ec2_fetchkey (arrange for SSH using the EC2-provided public key)
- # * growfs (expand the filesystem to fill the provided disk)
- # * firstboot_freebsd_update (install critical updates)
- # * firstboot_pkgs (install packages)
+ # The first time the AMI boots, run "first boot" scripts.
touch ${DESTDIR}/firstboot
- if ! [ -z "${QEMUSTATIC}" ]; then
- rm -f ${DESTDIR}/${EMULATOR}
- fi
- rm -f ${DESTDIR}/etc/resolv.conf
-
return 0
}
diff --git a/release/tools/gce.conf b/release/tools/gce.conf
index 745477f0bc8e..5ad83bcded53 100644
--- a/release/tools/gce.conf
+++ b/release/tools/gce.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# The default of 3GB is too small for GCE, so override the size here.
@@ -8,8 +7,8 @@ export VMSIZE=20g
# Set to a list of packages to install.
export VM_EXTRA_PACKAGES="${VM_EXTRA_PACKAGES} firstboot-freebsd-update \
- firstboot-pkgs \ google-cloud-sdk panicmail sudo \
- sysutils/py-google-compute-engine lang/python lang/python2 \
+ firstboot-pkgs google-cloud-sdk panicmail sudo \
+ sysutils/py-google-compute-engine lang/python \
lang/python3"
# Set to a list of third-party software to enable in rc.conf(5).
@@ -70,7 +69,7 @@ EOF
EOF
cat << EOF >> ${DESTDIR}/etc/ssh/sshd_config
-ChallengeResponseAuthentication no
+KbdInteractiveAuthentication no
X11Forwarding no
AcceptEnv LANG
AllowAgentForwarding no
@@ -84,9 +83,7 @@ EOF
cat << EOF >> ${DESTDIR}/etc/sysctl.conf
net.inet.icmp.drop_redirect=1
net.inet.ip.redirect=0
-net.inet.tcp.blackhole=2
-net.inet.udp.blackhole=1
-kern.ipc.somaxconn=1024
+kern.ipc.soacceptqueue=1024
debug.trace_on_panic=1
debug.debugger_on_panic=0
EOF
@@ -121,7 +118,15 @@ EOF
touch ${DESTDIR}/firstboot
- rm -f ${DESTDIR}/etc/resolv.conf
+ return 0
+}
+# Do everything except deleting resolv.conf since we construct our own
+# Googlized resolv.conf file in vm_extra_install_base.
+vm_emulation_cleanup() {
+ if ! [ -z "${QEMUSTATIC}" ]; then
+ rm -f ${DESTDIR}/${EMULATOR}
+ fi
+ umount_loop ${DESTDIR}/dev
return 0
}
diff --git a/release/tools/oci.conf b/release/tools/oci.conf
new file mode 100644
index 000000000000..a4fe54ad3031
--- /dev/null
+++ b/release/tools/oci.conf
@@ -0,0 +1,94 @@
+#!/bin/sh
+# Set to a list of packages to install.
+export VM_EXTRA_PACKAGES="
+ comms/py-pyserial
+ converters/base64
+ devel/oci-cli
+ devel/py-babel
+ devel/py-iso8601
+ devel/py-pbr
+ devel/py-six
+ ftp/curl
+ lang/python
+ lang/python3
+ net/cloud-init
+ net/py-eventlet
+ net/py-netaddr
+ net/py-netifaces
+ net/py-oauth
+ net/rsync
+ panicmail
+ security/ca_root_nss
+ security/sudo
+ sysutils/firstboot-freebsd-update
+ sysutils/firstboot-pkgs
+ sysutils/panicmail
+ textproc/jq
+ "
+
+# Should be enough for base image, image can be resized in needed
+export VMSIZE=6g
+
+# Set to a list of third-party software to enable in rc.conf(5).
+export VM_RC_LIST="
+ cloudinit
+ firstboot_pkgs
+ firstboot_freebsd_update
+ growfs
+ ntpd
+ ntpd_sync_on_start
+ sshd
+ zfs"
+
+vm_extra_pre_umount() {
+ cat <<-'EOF' >> ${DESTDIR}/etc/rc.conf
+ dumpdev=AUTO
+ sendmail_enable=NONE
+EOF
+
+ cat <<-'EOF' >> ${DESTDIR}/boot/loader.conf
+ autoboot_delay="5"
+ beastie_disable="YES"
+ boot_serial="YES"
+ loader_logo="none"
+ cryptodev_load="YES"
+ opensolaris_load="YES"
+ xz_load="YES"
+ zfs_load="YES"
+EOF
+
+ cat <<-'EOF' >> ${DESTDIR}/etc/ssh/sshd_config
+ # S11 Configure the SSH service to prevent password-based login
+ PermitRootLogin prohibit-password
+ PasswordAuthentication no
+ KbdInteractiveAuthentication no
+ PermitEmptyPasswords no
+ UseDNS no
+EOF
+
+ # S14 Root user login must be disabled on serial-over-ssh console
+ pw -R ${DESTDIR} usermod root -w no
+ # OCI requirements override the default FreeBSD cloud-init settings
+ cat <<-'EOF' >> ${DESTDIR}/usr/local/etc/cloud/cloud.cfg.d/98_oci.cfg
+ disable_root: true
+ system_info:
+ distro: freebsd
+ default_user:
+ name: freebsd
+ lock_passwd: True
+ gecos: "OCI Default User"
+ groups: [wheel]
+ sudo: ["ALL=(ALL) NOPASSWD:ALL"]
+ shell: /bin/sh
+ network:
+ renderers: ['freebsd']
+EOF
+
+ # Use Oracle Cloud Infrastructure NTP server
+ sed -i '' -E -e 's/^pool.*iburst/server 169.254.169.254 iburst/' \
+ ${DESTDIR}/etc/ntp.conf
+
+ touch ${DESTDIR}/firstboot
+
+ return 0
+}
diff --git a/release/tools/openstack.conf b/release/tools/openstack.conf
index ff156333cb17..05d2d13bbb39 100644
--- a/release/tools/openstack.conf
+++ b/release/tools/openstack.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# Set to a list of packages to install.
@@ -36,8 +35,6 @@ vm_extra_pre_umount() {
echo 'ALL ALL=(ALL) NOPASSWD:ALL' >> \
${DESTDIR}/usr/local/etc/sudoers.d/cloud-init
- rm -f ${DESTDIR}/etc/resolv.conf
-
# The console is not interactive, so we might as well boot quickly.
echo 'autoboot_delay="-1"' >> ${DESTDIR}/boot/loader.conf
echo 'beastie_disable="YES"' >> ${DESTDIR}/boot/loader.conf
diff --git a/release/tools/vagrant-virtualbox.conf b/release/tools/vagrant-virtualbox.conf
index c29d5716bac2..9e0e430bbc88 100644
--- a/release/tools/vagrant-virtualbox.conf
+++ b/release/tools/vagrant-virtualbox.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
. ${WORLDDIR}/release/tools/vagrant.conf
@@ -15,5 +14,4 @@ vm_extra_pre_umount () {
# Setup the Vagrant common items
vagrant_common
- rm -f ${DESTDIR}/etc/resolv.conf
}
diff --git a/release/tools/vagrant-vmware.conf b/release/tools/vagrant-vmware.conf
index 4e0f02c0e76c..fff929829222 100644
--- a/release/tools/vagrant-vmware.conf
+++ b/release/tools/vagrant-vmware.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
. ${WORLDDIR}/release/tools/vagrant.conf
@@ -19,5 +18,4 @@ vm_extra_pre_umount () {
# Setup the Vagrant common items
vagrant_common
- rm -f ${DESTDIR}/etc/resolv.conf
}
diff --git a/release/tools/vagrant.conf b/release/tools/vagrant.conf
index ebf69338b7d7..83a72b8e8aac 100644
--- a/release/tools/vagrant.conf
+++ b/release/tools/vagrant.conf
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# The default of 3GB is too small for Vagrant, so override the size here.
@@ -51,12 +50,13 @@ vagrant_common () {
usermod root -h 0
# Configure sudo to allow the vagrant user
- echo 'vagrant ALL=(ALL) NOPASSWD: ALL' >> ${DESTDIR}/usr/local/etc/sudoers
+ echo 'vagrant ALL=(ALL:ALL) NOPASSWD: ALL' >> ${DESTDIR}/usr/local/etc/sudoers
- # Configure the vagrant ssh key
+ # Configure the vagrant ssh keys
mkdir ${DESTDIR}/home/vagrant/.ssh
chmod 700 ${DESTDIR}/home/vagrant/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" > ${DESTDIR}/home/vagrant/.ssh/authorized_keys
+ echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN1YdxBpNlzxDqfJyw/QKow1F+wvG9hXGoqiysfJOn5Y vagrant insecure public key" >> ${DESTDIR}/home/vagrant/.ssh/authorized_keys
chown -R 1001 ${DESTDIR}/home/vagrant/.ssh
chmod 600 ${DESTDIR}/home/vagrant/.ssh/authorized_keys
diff --git a/release/tools/vmimage.subr b/release/tools/vmimage.subr
index 0d9202431822..9a60be57acf3 100644
--- a/release/tools/vmimage.subr
+++ b/release/tools/vmimage.subr
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
#
# Common functions for virtual machine image build scripts.
@@ -39,8 +38,6 @@ cleanup() {
}
vm_create_base() {
- # Creates the UFS root filesystem for the virtual machine disk,
- # written to the formatted disk image with mkimg(1).
mkdir -p ${DESTDIR}
@@ -59,19 +56,18 @@ vm_install_base() {
installworld installkernel distribution || \
err "\n\nCannot install the base system to ${DESTDIR}."
- # Bootstrap etcupdate(8) and mergemaster(8) databases.
+ # Bootstrap etcupdate(8) database.
mkdir -p ${DESTDIR}/var/db/etcupdate
etcupdate extract -B \
-M "TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH}" \
-s ${WORLDDIR} -d ${DESTDIR}/var/db/etcupdate
- sh ${WORLDDIR}/release/scripts/mm-mtree.sh -m ${WORLDDIR} \
- -F "TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH}" \
- -D ${DESTDIR}
echo '# Custom /etc/fstab for FreeBSD VM images' \
> ${DESTDIR}/etc/fstab
- echo "/dev/${ROOTLABEL}/rootfs / ufs rw 1 1" \
- >> ${DESTDIR}/etc/fstab
+ if [ "${VMFS}" != zfs ]; then
+ echo "/dev/${ROOTLABEL}/rootfs / ${VMFS} rw 1 1" \
+ >> ${DESTDIR}/etc/fstab
+ fi
if [ -z "${NOSWAP}" ]; then
echo '/dev/gpt/swapfs none swap sw 0 0' \
>> ${DESTDIR}/etc/fstab
@@ -80,7 +76,18 @@ vm_install_base() {
local hostname
hostname="$(echo $(uname -o) | tr '[:upper:]' '[:lower:]')"
echo "hostname=\"${hostname}\"" >> ${DESTDIR}/etc/rc.conf
+ if [ "${VMFS}" = zfs ]; then
+ echo "zfs_enable=\"YES\"" >> ${DESTDIR}/etc/rc.conf
+ echo "zpool_reguid=\"zroot\"" >> ${DESTDIR}/etc/rc.conf
+ echo "zpool_upgrade=\"zroot\"" >> ${DESTDIR}/etc/rc.conf
+ echo "kern.geom.label.disk_ident.enable=0" >> ${DESTDIR}/boot/loader.conf
+ echo "zfs_load=YES" >> ${DESTDIR}/boot/loader.conf
+ fi
+ return 0
+}
+
+vm_emulation_setup() {
if ! [ -z "${QEMUSTATIC}" ]; then
export EMULATOR=/qemu
cp ${QEMUSTATIC} ${DESTDIR}/${EMULATOR}
@@ -90,8 +97,6 @@ vm_install_base() {
mount -t devfs devfs ${DESTDIR}/dev
chroot ${DESTDIR} ${EMULATOR} /usr/bin/newaliases
chroot ${DESTDIR} ${EMULATOR} /bin/sh /etc/rc.d/ldconfig forcestart
- umount_loop ${DESTDIR}/dev
-
cp /etc/resolv.conf ${DESTDIR}/etc/resolv.conf
return 0
@@ -127,15 +132,12 @@ vm_extra_install_packages() {
if [ -z "${VM_EXTRA_PACKAGES}" ]; then
return 0
fi
- mkdir -p ${DESTDIR}/dev
- mount -t devfs devfs ${DESTDIR}/dev
chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
/usr/sbin/pkg bootstrap -y
for p in ${VM_EXTRA_PACKAGES}; do
chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
/usr/sbin/pkg install -y ${p}
done
- umount_loop ${DESTDIR}/dev
return 0
}
@@ -150,13 +152,16 @@ vm_extra_install_ports() {
vm_extra_pre_umount() {
# Prototype. When overridden, performs additional tasks within the
# virtual machine environment prior to unmounting the filesystem.
- # Note: When overriding this function, removing resolv.conf in the
- # disk image must be included.
+ return 0
+}
+
+vm_emulation_cleanup() {
if ! [ -z "${QEMUSTATIC}" ]; then
rm -f ${DESTDIR}/${EMULATOR}
fi
rm -f ${DESTDIR}/etc/resolv.conf
+ umount_loop ${DESTDIR}/dev
return 0
}
@@ -169,6 +174,41 @@ vm_extra_pkg_rmcache() {
return 0
}
+buildfs() {
+ local md tmppool
+
+ case "${VMFS}" in
+ ufs)
+ makefs ${MAKEFSARGS} -o label=rootfs -o version=2 -o softupdates=1 \
+ ${VMBASE} ${DESTDIR}
+ ;;
+ zfs)
+ makefs -t zfs ${MAKEFSARGS} \
+ -o poolname=zroot -o bootfs=zroot/ROOT/default -o rootpath=/ \
+ -o fs=zroot\;mountpoint=none \
+ -o fs=zroot/ROOT\;mountpoint=none \
+ -o fs=zroot/ROOT/default\;mountpoint=/ \
+ -o fs=zroot/home\;mountpoint=/home \
+ -o fs=zroot/tmp\;mountpoint=/tmp\;exec=on\;setuid=off \
+ -o fs=zroot/usr\;mountpoint=/usr\;canmount=off \
+ -o fs=zroot/usr/ports\;setuid=off \
+ -o fs=zroot/usr/src \
+ -o fs=zroot/usr/obj \
+ -o fs=zroot/var\;mountpoint=/var\;canmount=off \
+ -o fs=zroot/var/audit\;setuid=off\;exec=off \
+ -o fs=zroot/var/crash\;setuid=off\;exec=off \
+ -o fs=zroot/var/log\;setuid=off\;exec=off \
+ -o fs=zroot/var/mail\;atime=on \
+ -o fs=zroot/var/tmp\;setuid=off \
+ ${VMBASE} ${DESTDIR}
+ ;;
+ *)
+ echo "Unexpected VMFS value '${VMFS}'"
+ exit 1
+ ;;
+ esac
+}
+
umount_loop() {
DIR=$1
i=0
@@ -188,8 +228,7 @@ umount_loop() {
}
vm_create_disk() {
- echo "Creating image... Please wait."
- echo
+ local BOOTFILES BOOTPARTSOFFSET FSPARTTYPE X86GPTBOOTFILE
if [ -z "${NOSWAP}" ]; then
SWAPOPT="-p freebsd-swap/swapfs::${SWAPSIZE}"
@@ -199,34 +238,56 @@ vm_create_disk() {
BOOTPARTSOFFSET=":${VM_BOOTPARTSOFFSET}"
fi
+ if [ -n "${CONFIG_DRIVE}" ]; then
+ CONFIG_DRIVE="-p freebsd/config-drive::${CONFIG_DRIVE_SIZE}"
+ fi
+
+ case "${VMFS}" in
+ ufs)
+ FSPARTTYPE=freebsd-ufs
+ X86GPTBOOTFILE=i386/gptboot/gptboot
+ ;;
+ zfs)
+ FSPARTTYPE=freebsd-zfs
+ X86GPTBOOTFILE=i386/gptzfsboot/gptzfsboot
+ ;;
+ *)
+ echo "Unexpected VMFS value '${VMFS}'"
+ return 1
+ ;;
+ esac
+
+ echo "Creating image... Please wait."
+ echo
BOOTFILES="$(env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
WITH_UNIFIED_OBJDIR=yes \
make -C ${WORLDDIR}/stand -V .OBJDIR)"
BOOTFILES="$(realpath ${BOOTFILES})"
+ MAKEFSARGS="-s ${VMSIZE}"
case "${TARGET}:${TARGET_ARCH}" in
amd64:amd64 | i386:i386)
ESP=yes
BOOTPARTS="-b ${BOOTFILES}/i386/pmbr/pmbr \
- -p freebsd-boot/bootfs:=${BOOTFILES}/i386/gptboot/gptboot${BOOTPARTSOFFSET}"
- ROOTFSPART="-p freebsd-ufs/rootfs:=${VMBASE}"
- MAKEFSARGS="-B little"
+ -p freebsd-boot/bootfs:=${BOOTFILES}/${X86GPTBOOTFILE}${BOOTPARTSOFFSET}"
+ ROOTFSPART="-p ${FSPARTTYPE}/rootfs:=${VMBASE}"
+ MAKEFSARGS="$MAKEFSARGS -B little"
;;
- arm64:aarch64 | riscv:riscv64*)
+ arm:armv7 | arm64:aarch64 | riscv:riscv64*)
ESP=yes
BOOTPARTS=
- ROOTFSPART="-p freebsd-ufs/rootfs:=${VMBASE}"
- MAKEFSARGS="-B little"
+ ROOTFSPART="-p ${FSPARTTYPE}/rootfs:=${VMBASE}"
+ MAKEFSARGS="$MAKEFSARGS -B little"
;;
powerpc:powerpc*)
ESP=no
BOOTPARTS="-p prepboot:=${BOOTFILES}/powerpc/boot1.chrp/boot1.elf -a 1"
ROOTFSPART="-p freebsd:=${VMBASE}"
if [ ${TARGET_ARCH} = powerpc64le ]; then
- MAKEFSARGS="-B little"
+ MAKEFSARGS="$MAKEFSARGS -B little"
else
- MAKEFSARGS="-B big"
+ MAKEFSARGS="$MAKEFSARGS -B big"
fi
;;
*)
@@ -239,25 +300,27 @@ vm_create_disk() {
# Create an ESP
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
make_esp_file ${espfilename} ${fat32min} ${BOOTFILES}/efi/loader_lua/loader_lua.efi
- BOOTPARTS="${BOOTPARTS} -p efi/efiesp:=${espfilename}"
+ BOOTPARTS="${BOOTPARTS} -p efi/efiboot0:=${espfilename}"
# Add this to fstab
mkdir -p ${DESTDIR}/boot/efi
- echo "/dev/${ROOTLABEL}/efiesp /boot/efi msdosfs rw 2 2" \
+ echo "/dev/${ROOTLABEL}/efiboot0 /boot/efi msdosfs rw 2 2" \
>> ${DESTDIR}/etc/fstab
fi
echo "Building filesystem... Please wait."
- makefs ${MAKEFSARGS} -o label=rootfs -o version=2 -o softupdates=1 \
- -s ${VMSIZE} ${VMBASE} ${DESTDIR}
+ buildfs
echo "Building final disk image... Please wait."
mkimg -s ${PARTSCHEME} -f ${VMFORMAT} \
${BOOTPARTS} \
${SWAPOPT} \
+ ${CONFIG_DRIVE} \
${ROOTFSPART} \
-o ${VMIMAGE}
+ echo "Disk image ${VMIMAGE} created."
+
if [ ${ESP} = "yes" ]; then
rm ${espfilename}
fi