Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F149646768
D48793.1790637204.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
8 KB
Referenced Files
None
Subscribers
None
D48793.1790637204.diff
View Options
diff --git a/tools/tools/nanobsd/defaults.sh b/tools/tools/nanobsd/defaults.sh
--- a/tools/tools/nanobsd/defaults.sh
+++ b/tools/tools/nanobsd/defaults.sh
@@ -192,9 +192,11 @@
# Directory to populate /cfg from
NANO_CFGDIR=""
+NANO_METALOG_CFG=""
# Directory to populate /data from
NANO_DATADIR=""
+NANO_METALOG_DATA=""
# We don't need SRCCONF or SRC_ENV_CONF. NanoBSD puts everything we
# need for the build in files included with __MAKE_CONF. Override in your
@@ -356,6 +358,10 @@
nano_global_make_env
echo "${CONF_WORLD}"
echo "${CONF_BUILD}"
+ if [ -n "${NANO_NOPRIV_BUILD}" ]; then
+ echo NO_ROOT=true
+ echo METALOG="${NANO_METALOG}"
+ fi
) > ${NANO_MAKE_CONF_BUILD}
}
@@ -595,15 +601,28 @@
# link /$d under /conf
# we use hard links so we have them both places.
# the files in /$d will be hidden by the mount.
- mkdir -p conf/base/$d conf/default/$d
+ tgt_dir conf/base/$d conf/default/$d
find $d -print | cpio ${CPIO_SYMLINK} -dumpl conf/base/
+ if [ -n "$NANO_METALOG" ]; then
+ grep "^.\/${d}\/" "${NANO_METALOG}" |
+ sed -e "s=^./${d}=./conf/base/${d}=g" |
+ sort | uniq >> "${NANO_METALOG}.conf"
+ fi
done
+ if [ -n "$NANO_METALOG" ]; then
+ cat "${NANO_METALOG}.conf" >> "${NANO_METALOG}"
+ rm -f "${NANO_METALOG}.conf"
+ fi
+
echo "$NANO_RAM_ETCSIZE" > conf/base/etc/md_size
echo "$NANO_RAM_TMPVARSIZE" > conf/base/var/md_size
+ tgt_touch conf/base/etc/md_size
+ tgt_touch conf/base/var/md_size
# pick up config files from the special partition
echo "mount -o ro /dev/${NANO_DRIVE}${NANO_SLICE_CFG}" > conf/default/etc/remount
+ tgt_touch conf/default/etc/remount
# Put /tmp on the /var ramdisk (could be symlink already)
tgt_dir2symlink tmp var/tmp 1777
@@ -660,13 +679,15 @@
# save config file for scripts
echo "NANO_DRIVE=${NANO_DRIVE}" > etc/nanobsd.conf
+ tgt_touch etc/nanobsd.conf
echo "/dev/${NANO_DRIVE}${NANO_ROOT} / ufs ro 1 1" > etc/fstab
echo "/dev/${NANO_DRIVE}${NANO_SLICE_CFG} /cfg ufs rw,noauto 2 2" >> etc/fstab
- mkdir -p cfg
+ tgt_touch etc/fstab
+ tgt_dir cfg
# Create directory for eventual /usr/local/etc contents
- mkdir -p etc/local
+ tgt_dir etc/local
)
}
@@ -883,6 +904,8 @@
if [ -n "${NANO_CUST_FILES_MTREE}" -a -f ${NANO_CUST_FILES_MTREE} ]; then
CR "mtree -eiU -p /" <${NANO_CUST_FILES_MTREE}
fi
+
+ tgt_touch $(find * -type f)
)
#######################################################################
@@ -995,7 +1018,7 @@
usage() {
(
- echo "Usage: $0 [-BbfhIiKknpqvWwX] [-c config_file]"
+ echo "Usage: $0 [-BbfhIiKknpqUvWwX] [-c config_file]"
echo " -B suppress installs (both kernel and world)"
echo " -b suppress builds (both kernel and world)"
echo " -c specify config file"
@@ -1008,6 +1031,7 @@
echo " -n add -DNO_CLEAN to buildworld, buildkernel, etc"
echo " -p suppress preparing the image"
echo " -q make output more quiet"
+ echo " -U add -DNO_ROOT to build without root privileges"
echo " -v make output more verbose"
echo " -W suppress installworld"
echo " -w suppress buildworld"
@@ -1039,6 +1063,9 @@
if ! $do_clean; then
NANO_PMAKE="${NANO_PMAKE} -DNO_CLEAN"
fi
+ if ! $do_root; then
+ NANO_PMAKE="${NANO_PMAKE} -DNO_ROOT"
+ fi
NANO_MAKE_CONF_BUILD=${MAKEOBJDIRPREFIX}/make.conf.build
NANO_MAKE_CONF_INSTALL=${NANO_OBJ}/make.conf.install
@@ -1049,8 +1076,9 @@
[ ! -d "${NANO_TOOLS}" ] && [ -d "${NANO_SRC}/${NANO_TOOLS}" ] && \
NANO_TOOLS="${NANO_SRC}/${NANO_TOOLS}" || true
- [ -n "${NANO_NOPRIV_BUILD}" ] && [ -z "${NANO_METALOG}" ] && \
- NANO_METALOG=${NANO_OBJ}/_.metalog || true
+ if [ -n "${NANO_NOPRIV_BUILD}" ] && [ -z "${NANO_METALOG}" ]; then
+ NANO_METALOG=${NANO_OBJ}/_.metalog
+ fi
NANO_STARTTIME=`date +%s`
: ${NANO_TIMESTAMP:=${NANO_STARTTIME}}
diff --git a/tools/tools/nanobsd/legacy.sh b/tools/tools/nanobsd/legacy.sh
--- a/tools/tools/nanobsd/legacy.sh
+++ b/tools/tools/nanobsd/legacy.sh
@@ -155,6 +155,33 @@
) > ${NANO_OBJ}/_.cs 2>&1
}
+_create_code_slice ( ) (
+ pprint 2 "build code slice"
+ pprint 3 "log: ${NANO_OBJ}/_.cs"
+
+ (
+ IMG=${NANO_DISKIMGDIR}/_.disk.image
+ CODE_SIZE=$(head -n 1 "${NANO_LOG}/_.partitioning" | awk '{ print $2 }')
+ CODE_SIZE=$(_xxx_adjust_code_size "$CODE_SIZE")
+
+ echo "Writing code image..."
+ if [ -f "${NANO_WORLDDIR}/boot/boot" ]; then
+ echo "Making bootable partition"
+ bootcode="-b ${NANO_WORLDDIR}/boot/boot"
+ else
+ echo "Partition will not be bootable"
+ fi
+ nano_makefs "-DxZ ${NANO_MAKEFS} -o minfree=0,optimization=space" \
+ "${NANO_METALOG}" "${CODE_SIZE}" "${NANO_OBJ}/_.disk.part" \
+ "${NANO_WORLDDIR}"
+ mkimg -s bsd \
+ ${bootcode} \
+ -p freebsd-ufs:="${NANO_OBJ}/_.disk.part" \
+ -o "${NANO_DISKIMGDIR}/_.disk.image"
+ rm -f "${NANO_OBJ}/_.disk.part"
+
+ ) > ${NANO_OBJ}/_.cs 2>&1
+)
create_diskimage() {
pprint 2 "build diskimage"
@@ -255,3 +282,76 @@
) > ${NANO_LOG}/_.di 2>&1
}
+
+_create_diskimage() {
+ pprint 2 "build diskimage"
+ pprint 3 "log: ${NANO_OBJ}/_.di"
+
+ (
+ local altroot bootloader cfgimage dataimage diskimage
+
+ CODE_SIZE=$(head -n 1 "${NANO_LOG}/_.partitioning" | awk '{ print $2 }')
+ CODE_SIZE=$(_xxx_adjust_code_size "$CODE_SIZE")
+ IMG=${NANO_DISKIMGDIR}/${NANO_IMGNAME}
+
+ if [ -f "${NANO_WORLDDIR}/${NANO_BOOTLOADER}" ]; then
+ bootloader="-b ${NANO_WORLDDIR}/${NANO_BOOTLOADER}"
+ else
+ echo "Image will not be bootable"
+ fi
+
+ diskimage="-p freebsd:=${NANO_DISKIMGDIR}/_.disk.image"
+
+ if [ "$NANO_IMAGES" -gt 1 ] && [ "$NANO_INIT_IMG2" -gt 0 ] ; then
+ echo "Duplicating to second image..."
+ tgt_switch_root_fstab "${NANO_SLICE_ROOT}" "${NANO_SLICE_ALTROOT}"
+ nano_makefs "-DxZ ${NANO_MAKEFS} -o minfree=0,optimization=space" \
+ "${NANO_METALOG}" "${CODE_SIZE}" "${NANO_OBJ}/_.altroot.part" \
+ "${NANO_WORLDDIR}"
+ tgt_switch_root_fstab "${NANO_SLICE_ALTROOT}" "${NANO_SLICE_ROOT}"
+ if [ -f "${NANO_WORLDDIR}/boot/boot" ]; then
+ bootcode="-b ${NANO_WORLDDIR}/boot/boot"
+ fi
+ mkimg -s bsd \
+ ${bootcode} \
+ -p freebsd-ufs:="${NANO_OBJ}/_.altroot.part" \
+ -o "${NANO_OBJ}/_.altroot.image"
+ altroot="-p freebsd:=${NANO_OBJ}/_.altroot.image"
+ rm -f "${NANO_OBJ}/_.altroot.part"
+ else
+ altroot="-p-"
+ fi
+ if [ "${NANO_INIT_IMG2}" -eq 0 ]; then
+ altroot="-p freebsd::${CODE_SIZE}b"
+ fi
+
+ # Create Config slice
+ _populate_cfg_part "${NANO_OBJ}/_.cfg.part" "${NANO_CFGDIR}" \
+ "${NANO_SLICE_CFG}" "${NANO_CONFSIZE}" "${NANO_METALOG_CFG}"
+ cfgimage="-p freebsd:=${NANO_OBJ}/_.cfg.part"
+
+ # Create Data slice, if any.
+ if [ -n "${NANO_SLICE_DATA}" ] &&
+ [ "${NANO_SLICE_CFG}" = "${NANO_SLICE_DATA}" ] &&
+ [ "${NANO_DATASIZE}" -ne 0 ]; then
+ pprint 2 "NANO_SLICE_DATA is the same as NANO_SLICE_CFG, fix."
+ exit 2
+ fi
+ if [ "${NANO_DATASIZE}" -ne 0 ] && [ -n "${NANO_SLICE_DATA}" ] ; then
+ _populate_data_part "${NANO_OBJ}/_.data.part" "${NANO_DATADIR}" \
+ "${NANO_SLICE_DATA}" "${NANO_DATASIZE}" "${NANO_METALOG_DATA}"
+ dataimage="-p freebsd:=${NANO_OBJ}/_.data.part"
+ fi
+
+ echo "Writing out ${NANO_IMGNAME}..."
+ mkimg -s mbr \
+ ${bootloader} \
+ ${diskimage} \
+ ${altroot} \
+ ${cfgimage} \
+ ${dataimage} \
+ -o ${IMG}
+ exit
+
+ ) > ${NANO_LOG}/_.di 2>&1
+}
diff --git a/tools/tools/nanobsd/nanobsd.sh b/tools/tools/nanobsd/nanobsd.sh
--- a/tools/tools/nanobsd/nanobsd.sh
+++ b/tools/tools/nanobsd/nanobsd.sh
@@ -36,6 +36,7 @@
# Parse arguments
do_clean=true
+do_root=true
do_kernel=true
do_installkernel=true
do_world=true
@@ -49,7 +50,7 @@
. "${topdir}/legacy.sh"
set +e
-args=`getopt BKXWbc:fhiIknpqvw $*`
+args=`getopt BKXWbc:fhiIknpqUvw $*`
if [ $? -ne 0 ] ; then
usage
exit 2
@@ -133,6 +134,11 @@
PPLEVEL=$(($PPLEVEL + 1))
shift
;;
+ -U)
+ do_root=false
+ NANO_NOPRIV_BUILD=true
+ shift
+ ;;
-w)
do_world=false
shift
@@ -221,9 +227,17 @@
fi
if $do_code ; then
calculate_partitioning
- create_code_slice
+ if [ -z "${NANO_NOPRIV_BUILD}" ]; then
+ create_code_slice
+ else
+ _create_code_slice
+ fi
if $do_image ; then
- create_diskimage
+ if [ -z "${NANO_NOPRIV_BUILD}" ]; then
+ create_diskimage
+ else
+ _create_diskimage
+ fi
else
pprint 2 "Skipping image build (as instructed)"
fi
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Sep 28, 11:13 PM (9 h, 31 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29992627
Default Alt Text
D48793.1790637204.diff (8 KB)
Attached To
Mode
D48793: nanobsd: Add a NO_ROOT build option
Attached
Detach File
Event Timeline
Log In to Comment