summaryrefslogtreecommitdiffstats
path: root/release/ia64/doFS.sh
blob: 98f6d09ead6856ed12ccdafb31f56c8355bfd8c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/bin/sh
#
# $FreeBSD$
#
# See also: ../scripts/doFS.sh
#

set -ex

FSIMG=$1; shift
RD=$1 ; shift
MNT=$1 ; shift
FSSIZE=$1 ; shift
FSPROTO=$1 ; shift
FSINODE=$1 ; shift
FSLABEL=$1 ; shift

# If the disklabel is not equal to "efi", we have to create a "normal"
# UFS file system. In that case, call the generic version:
if [ x$FSLABEL != "xefi" ]; then
    DOFS_SH=`dirname $0`/../scripts/`basename $0`
    echo "Transferring control to $DOFS_SH..."
    exec sh $DOFS_SH bsdlabel ia64 $FSIMG $RD $MNT $FSSIZE $FSPROTO $FSINODE $FSLABEL
fi

export BLOCKSIZE=512

# Express the size on 512-byte blocks for newfs_msdos
FSSIZE=$((${FSSIZE}*2))

rm -f ${FSIMG}
dd of=${FSIMG} if=/dev/zero count=${FSSIZE} bs=512 2>/dev/null

if [ "x${MDDEVICE}" != "x" ] ; then
    umount /dev/${MDDEVICE} 2>/dev/null || true
    umount ${MNT} 2>/dev/null || true
    mdconfig -d -u ${MDDEVICE} 2>/dev/null || true
fi

MDDEVICE=`mdconfig -a -t vnode -f ${FSIMG}`
if [ ! -c /dev/${MDDEVICE} ] ; then
	echo "No /dev/$MDDEVICE" 1>&2
	exit 1
fi

trap "umount ${MNT}; mdconfig -d -u ${MDDEVICE}" EXIT

EFI_SIZE=$((${FSSIZE}-68))

gpt create ${MDDEVICE}
gpt add -s ${EFI_SIZE} -t c12a7328-f81f-11d2-ba4b-00a0c93ec93b ${MDDEVICE}
newfs_msdos -F 12 -S 512 -h 4 -o 0 -s ${EFI_SIZE} -u 16 ${MDDEVICE}p1
mount -t msdos /dev/${MDDEVICE}p1 ${MNT}

if [ -d ${FSPROTO} ]; then
    (set -e && cd ${FSPROTO} && find . -print | cpio -dump ${MNT})
else
    cp -p ${FSPROTO} ${MNT}
fi

# Do some post-population munging so that auto-boot works...
mkdir -p ${MNT}/efi/boot
mv ${MNT}/boot/loader.efi ${MNT}/efi/boot/bootia64.efi

df -ki ${MNT}

set `df -ki ${MNT} | tail -1`

echo "*** Filesystem is ${FSSIZE} K, $4 left"
echo "***     ${FSINODE} bytes/inode, $7 left"
OpenPOWER on IntegriCloud