diff --git a/release/Makefile b/release/Makefile --- a/release/Makefile +++ b/release/Makefile @@ -205,12 +205,16 @@ 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 + cp ${.CURDIR}/../share/bsdinstall/bsdinstall.example ${.TARGET}/usr/share + mkdir ${.TARGET}/bsdinstall_config .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 + echo "./usr/share/bsdinstall.example type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG + echo "./bsdinstall_config type=dir uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG .endif touch ${.TARGET} @@ -240,11 +244,15 @@ 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 + cp ${.CURDIR}/../share/bsdinstall/bsdinstall.example ${.TARGET}/usr/share + mkdir ${.TARGET}/bsdinstall_config 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 + echo "./usr/share/bsdinstall.example type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG + echo "./bsdinstall_config type=dir uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG dvd: packagesystem # Install system @@ -278,12 +286,16 @@ 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 + cp ${.CURDIR}/../share/bsdinstall/bsdinstall.example ${.TARGET}/usr/share + mkdir ${.TARGET}/bsdinstall_config .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 + echo "./usr/share/bsdinstall.example type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG + echo "./bsdinstall_config type=dir uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG .endif touch ${.TARGET} diff --git a/release/amd64/make-memstick.sh b/release/amd64/make-memstick.sh --- a/release/amd64/make-memstick.sh +++ b/release/amd64/make-memstick.sh @@ -43,6 +43,7 @@ fi echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${BASEBITSDIR}/etc/fstab +echo '/dev/msdosfs/INSTALLCFG /bsdinstall_config msdosfs ro,noatime 0 0' >> ${BASEBITSDIR}/etc/fstab echo 'root_rw_mount="NO"' > ${BASEBITSDIR}/etc/rc.conf.local if [ -n "${METALOG}" ]; then metalogfilename=$(mktemp /tmp/metalog.XXXXXX) @@ -67,12 +68,20 @@ make_esp_file ${espfilename} ${fat32min} ${BASEBITSDIR}/boot/loader.efi fi +# Make configuration directory +cfgdirname=$(mktemp -d /tmp/config.XXXXX) +cp ${BASEBITSDIR}/usr/share/bsdinstall.example ${cfgdirname} +makefs $([ -n "${METALOG}" ] && echo -n "" || echo -n "-D") -t msdos -o volume_label=installcfg -o create_size=32m ${2}.config ${cfgdirname} +rm -r ${cfgdirname} + mkimg -s mbr \ -b ${BASEBITSDIR}/boot/mbr \ -p efi:=${espfilename} \ -p freebsd:-"mkimg -s bsd -b ${BASEBITSDIR}/boot/boot -p freebsd-ufs:=${2}.part" \ + -p fat16b:=${2}.config \ -a 2 \ -o ${2} rm ${espfilename} rm ${2}.part +rm ${2}.config diff --git a/release/release.conf b/release/release.conf new file mode 100644 --- /dev/null +++ b/release/release.conf @@ -0,0 +1,116 @@ +#!/bin/sh +# + +## Redefine environment variables here to override prototypes +## defined in release.sh. +#load_chroot_env() { } +#load_target_env() { } +#buildenv_setup() { } + +## Set the directory within which the release will be built. +CHROOTDIR="/usr/obj/release/" + +## Do not explicitly require the devel/git port to be installed. +NOGIT=1 +## Set the version control system host. +GITROOT="https://git.freebsd.org/" +GITSRC="src.git" +GITPORTS="ports.git" + +## Set the src/, ports/, and doc/ branches or tags. +SRCBRANCH="main" +PORTBRANCH="main" + +## Sample configuration for using git from ports. +#GITCMD="/usr/local/bin/git clone -q --branch main" + +## Set to override the default target architecture. +#TARGET="amd64" +#TARGET_ARCH="amd64" +KERNEL="GENERIC-BBR" +## Multiple kernels may be set. +#KERNEL="GENERIC XENHVM" + +## Set to specify a custom make.conf and/or src.conf +#MAKE_CONF="/etc/local/make.conf" +#SRC_CONF="/etc/local/src.conf" + +## Set to use make(1) flags. +#MAKE_FLAGS="-s" + +## Set to use world- and kernel-specific make(1) flags. +#WORLD_FLAGS="-j $(sysctl -n hw.ncpu)" +#KERNEL_FLAGS="-j $(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2 ))" + +## Set miscellaneous 'make release' settings. +NOPORTS=yes +NOSRC=yes +#WITH_DVD= +#WITH_COMPRESSED_IMAGES= + +## Set to '1' to disable multi-threaded xz(1) compression. +#XZ_THREADS=0 + +## Set when building embedded images. +#EMBEDDEDBUILD= + +## Set to a list of ports required to build embedded system-on-chip +## images, such as sysutils/u-boot-rpi. +#EMBEDDEDPORTS= + +## Set to the hardware platform of the target userland. This value +## is passed to make(1) to set the TARGET (value of uname -m) to cross +## build. +#EMBEDDED_TARGET= + +## Set to the machine processor architecture of the target userland. +## This value is passed to make(1) to set the TARGET_ARCH (value of uname -p) +## to cross build. +#EMBEDDED_TARGET_ARCH= + +## Set to skip the chroot environment buildworld/installworld/distribution +## step if it is expected the build environment will exist via alternate +## means. +#CHROOTBUILD_SKIP= + +## Set to a non-empty value skip checkout or update of /usr/src in +## the chroot. This is intended for use when /usr/src already exists. +#SRC_UPDATE_SKIP= + +## Set to a non-empty value skip checkout or update of /usr/ports in +## the chroot. This is intended for use when /usr/ports already exists. +#PORTS_UPDATE_SKIP= + +## Set to pass additional flags to make(1) for the build chroot setup, such +## as TARGET/TARGET_ARCH. +#CHROOT_MAKEENV= + +## Set to a non-empty value to build virtual machine images as part of the +## release build. +WITH_VMIMAGES=yes + +## Set to a non-empty value to compress virtual machine images with xz(1) +## as part of the release build. +#WITH_COMPRESSED_VMIMAGES= + +## If WITH_VMIMAGES is set to a non-empty value, this is the name of the +## file to use for the installed userland/kernel. +#VMBASE="vm" + +## If WITH_VMIMAGES is set to a non-empty value, this is the size of the +## virtual machine disk filesystem. Valid size values are described in +## the makefs(8) manual page. +VMSIZE="20g" + +## If WITH_VMIMAGES is set to a non-empty value, this is a list of disk +## image formats to create. Valid values are listed in the mkimg(1) +## manual page, as well as 'mkimg --formats' output. +VMFORMATS="qcow2" + +## Set to a non-empty value to build virtual machine images for various +## cloud providers as part of the release build. +#WITH_CLOUDWARE= + +## If WITH_CLOUDWARE is set to a non-empty value, this is a list of providers +## to create disk images. +#CLOUDWARE="EC2 GCE OCI VAGRANT-VIRTUALBOX VAGRANT-VMWARE" diff --git a/share/bsdinstall/bsdinstall.example b/share/bsdinstall/bsdinstall.example new file mode 100644 --- /dev/null +++ b/share/bsdinstall/bsdinstall.example @@ -0,0 +1,7 @@ +PARTITIONS=DEFAULT +DISTRIBUTIONS="kernel.txz base.txz" + +#!/bin/sh +sysrc ifconfig_DEFAULT=DHCP +sysrc sshd_enable=YES +pkg install puppet diff --git a/usr.sbin/bsdinstall/startbsdinstall b/usr.sbin/bsdinstall/startbsdinstall --- a/usr.sbin/bsdinstall/startbsdinstall +++ b/usr.sbin/bsdinstall/startbsdinstall @@ -47,18 +47,22 @@ # Query terminal size; useful for serial lines. resizewin -z -if [ -f /etc/installerconfig ]; then +for config_file in "/etc/installerconfig" "/bsdinstall_config/installerconfig"; +do + if [ ! -f ${config_file} ]; then + continue + fi if [ "$1" != "primary" ]; then bsddialog --backtitle "${OSNAME} Installer" --title "Installing" --msgbox "${OSNAME} is being installed from a script; please use the primary console." 0 0 . "$0" - elif bsdinstall script /etc/installerconfig; then + elif bsdinstall script ${config_file}; then bsddialog --backtitle "${OSNAME} Installer" --title "Complete" --no-cancel --ok-label "Reboot" --pause "Installation of ${OSNAME} complete! Rebooting in 10 seconds" 10 30 10 reboot else bsddialog --backtitle "${OSNAME} Installer" --title "Error" --textbox /tmp/bsdinstall_log 0 0 fi exit -fi +done bsddialog --backtitle "${OSNAME} Installer" --title "Welcome" --extra-button --extra-label "Shell" --ok-label "Install" --cancel-label "Live System" --yesno "Welcome to ${OSNAME}! Would you like to begin an installation or use the live system?" 0 0