From 91460c9caac318aaa772f1dccd3e82385f74dc09 Mon Sep 17 00:00:00 2001 From: CyberLeo Date: Mon, 15 Feb 2010 04:47:57 -0600 Subject: [PATCH] script/gentree: generalize confpack generator and saveconfig to handle packs other than etc and var --- script/gentree | 66 +++++++++++++++++++++++-------------- src/conf/etc.md_size | 1 + src/conf/root.md_size | 1 + src/conf/var.md_size | 1 + src/overlay/sbin/saveconfig | 10 ++++-- 5 files changed, 52 insertions(+), 27 deletions(-) create mode 100644 src/conf/etc.md_size create mode 100644 src/conf/root.md_size create mode 100644 src/conf/var.md_size diff --git a/script/gentree b/script/gentree index f596473..4099344 100755 --- a/script/gentree +++ b/script/gentree @@ -7,7 +7,7 @@ _root="$(dirname "${0}")" # Load needed modules want root ansi log ask -targets="prepwork admin overlay packages patch prepboot preptmp prepetc prepvar imgboot imgconf imgetc imgvar custom" +targets="prepwork admin overlay packages patch prepboot preptmp prepetc imgboot imgconf imgetc imgall custom" pebkac() { [ "${*}" ] && printf "${*}\n\n" @@ -157,11 +157,6 @@ do_prepetc() { chk ln -sf ../../etc/local "${sroot}/usr/local/etc" } -do_prepvar() { - log Prepare /var - # Nothing necessary here -} - do_imgboot() { log Create boot imgsrc chk mv "${sroot}/boot" "${stage}" @@ -201,40 +196,61 @@ do_imgboot() { } do_imgconf() { - log Create conf imgsrc + log Create conftree chk mkdir -p "${sroot}/conf" echo "ufs:/dev/ufs/conf" > "${sroot}/conf/diskless_remount" || chk chk mkdir -p "${sconf}/backup" - chk mkdir -p "${sconf}/base/etc" - chk mkdir -p "${sconf}/base/var" - chk mkdir -p "${sconf}/default/etc" - chk mkdir -p "${sconf}/default/var" + chk mkdir -p "${sconf}/base" + chk mkdir -p "${sconf}/default" + + # Create packdirs for each + for pack in "${base}/conf"/*.md_size + do + pack="$(basename "${pack%%.md_size}")" + chk mkdir -p "${sconf}/base/${pack}" + chk mkdir -p "${sconf}/default/${pack}" + ( cat "${base}/conf/${pack}.md_size" > "${sconf}/base/${pack}/md_size" ) || chk + done } do_imgetc() { - log Create etc imgsrc + # etc requires special handling to ensure everything is properly arranged. + log Create etc confpack chk touch "${sroot}/etc/diskless" chk sleep 1 # Make sure diskless is at least one second older than everything in custom - chk mv "${sroot}/etc" "${stage}" + chk mkdir -p "${stage}/pack" + chk mv "${sroot}/etc" "${stage}/pack" chk mkdir -p "${sroot}/etc" - chk cp -p "${stage}/etc/rc" "${stage}/etc/rc.subr" "${stage}/etc/rc.initdiskless" "${stage}/etc/login.conf.db" "${stage}/etc/diskless" "${sroot}/etc" - echo "10240" > "${sconf}/base/etc/md_size" || chk - ( cd "${stage}" && find etc | cpio -o ) | gzip -9 > "${sconf}/base/etc.cpio.gz" || chk - chk rm -Rf "${stage}/etc" + chk cp -p "${stage}/pack/etc/rc" "${stage}/pack/etc/rc.subr" "${stage}/pack/etc/rc.initdiskless" "${stage}/pack/etc/login.conf.db" "${stage}/pack/etc/diskless" "${sroot}/etc" + + # Make sure etc confpack exists; default if necessary + chk mkdir -p "${sconf}/base/etc" + chk mkdir -p "${sconf}/default/etc" + [ -e "${sconf}/base/etc/md_size" ] || echo "10240" > "${sconf}/base/etc/md_size" + + ( cd "${stage}/pack" && find etc | cpio -o ) | gzip -9 > "${sconf}/base/etc.cpio.gz" || chk + chk rm -Rf "${stage}/pack/etc" } -do_imgvar() { - log Create var imgsrc - chk mv "${sroot}/var" "${stage}" - chk mkdir -p "${sroot}/var" - echo "131072" > "${sconf}/base/var/md_size" || chk - ( cd "${stage}" && find var | cpio -o ) | gzip -9 > "${sconf}/base/var.cpio.gz" || chk - chk rm -Rf "${stage}/var" +do_imgall() { + log Create remaining confpacks + chk mkdir -p "${stage}/pack" + for pack in "${base}/conf"/*.md_size + do + pack="$(basename "${pack%%.md_size}")" + # Ignore etc, as it was processed in do_imgetc + [ "${pack}" = "etc" ] && continue + note "... ${pack}" + chk mv "${sroot}/${pack}" "${stage}/pack" + chk mkdir -p "${sroot}/${pack}" + ( cd "${stage}/pack" && find "${pack}" | cpio -o ) | gzip -9 > "${sconf}/base/${pack}.cpio.gz" || chk + chk rm -Rf "${stage}/pack/${pack}" + done } do_custom() { log Patch in custom config - ( cd "${base}/conf" && find . | cpio -p --link "${sconf}/default" ) || chk + ( cd "${base}/conf" && find . | egrep -v '^\./.*\.md_size$' | cpio -p --link "${sconf}/default" ) || chk # Make sure files in default are newer than the tagfile, so they will be caught by saveconfig find "${sconf}/default" -type f -print0 | xargs -0 touch } diff --git a/src/conf/etc.md_size b/src/conf/etc.md_size new file mode 100644 index 0000000..7b16a10 --- /dev/null +++ b/src/conf/etc.md_size @@ -0,0 +1 @@ +10240 diff --git a/src/conf/root.md_size b/src/conf/root.md_size new file mode 100644 index 0000000..b71078f --- /dev/null +++ b/src/conf/root.md_size @@ -0,0 +1 @@ +131072 diff --git a/src/conf/var.md_size b/src/conf/var.md_size new file mode 100644 index 0000000..b71078f --- /dev/null +++ b/src/conf/var.md_size @@ -0,0 +1 @@ +131072 diff --git a/src/overlay/sbin/saveconfig b/src/overlay/sbin/saveconfig index c109df4..2f5cffc 100755 --- a/src/overlay/sbin/saveconfig +++ b/src/overlay/sbin/saveconfig @@ -44,8 +44,14 @@ fi # Store config in temp staging area rm -Rf /conf/tmp || exit 1 mkdir -p /conf/tmp || exit 1 -archive etc || exit 1 -archive var || exit 1 +chmod 700 /conf/tmp || exit 1 + +# Grab a list of confpacks to store +for pack in /conf/base/*/md_size +do + pack="$(basename "$(dirname "${pack}")")" + archive "${pack}" || exit 1 +done # Rotate current config to dated backup # Unlimited history method: (make sure you have provisions for removing the old backups, or this can get HUGE! -- 2.42.0