diff options
Diffstat (limited to 'release')
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 |