initdiskless patch
Jose M Rodriguez
josemi at freebsd.jazztel.es
Thu Nov 11 11:18:53 PST 2004
Hi,
This is an absolute _NOT_ tested patch, but an idea that can be even MFC
to RELENG_4
comments welcome,
--
josemi
----- patch-initdiskless
--- /etc/rc.d/initdiskless Tue Oct 26 18:16:19 2004
+++ initdiskless Thu Oct 28 13:42:29 2004
@@ -91,10 +91,15 @@
# initialize it from a template, it is preferrable to specify
# it in fstab e.g. as "md /tmp mfs -s=30m,rw 0 0"
#
+# /conf/T/SUBDIR.pax
+# The file is expanded into /SUBDIR (and a memory filesystem
+# is created for /SUBDIR if necessary). The presence of this
+# file prevents the copy from other sources
+#
# /conf/T/SUBDIR.cpio.gz
-# The file is cpio'd into /SUBDIR (and a memory filesystem is
-# created for /SUBDIR if necessary). The presence of this file
-# prevents the copy from /conf/T/SUBDIR/
+# The file is expanded into /SUBDIR (and a memory filesystem
+# is created for /SUBDIR if necessary). The presence of this
+# file prevents the copy from /conf/T/SUBDIR/
#
# /conf/T/SUBDIR.remove
# The list of paths contained in the file are rm -rf'd
@@ -250,6 +255,7 @@
# it before attemping to the remount. This allows the root to be
# relocated without needing to change the remount files.
#
+
for i in ${templates} ; do
for j in /conf/$i/* ; do
# memory filesystem size specification
@@ -291,27 +297,56 @@
# so if the cpio archive is present, it prevents the files from dir/
# from being copied.
+# a valid gzip
+if [ -x /bin/gzip ]; then
+ use_gunzip="/bin/gzip -d"
+elif [ -x /rescue/gzip ]; then
+ use_gunzip="/rescue/gzip -d"
+elif [ -x /stand/gzip ]; then
+ use_gunzip="/stand/gzip -d"
+else
+ use_gunzip=""
+fi
+
for i in ${templates} ; do
- for j in /conf/$i/* ; do
- subdir=${j##*/}
- if [ -d $j -a ! -f $j.cpio.gz ]; then
+ for j in /conf/$i/*.pax ; do
+ subdir=${j%*.pax}
+ subdir=${subdir##*/}
+ eval _from=\$md_from_${subdir}_${i}
+ if [ -r $j -a ! -n "${_from}" ]; then
create_md $subdir
- cp -Rp $j/* /$subdir
+ echo "Loading /$subdir from pax archive $j"
+ (cd / ; /bin/pax -r -pe ${busbir} < $j )
+ eval md_from_${subdir}_${i}="$j"
fi
done
- for j in /conf/$i/*.cpio.gz ; do
- subdir=${j%*.cpio.gz}
- subdir=${subdir##*/}
- if [ -f $j ]; then
+ if [ -n "${use_gunzip}" ]; then
+ for j in /conf/$i/*.cpio.gz ; do
+ subdir=${j%*.cpio.gz}
+ subdir=${subdir##*/}
+ eval _from=\$md_from_${subdir}_${i}
+ if [ -r $j -a ! -n "${_from}" ]; then
+ create_md $subdir
+ echo "Loading /$subdir from cpio archive $j"
+ (cd / ; ${use_gunzip} < $j | /bin/pax -r -pe ${subdir} )
+ eval md_from_${subdir}_${i}="$j"
+ fi
+ done
+ fi
+ for j in /conf/$i/* ; do
+ subdir=${j##*/}
+ eval _from=\$md_from_${subdir}_${i}
+ if [ -d $j -a ! -n "${_from}" ]; then
create_md $subdir
- echo "Loading /$subdir from cpio archive $j"
- (cd / ; /stand/gzip -d < $j | /stand/cpio --extract -d )
+ echo "Copying /$subdir from $j"
+ cp -Rp $j/* /$subdir
+ eval md_from_${subdir}_${i}="$j"
fi
done
for j in /conf/$i/*.remove ; do
subdir=${j%*.remove}
subdir=${subdir##*/}
- if [ -f $j ]; then
+ if [ -r $j ]; then
# doubly sure it is a memory disk before rm -rf'ing
create_md $subdir
(cd /$subdir; rm -rf `/bin/cat $j`)
More information about the freebsd-current
mailing list