aboutsummaryrefslogtreecommitdiff
path: root/mkbootimg_ext2.sh
blob: 30f2e94679dc7ec3f010a758db78e5c9c46f883d (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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/bin/bash

KERNEL=
RAMDISK=
CMDLINE=
GENEXT2FS=
GRUBCONF=
TMPDIR=
OUTPUT=

while [ $# -gt 0 ]; do
    case $1 in
        --kernel)
            KERNEL=$2
            shift
            ;;

        --ramdisk)
            RAMDISK=$2
            shift
            ;;

        --cmdline)
            CMDLINE=$2
            shift
            ;;

        --genext2fs)
            GENEXT2FS=$2
            shift
            ;;

        --tmpdir)
            TMPDIR=$2
            shift
            ;;
        --grubconf)
            GRUBCONF=$2
            shift
            ;;
        --output)
            OUTPUT=$2
            shift
            ;;

        --help)
            echo "Usage: $0 OPTIONS"
            echo "Create an ext2 image that contains everything necessary"
            echo -e "to be the boot file system.\n"
            echo "The following options exist:"
            echo "  --genext2fs <genext2fs>   The location of genext2fs binary"
            echo "  --kernel <kernel>         The kernel to boot"
            echo "  --ramdisk <ramdisk>       The ramdisk to be used"
            echo "  --cmdline <cmdline>       The command line to use"
            echo "  --grubconf <confile>      The path to grub conf file"
            echo "  --tmpdir <tmpdir>         The temporary dir where files"\
                 "can be copied"
            echo "  --output <output>         The filename of the output image"
            echo
            exit 0
            ;;

        *)
            echo "Unknown option $1."
            exit 1
            ;;
    esac
    shift
done

if [ -z "$KERNEL" -o -z "$RAMDISK" -o -z "$GENEXT2FS" -o -z "$TMPDIR" -o \
     -z "$OUTPUT" ]; then
    echo "Missing required arguments."
    exit 1
fi

if ! [ -x "$GENEXT2FS" -a -f "$RAMDISK" -a -f "$KERNEL" ]; then
    echo "Must provide path to a valid genext2fs binary."
    exit 1
fi

rm -rf $TMPDIR
mkdir -p $TMPDIR

echo -n "$CMDLINE" > $TMPDIR/cmdline
cp -f $KERNEL $TMPDIR/kernel
cp -f $RAMDISK $TMPDIR/ramdisk

if [ -f "$GRUBCONF" ]; then
    mkdir -p $TMPDIR/boot/grub
    cp -f $GRUBCONF $TMPDIR/boot/grub/menu.lst
fi

num_blocks=`du -sk $TMPDIR | tail -n1 | awk '{print $1;}'`

# add 1%
extra=`expr $num_blocks / 100`
reserve=10
[ $extra -lt $reserve ] && extra=$reserve

num_blocks=`expr $num_blocks + $extra`
num_inodes=`find $TMPDIR | wc -l`

$GENEXT2FS -d $TMPDIR -b $num_blocks -N $num_inodes -m 0 $OUTPUT

exit 0