diff options
author | phk <phk@FreeBSD.org> | 1996-01-08 22:13:50 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1996-01-08 22:13:50 +0000 |
commit | 30806f728b9ab4951188fcd9110fa7e825bac390 (patch) | |
tree | 8262b42521e263def8483f8a932ce2b2ca230b8c /release/doFS.sh | |
parent | 128060c302747e06a6fc02bd4f08896a5b3018fa (diff) | |
download | FreeBSD-src-30806f728b9ab4951188fcd9110fa7e825bac390.zip FreeBSD-src-30806f728b9ab4951188fcd9110fa7e825bac390.tar.gz |
Moved doFS into shell-script so we can be more smart about it.
make two boot floppies, one without help files for 4MB systems.
Mine's loading one now. :-) -O2 may be needed.
Diffstat (limited to 'release/doFS.sh')
-rw-r--r-- | release/doFS.sh | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/release/doFS.sh b/release/doFS.sh new file mode 100644 index 0000000..4548bd5 --- /dev/null +++ b/release/doFS.sh @@ -0,0 +1,82 @@ +: +set -e + +VNDEVICE=vn0 + +RD=$1 ; shift +MNT=$1 ; shift +FSSIZE=$1 ; shift +FSPROTO=$1 ; shift +FSINODE=$1 ; shift +FSLABEL=$1 ; shift + +while true +do + rm -f fs-image + + if [ ! -b /dev/${VNDEVICE} -o ! -c /dev/r${VNDEVICE} ] ; then + cd /dev && sh MAKEDEV ${VNDEVICE} + fi + + umount /dev/${VNDEVICE} 2>/dev/null || true + + umount ${MNT} 2>/dev/null || true + + vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true + + dd of=fs-image if=/dev/zero count=${FSSIZE} bs=1k 2>/dev/null + + vnconfig -s labels -c /dev/r${VNDEVICE} fs-image + + if [ "$FSLABEL" = "minimum" ] ; then + sed '/^minimum:/,$d' /etc/disktab > /etc/disktab.tmp + cat /etc/disktab.tmp > /etc/disktab + rm -f /etc/disktab.tmp + ( + a=`expr ${FSSIZE} \* 2` + echo + echo "minimum:ty=mfs:se#512:nt#1:rm#300:\\" + echo " :ns#$a:nc#1:\\" + echo " :pa#$a:oa#0:ba#4096:fa#512:\\" + echo " :pc#$a:oc#0:bc#4096:fc#512:" + echo + ) >> /etc/disktab + fi + + disklabel -w -r -B \ + -b ${RD}/trees/bin/usr/mdec/fdboot \ + -s ${RD}/trees/bin/usr/mdec/bootfd \ + /dev/r${VNDEVICE} ${FSLABEL} + + newfs -u 0 -t 0 -i ${FSINODE} -m 0 -T ${FSLABEL} /dev/r${VNDEVICE}a + + mount /dev/${VNDEVICE}a ${MNT} + + ( cd ${FSPROTO} && find . -print | cpio -dump ${MNT} ) + + set `df -i /mnt | tail -1` + + umount ${MNT} + + fsck -p /dev/r${VNDEVICE}a < /dev/null + + vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true + + if [ $FSLABEL != "minimum" ] ; then + echo ${FSSIZE} > fs-image.size + break + fi + + echo ">>> Filesystem is ${FSSIZE} K, $4 left" + echo ">>> ${FSINODE} bytes/inode, $7 left" + if [ $4 -gt 8 ] ; then + FSSIZE=`expr ${FSSIZE} - $4 + 7` + continue + fi + if [ $7 -gt 32 ] ; then + FSINODE=`expr ${FSINODE} + 8192` + continue + fi + echo ${FSSIZE} > fs-image.size + break; +done |