]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - release/doFS.sh
Avoid a possible memory leak.
[FreeBSD/FreeBSD.git] / release / doFS.sh
1 :
2 #set -ex
3
4 if [ "x$VNDEVICE" = "x" ] ; then
5         VNDEVICE=vn0
6 fi
7 export BLOCKSIZE=512
8
9 RD=$1 ; shift
10 MNT=$1 ; shift
11 FSSIZE=$1 ; shift
12 FSPROTO=$1 ; shift
13 FSINODE=$1 ; shift
14 FSLABEL=$1 ; shift
15
16 deadlock=20
17
18 while true 
19 do
20         rm -f fs-image
21
22         if [ ! -b /dev/${VNDEVICE} -o ! -c /dev/r${VNDEVICE} ] ; then 
23                 ( cd /dev && sh MAKEDEV ${VNDEVICE} )
24         fi
25
26         umount /dev/${VNDEVICE} 2>/dev/null || true
27
28         umount ${MNT} 2>/dev/null || true
29
30         vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true
31
32         dd of=fs-image if=/dev/zero count=${FSSIZE} bs=1k 2>/dev/null
33         # this suppresses the `invalid primary partition table: no magic'
34         awk 'BEGIN {printf "%c%c", 85, 170}' |\
35             dd of=fs-image obs=1 seek=510 conv=notrunc 2>/dev/null
36
37         vnconfig -s labels -c /dev/r${VNDEVICE} fs-image
38
39         disklabel -Brw \
40                 -b ${RD}/trees/bin/usr/mdec/fdboot \
41                 -s ${RD}/trees/bin/usr/mdec/bootfd \
42                 /dev/r${VNDEVICE} minimum
43
44         newfs -u 0 -t 0 -i ${FSINODE} -m 0 -T minimum -o space /dev/r${VNDEVICE}c
45
46         mount /dev/${VNDEVICE}c ${MNT}
47
48         ( set -e && cd ${FSPROTO} && find . -print | cpio -dump ${MNT} )
49
50         df -ki /mnt
51
52         set `df -ki /mnt | tail -1`
53
54         umount ${MNT}
55
56         fsck -p /dev/r${VNDEVICE}c < /dev/null
57
58         vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true
59
60         if [ $FSLABEL != "minimum" ] ; then
61                 echo ${FSSIZE} > fs-image.size
62                 break
63         fi
64
65         echo ">>> Filesystem is ${FSSIZE} K, $4 left"
66         echo ">>>     ${FSINODE} bytes/inode, $7 left"
67         echo ">>>   `expr ${FSSIZE} \* 1024 / ${FSINODE}`"
68         echo ${FSSIZE} > fs-image.size
69         break;
70 done