mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 12:54:27 +00:00
release: Support -DNO_ROOT image building
This requires a bunch of METALOG mangling to include the files we inject into the tree. The mkisoimages.sh and make-memstick.sh scripts are now called with the current directory inside the tree so that the relative paths in the METALOG match up with the current directory. The scripts do not require this when not using a METALOG, but for simplicity we always do so. The Makefile mangles the real METALOG created from the install, as those files are shared across all uses of the tree, but the shell scripts create a temporary copy of the METALOG that they mangle as their tree modifications are specific to that image. We also need to pass -D to makefs to turn any duplicate METALOG entry errors into warnings, as we have many (harmless) instances of those. Whilst dvd1.iso should work, the !NOPKG code will need more work to support this. All media will also lack mergemaster and etcupdate trees, since more work is needed to add -DNO_ROOT modes to them. Users of install media built this way will have to manually bootstrap them. Reviewed by: brooks, gjb Differential Revision: https://reviews.freebsd.org/D33999
This commit is contained in:
parent
045c8f5264
commit
13cb004130
|
@ -117,12 +117,15 @@ clean: beforeclean
|
||||||
base.txz:
|
base.txz:
|
||||||
mkdir -p ${DISTDIR}
|
mkdir -p ${DISTDIR}
|
||||||
cd ${WORLDDIR} && ${IMAKE} distributeworld DISTDIR=${.OBJDIR}/${DISTDIR}
|
cd ${WORLDDIR} && ${IMAKE} distributeworld DISTDIR=${.OBJDIR}/${DISTDIR}
|
||||||
|
# TODO: Add NO_ROOT mode to mm-tree.sh and etcupdate
|
||||||
|
.if !defined(NO_ROOT)
|
||||||
# Set up mergemaster root database
|
# Set up mergemaster root database
|
||||||
sh ${.CURDIR}/scripts/mm-mtree.sh -m ${WORLDDIR} -F \
|
sh ${.CURDIR}/scripts/mm-mtree.sh -m ${WORLDDIR} -F \
|
||||||
"TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET} ${.MAKE.JOBS:D-j${.MAKE.JOBS}}" \
|
"TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET} ${.MAKE.JOBS:D-j${.MAKE.JOBS}}" \
|
||||||
-D "${.OBJDIR}/${DISTDIR}/base"
|
-D "${.OBJDIR}/${DISTDIR}/base"
|
||||||
etcupdate extract -B -M "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" \
|
etcupdate extract -B -M "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" \
|
||||||
-s ${WORLDDIR} -d "${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate"
|
-s ${WORLDDIR} -d "${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate"
|
||||||
|
.endif
|
||||||
# Package all components
|
# Package all components
|
||||||
cd ${WORLDDIR} && ${IMAKE} packageworld DISTDIR=${.OBJDIR}/${DISTDIR}
|
cd ${WORLDDIR} && ${IMAKE} packageworld DISTDIR=${.OBJDIR}/${DISTDIR}
|
||||||
mv ${DISTDIR}/*.txz .
|
mv ${DISTDIR}/*.txz .
|
||||||
|
@ -163,6 +166,12 @@ disc1: packagesystem
|
||||||
for dist in MANIFEST $$(ls *.txz | grep -vE -- '(base|lib32)-dbg'); \
|
for dist in MANIFEST $$(ls *.txz | grep -vE -- '(base|lib32)-dbg'); \
|
||||||
do cp $${dist} ${.TARGET}/usr/freebsd-dist; \
|
do cp $${dist} ${.TARGET}/usr/freebsd-dist; \
|
||||||
done
|
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|lib32)-dbg'); \
|
||||||
|
do echo "./usr/freebsd-dist/$${dist} type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG; \
|
||||||
|
done
|
||||||
|
.endif
|
||||||
# Set up installation environment
|
# Set up installation environment
|
||||||
ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
|
ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
|
||||||
echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf
|
echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf
|
||||||
|
@ -171,6 +180,13 @@ disc1: packagesystem
|
||||||
echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
|
echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
|
||||||
echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
|
echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
|
||||||
cp ${.CURDIR}/rc.local ${.TARGET}/etc
|
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}
|
touch ${.TARGET}
|
||||||
|
|
||||||
bootonly: packagesystem
|
bootonly: packagesystem
|
||||||
|
@ -187,6 +203,10 @@ bootonly: packagesystem
|
||||||
# Copy manifest only (no distfiles) to get checksums
|
# Copy manifest only (no distfiles) to get checksums
|
||||||
mkdir -p ${.TARGET}/usr/freebsd-dist
|
mkdir -p ${.TARGET}/usr/freebsd-dist
|
||||||
cp MANIFEST ${.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
|
# Set up installation environment
|
||||||
ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
|
ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
|
||||||
echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf
|
echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf
|
||||||
|
@ -195,6 +215,13 @@ bootonly: packagesystem
|
||||||
echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
|
echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
|
||||||
echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
|
echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
|
||||||
cp ${.CURDIR}/rc.local ${.TARGET}/etc
|
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
|
dvd: packagesystem
|
||||||
# Install system
|
# Install system
|
||||||
|
@ -208,6 +235,12 @@ dvd: packagesystem
|
||||||
for dist in MANIFEST $$(ls *.txz | grep -v -- '(base|lib32)-dbg'); \
|
for dist in MANIFEST $$(ls *.txz | grep -v -- '(base|lib32)-dbg'); \
|
||||||
do cp $${dist} ${.TARGET}/usr/freebsd-dist; \
|
do cp $${dist} ${.TARGET}/usr/freebsd-dist; \
|
||||||
done
|
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|lib32)-dbg'); \
|
||||||
|
do echo "./usr/freebsd-dist/$${dist} type=file uname=root gname=wheel mode=0644" >> ${.TARGET}/METALOG; \
|
||||||
|
done
|
||||||
|
.endif
|
||||||
# Set up installation environment
|
# Set up installation environment
|
||||||
ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
|
ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf
|
||||||
echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf
|
echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf
|
||||||
|
@ -216,31 +249,39 @@ dvd: packagesystem
|
||||||
echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
|
echo vfs.mountroot.timeout=\"10\" >> ${.TARGET}/boot/loader.conf
|
||||||
echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
|
echo kernels_autodetect=\"NO\" >> ${.TARGET}/boot/loader.conf
|
||||||
cp ${.CURDIR}/rc.local ${.TARGET}/etc
|
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}
|
touch ${.TARGET}
|
||||||
|
|
||||||
release.iso: disc1.iso
|
release.iso: disc1.iso
|
||||||
disc1.iso: disc1
|
disc1.iso: disc1
|
||||||
sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_CD ${.TARGET} disc1 ${XTRADIR}
|
cd disc1 && sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_CD ../${.TARGET} .${NO_ROOT:D/METALOG} ${XTRADIR}
|
||||||
|
|
||||||
dvd1.iso: dvd pkg-stage
|
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
|
bootonly.iso: bootonly
|
||||||
sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_BO ${.TARGET} bootonly ${XTRADIR}
|
cd bootonly && sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_BO ../${.TARGET} .${NO_ROOT:D/METALOG} ${XTRADIR}
|
||||||
|
|
||||||
memstick: memstick.img
|
memstick: memstick.img
|
||||||
memstick.img: disc1
|
memstick.img: disc1
|
||||||
sh ${.CURDIR}/${TARGET}/make-memstick.sh disc1 ${.TARGET}
|
cd disc1 && sh ${.CURDIR}/${TARGET}/make-memstick.sh .${NO_ROOT:D/METALOG} ../${.TARGET}
|
||||||
|
|
||||||
mini-memstick: mini-memstick.img
|
mini-memstick: mini-memstick.img
|
||||||
mini-memstick.img: bootonly
|
mini-memstick.img: bootonly
|
||||||
sh ${.CURDIR}/${TARGET}/make-memstick.sh bootonly ${.TARGET}
|
cd bootonly && sh ${.CURDIR}/${TARGET}/make-memstick.sh .${NO_ROOT:D/METALOG} ../${.TARGET}
|
||||||
|
|
||||||
packagesystem: base.txz kernel.txz ${EXTRA_PACKAGES}
|
packagesystem: base.txz kernel.txz ${EXTRA_PACKAGES}
|
||||||
sh ${.CURDIR}/scripts/make-manifest.sh *.txz > MANIFEST
|
sh ${.CURDIR}/scripts/make-manifest.sh *.txz > MANIFEST
|
||||||
touch ${.TARGET}
|
touch ${.TARGET}
|
||||||
|
|
||||||
pkg-stage:
|
pkg-stage:
|
||||||
|
# TODO: Support for -DNO_ROOT
|
||||||
.if !defined(NOPKG) || empty(NOPKG)
|
.if !defined(NOPKG) || empty(NOPKG)
|
||||||
env PORTSDIR=${PORTSDIR} REPOS_DIR=${.CURDIR}/pkg_repos/ \
|
env PORTSDIR=${PORTSDIR} REPOS_DIR=${.CURDIR}/pkg_repos/ \
|
||||||
sh ${.CURDIR}/scripts/pkg-stage.sh
|
sh ${.CURDIR}/scripts/pkg-stage.sh
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
# clean up after itself very well for error conditions on purpose so the
|
# clean up after itself very well for error conditions on purpose so the
|
||||||
# problem can be diagnosed (full filesystem most likely but ...).
|
# 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$
|
# $FreeBSD$
|
||||||
#
|
#
|
||||||
|
@ -19,12 +19,20 @@ PATH=/bin:/usr/bin:/sbin:/usr/sbin
|
||||||
export PATH
|
export PATH
|
||||||
|
|
||||||
if [ $# -ne 2 ]; then
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -d ${1} ]; then
|
MAKEFSARG=${1}
|
||||||
echo "${1} must be a directory"
|
|
||||||
|
if [ -f ${MAKEFSARG} ]; then
|
||||||
|
BASEBITSDIR=`dirname ${MAKEFSARG}`
|
||||||
|
METALOG=${MAKEFSARG}
|
||||||
|
elif [ -d ${MAKEFSARG} ]; then
|
||||||
|
BASEBITSDIR=${MAKEFSARG}
|
||||||
|
METALOG=
|
||||||
|
else
|
||||||
|
echo "${MAKEFSARG} must exist"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -33,20 +41,30 @@ if [ -e ${2} ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${1}/etc/fstab
|
echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${BASEBITSDIR}/etc/fstab
|
||||||
echo 'root_rw_mount="NO"' > ${1}/etc/rc.conf.local
|
echo 'root_rw_mount="NO"' > ${BASEBITSDIR}/etc/rc.conf.local
|
||||||
makefs -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${1}
|
if [ -n "${METALOG}" ]; then
|
||||||
rm ${1}/etc/fstab
|
metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
|
||||||
rm ${1}/etc/rc.conf.local
|
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 -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.
|
# Make an ESP in a file.
|
||||||
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
|
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 \
|
mkimg -s mbr \
|
||||||
-b ${1}/boot/mbr \
|
-b ${BASEBITSDIR}/boot/mbr \
|
||||||
-p efi:=${espfilename} \
|
-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 \
|
-a 2 \
|
||||||
-o ${2}
|
-o ${2}
|
||||||
rm ${espfilename}
|
rm ${espfilename}
|
||||||
|
|
|
@ -41,7 +41,23 @@ if [ -z $MKIMG ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$1" = "-b" ]; then
|
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.
|
# This is highly x86-centric and will be used directly below.
|
||||||
bootable="-o bootimage=i386;$BASEBITSDIR/boot/cdboot -o no-emul-boot"
|
bootable="-o bootimage=i386;$BASEBITSDIR/boot/cdboot -o no-emul-boot"
|
||||||
|
|
||||||
|
@ -54,7 +70,6 @@ if [ "$1" = "-b" ]; then
|
||||||
|
|
||||||
shift
|
shift
|
||||||
else
|
else
|
||||||
BASEBITSDIR="$3"
|
|
||||||
bootable=""
|
bootable=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -65,12 +80,23 @@ fi
|
||||||
|
|
||||||
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
|
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
|
||||||
NAME="$1"; shift
|
NAME="$1"; shift
|
||||||
|
# MAKEFSARG extracted already
|
||||||
|
shift
|
||||||
|
|
||||||
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
|
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
|
||||||
echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$BASEBITSDIR/etc/fstab"
|
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 -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$MAKEFSARG" "$@"
|
||||||
rm -f "$BASEBITSDIR/etc/fstab"
|
rm -f "$BASEBITSDIR/etc/fstab"
|
||||||
rm -f ${espfilename}
|
rm -f ${espfilename}
|
||||||
|
if [ -n "${METALOG}" ]; then
|
||||||
|
rm ${metalogfilename}
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$bootable" != "" ]; then
|
if [ "$bootable" != "" ]; then
|
||||||
# Look for the EFI System Partition image we dropped in the ISO image.
|
# Look for the EFI System Partition image we dropped in the ISO image.
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
# clean up after itself very well for error conditions on purpose so the
|
# clean up after itself very well for error conditions on purpose so the
|
||||||
# problem can be diagnosed (full filesystem most likely but ...).
|
# 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$
|
# $FreeBSD$
|
||||||
#
|
#
|
||||||
|
@ -19,12 +19,20 @@ scriptdir=$(dirname $(realpath $0))
|
||||||
. ${scriptdir}/../../tools/boot/install-boot.sh
|
. ${scriptdir}/../../tools/boot/install-boot.sh
|
||||||
|
|
||||||
if [ $# -ne 2 ]; then
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -d ${1} ]; then
|
MAKEFSARG=${1}
|
||||||
echo "${1} must be a directory"
|
|
||||||
|
if [ -f ${MAKEFSARG} ]; then
|
||||||
|
BASEBITSDIR=`dirname ${MAKEFSARG}`
|
||||||
|
METALOG=${MAKEFSARG}
|
||||||
|
elif [ -d ${MAKEFSARG} ]; then
|
||||||
|
BASEBITSDIR=${MAKEFSARG}
|
||||||
|
METALOG=
|
||||||
|
else
|
||||||
|
echo "${MAKEFSARG} must exist"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -33,15 +41,25 @@ if [ -e ${2} ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${1}/etc/fstab
|
echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${BASEBITSDIR}/etc/fstab
|
||||||
echo 'root_rw_mount="NO"' > ${1}/etc/rc.conf.local
|
echo 'root_rw_mount="NO"' > ${BASEBITSDIR}/etc/rc.conf.local
|
||||||
makefs -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${1}
|
if [ -n "${METALOG}" ]; then
|
||||||
rm ${1}/etc/fstab
|
metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
|
||||||
rm ${1}/etc/rc.conf.local
|
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 -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.
|
# Make an ESP in a file.
|
||||||
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
|
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 \
|
mkimg -s gpt \
|
||||||
-p efi:=${espfilename} \
|
-p efi:=${espfilename} \
|
||||||
|
|
|
@ -37,8 +37,23 @@ if [ -z $MKIMG ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$1" = "-b" ]; then
|
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.
|
# Make an EFI system partition.
|
||||||
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
|
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
|
||||||
# ESP file size in KB.
|
# ESP file size in KB.
|
||||||
|
@ -49,7 +64,6 @@ if [ "$1" = "-b" ]; then
|
||||||
|
|
||||||
shift
|
shift
|
||||||
else
|
else
|
||||||
BASEBITSDIR="$3"
|
|
||||||
bootable=""
|
bootable=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -60,12 +74,23 @@ fi
|
||||||
|
|
||||||
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
|
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
|
||||||
NAME="$1"; shift
|
NAME="$1"; shift
|
||||||
|
# MAKEFSARG extracted already
|
||||||
|
shift
|
||||||
|
|
||||||
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
|
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
|
||||||
echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$BASEBITSDIR/etc/fstab"
|
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 -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$MAKEFSARG" "$@"
|
||||||
rm -f "$BASEBITSDIR/etc/fstab"
|
rm -f "$BASEBITSDIR/etc/fstab"
|
||||||
rm -f ${espfilename}
|
rm -f ${espfilename}
|
||||||
|
if [ -n "${METALOG}" ]; then
|
||||||
|
rm ${metalogfilename}
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$bootable" != "" ]; then
|
if [ "$bootable" != "" ]; then
|
||||||
# Look for the EFI System Partition image we dropped in the ISO image.
|
# Look for the EFI System Partition image we dropped in the ISO image.
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
# clean up after itself very well for error conditions on purpose so the
|
# clean up after itself very well for error conditions on purpose so the
|
||||||
# problem can be diagnosed (full filesystem most likely but ...).
|
# 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$
|
# $FreeBSD$
|
||||||
#
|
#
|
||||||
|
@ -16,12 +16,20 @@ PATH=/bin:/usr/bin:/sbin:/usr/sbin
|
||||||
export PATH
|
export PATH
|
||||||
|
|
||||||
if [ $# -ne 2 ]; then
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -d ${1} ]; then
|
MAKEFSARG=${1}
|
||||||
echo "${1} must be a directory"
|
|
||||||
|
if [ -f ${MAKEFSARG} ]; then
|
||||||
|
BASEBITSDIR=`dirname ${MAKEFSARG}`
|
||||||
|
METALOG=${MAKEFSARG}
|
||||||
|
elif [ -d ${MAKEFSARG} ]; then
|
||||||
|
BASEBITSDIR=${MAKEFSARG}
|
||||||
|
METALOG=
|
||||||
|
else
|
||||||
|
echo "${MAKEFSARG} must exist"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -30,15 +38,25 @@ if [ -e ${2} ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${1}/etc/fstab
|
echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${BASEBITSDIR}/etc/fstab
|
||||||
echo 'root_rw_mount="NO"' > ${1}/etc/rc.conf.local
|
echo 'root_rw_mount="NO"' > ${BASEBITSDIR}/etc/rc.conf.local
|
||||||
makefs -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${1}
|
if [ -n "${METALOG}" ]; then
|
||||||
rm ${1}/etc/fstab
|
metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
|
||||||
rm ${1}/etc/rc.conf.local
|
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 -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 \
|
mkimg -s mbr \
|
||||||
-b ${1}/boot/mbr \
|
-b ${BASEBITSDIR}/boot/mbr \
|
||||||
-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" \
|
||||||
-o ${2}
|
-o ${2}
|
||||||
rm ${2}.part
|
rm ${2}.part
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,26 @@
|
||||||
|
|
||||||
set -e
|
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
|
if [ "$1" = "-b" ]; then
|
||||||
# This is highly x86-centric and will be used directly below.
|
# 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
|
shift
|
||||||
else
|
else
|
||||||
bootable=""
|
bootable=""
|
||||||
|
@ -40,8 +57,19 @@ fi
|
||||||
|
|
||||||
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
|
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
|
||||||
NAME="$1"; shift
|
NAME="$1"; shift
|
||||||
|
# MAKEFSARG extracted already
|
||||||
|
shift
|
||||||
|
|
||||||
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
|
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
|
||||||
echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$1/etc/fstab"
|
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
|
||||||
rm -f "$1/etc/fstab"
|
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 -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
|
||||||
|
|
|
@ -25,6 +25,23 @@
|
||||||
|
|
||||||
set -e
|
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
|
if [ "$1" = "-b" ]; then
|
||||||
bootable=1
|
bootable=1
|
||||||
shift
|
shift
|
||||||
|
@ -39,6 +56,14 @@ fi
|
||||||
|
|
||||||
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
|
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
|
||||||
NAME="$1"; 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
|
if [ -n "$bootable" ]; then
|
||||||
echo "Building bootable disc"
|
echo "Building bootable disc"
|
||||||
|
@ -48,14 +73,14 @@ if [ -n "$bootable" ]; then
|
||||||
bzip2 -d /tmp/hfs-boot-block.bz2
|
bzip2 -d /tmp/hfs-boot-block.bz2
|
||||||
OFFSET=$(hd /tmp/hfs-boot-block | grep 'Loader START' | cut -f 1 -d ' ')
|
OFFSET=$(hd /tmp/hfs-boot-block | grep 'Loader START' | cut -f 1 -d ' ')
|
||||||
OFFSET=0x$(echo 0x$OFFSET | awk '{printf("%x\n",$1/512);}')
|
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=/tmp/hfs-boot-block seek=$OFFSET conv=notrunc
|
||||||
|
|
||||||
bootable="-o bootimage=macppc;/tmp/hfs-boot-block -o no-emul-boot"
|
bootable="-o bootimage=macppc;/tmp/hfs-boot-block -o no-emul-boot"
|
||||||
|
|
||||||
# pSeries/PAPR boot code
|
# pSeries/PAPR boot code
|
||||||
mkdir -p "$1/ppc/chrp"
|
mkdir -p "$BASEBITSDIR/ppc/chrp"
|
||||||
cp "$1/boot/loader" "$1/ppc/chrp"
|
cp "$BASEBITSDIR/boot/loader" "$BASEBITSDIR/ppc/chrp"
|
||||||
cat > "$1/ppc/bootinfo.txt" << EOF
|
cat > "$BASEBITSDIR/ppc/bootinfo.txt" << EOF
|
||||||
<chrp-boot>
|
<chrp-boot>
|
||||||
<description>FreeBSD Install</description>
|
<description>FreeBSD Install</description>
|
||||||
<os-name>FreeBSD</os-name>
|
<os-name>FreeBSD</os-name>
|
||||||
|
@ -63,14 +88,29 @@ if [ -n "$bootable" ]; then
|
||||||
</chrp-boot>
|
</chrp-boot>
|
||||||
EOF
|
EOF
|
||||||
bootable="$bootable -o chrp-boot"
|
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
|
# 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
|
fi
|
||||||
|
|
||||||
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
|
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
|
||||||
echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$1/etc/fstab"
|
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
|
||||||
rm -f "$1/etc/fstab"
|
echo "./etc/fstab type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
|
||||||
|
fi
|
||||||
|
makefs -D -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$MAKEFSARG" "$@"
|
||||||
|
rm -f "$BASEBITSDIR/etc/fstab"
|
||||||
rm -f /tmp/hfs-boot-block
|
rm -f /tmp/hfs-boot-block
|
||||||
rm -rf "$1/ppc"
|
rm -rf "$BASEBITSDIR/ppc"
|
||||||
|
if [ -n "${METALOG}" ]; then
|
||||||
|
rm ${metalogfilename}
|
||||||
|
fi
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
# clean up after itself very well for error conditions on purpose so the
|
# clean up after itself very well for error conditions on purpose so the
|
||||||
# problem can be diagnosed (full filesystem most likely but ...).
|
# 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$
|
# $FreeBSD$
|
||||||
#
|
#
|
||||||
|
@ -19,12 +19,20 @@ scriptdir=$(dirname $(realpath $0))
|
||||||
. ${scriptdir}/../../tools/boot/install-boot.sh
|
. ${scriptdir}/../../tools/boot/install-boot.sh
|
||||||
|
|
||||||
if [ $# -ne 2 ]; then
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -d ${1} ]; then
|
MAKEFSARG=${1}
|
||||||
echo "${1} must be a directory"
|
|
||||||
|
if [ -f ${MAKEFSARG} ]; then
|
||||||
|
BASEBITSDIR=`dirname ${MAKEFSARG}`
|
||||||
|
METALOG=${MAKEFSARG}
|
||||||
|
elif [ -d ${MAKEFSARG} ]; then
|
||||||
|
BASEBITSDIR=${MAKEFSARG}
|
||||||
|
METALOG=
|
||||||
|
else
|
||||||
|
echo "${MAKEFSARG} must exist"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -33,15 +41,25 @@ if [ -e ${2} ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${1}/etc/fstab
|
echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${BASEBITSDIR}/etc/fstab
|
||||||
echo 'root_rw_mount="NO"' > ${1}/etc/rc.conf.local
|
echo 'root_rw_mount="NO"' > ${BASEBITSDIR}/etc/rc.conf.local
|
||||||
makefs -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${1}
|
if [ -n "${METALOG}" ]; then
|
||||||
rm ${1}/etc/fstab
|
metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
|
||||||
rm ${1}/etc/rc.conf.local
|
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 -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.
|
# Make an ESP in a file.
|
||||||
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
|
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 \
|
mkimg -s gpt \
|
||||||
-p efi:=${espfilename} \
|
-p efi:=${espfilename} \
|
||||||
|
|
|
@ -37,8 +37,23 @@ if [ -z $MKIMG ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$1" = "-b" ]; then
|
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.
|
# Make an EFI system partition.
|
||||||
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
|
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
|
||||||
# ESP file size in KB.
|
# ESP file size in KB.
|
||||||
|
@ -49,7 +64,6 @@ if [ "$1" = "-b" ]; then
|
||||||
|
|
||||||
shift
|
shift
|
||||||
else
|
else
|
||||||
BASEBITSDIR="$3"
|
|
||||||
bootable=""
|
bootable=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -60,12 +74,23 @@ fi
|
||||||
|
|
||||||
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
|
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
|
||||||
NAME="$1"; shift
|
NAME="$1"; shift
|
||||||
|
# MAKEFSARG extracted already
|
||||||
|
shift
|
||||||
|
|
||||||
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
|
publisher="The FreeBSD Project. https://www.FreeBSD.org/"
|
||||||
echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$BASEBITSDIR/etc/fstab"
|
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 -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$MAKEFSARG" "$@"
|
||||||
rm -f "$BASEBITSDIR/etc/fstab"
|
rm -f "$BASEBITSDIR/etc/fstab"
|
||||||
rm -f ${espfilename}
|
rm -f ${espfilename}
|
||||||
|
if [ -n "${METALOG}" ]; then
|
||||||
|
rm ${metalogfilename}
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$bootable" != "" ]; then
|
if [ "$bootable" != "" ]; then
|
||||||
# Look for the EFI System Partition image we dropped in the ISO image.
|
# Look for the EFI System Partition image we dropped in the ISO image.
|
||||||
|
|
Loading…
Reference in a new issue