summaryrefslogtreecommitdiffstats
path: root/release/ia64/doFS.sh
blob: 84b7e6803251cfad473b42e40a52a31211caaa0e (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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/bin/sh
#
# $FreeBSD$
#
# See also: ../scripts/doFS.sh
#

set -e

if [ "$1" = "-s" ]; then
	opt_s="-s"; shift
else
	opt_s=""
fi

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 filesystem. In that case, call the generic version:
if [ x$FSLABEL != "xefi" ]; then
    DOFS_SH=`dirname $0`/../scripts/`basename $0`
    echo Tranferring control to $DOFS_SH...
    exec sh $DOFS_SH $opt_s $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
    if [ ! -f /dev/MAKEDEV ] ; then
	echo "No /dev/$MDDEVICE and no MAKEDEV" 1>&2
	mdconfig -d -u ${MDDEVICE} 2>/dev/null || true
	exit 1
    fi
    (cd /dev && sh MAKEDEV ${MDDEVICE})
fi

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`

umount ${MNT}

mdconfig -d -u ${MDDEVICE} 2>/dev/null || true

echo "*** Filesystem is ${FSSIZE} K, $4 left"
echo "***     ${FSINODE} bytes/inode, $7 left"
if [ "${opt_s}" ]; then
    echo ${FSSIZE} > ${FSIMG}.size
fi
OpenPOWER on IntegriCloud