comparison root-image.sh @ 1350:7eabfa815c90

Split up system-image.sh into root-image.sh, linux-kernel.sh, and system-image.sh. Rename CROSS_HOST_ARCH to CROSS_COMPILER_HOST.
author Rob Landley <rob@landley.net>
date Mon, 18 Apr 2011 18:41:04 -0500
parents
children 2059add65b8c
comparison
equal deleted inserted replaced
1349:37ba3859ea14 1350:7eabfa815c90
1 #!/bin/bash
2
3 # Package a root filesystem directory into a filesystem image file
4
5 source sources/include.sh || exit 1
6
7 # Parse the sources/targets/$1 directory
8
9 read_arch_dir "$1"
10
11 # Which directory do we package up?
12
13 if [ -z "$NATIVE_ROOT" ]
14 then
15 [ -z "$NO_NATIVE_COMPILER" ] &&
16 NATIVE_ROOT="$BUILD/root-filesystem-$ARCH"
17
18 [ -e "$NATIVE_ROOT" ] ||
19 NATIVE_ROOT="$BUILD/simple-root-filesystem-$ARCH"
20 fi
21
22 if [ ! -d "$NATIVE_ROOT" ]
23 then
24 [ -z "$FAIL_QUIET" ] && echo No "$NATIVE_ROOT" >&2
25 exit 1
26 fi
27
28 [ -z "$SYSIMAGE_TYPE" ] && SYSIMAGE_TYPE=squashfs
29
30 echo "Generating $SYSIMAGE_TYPE root filesystem from $NATIVE_ROOT."
31
32 # Embed an initramfs image in the kernel?
33
34 if [ "$SYSIMAGE_TYPE" == "initramfs" ]
35 then
36 $CC "$SOURCES/toys/gen_init_cpio.c" -o my_gen_init_cpio || dienow
37 ./my_gen_init_cpio <(
38 "$SOURCES"/toys/gen_initramfs_list.sh "$NATIVE_ROOT" || dienow
39 [ ! -e "$NATIVE_ROOT"/init ] &&
40 echo "slink /init /sbin/init.sh 755 0 0"
41 [ ! -d "$NATIVE_ROOT"/dev ] && echo "dir /dev 755 0 0"
42 echo "nod /dev/console 660 0 0 c 5 1"
43 ) > "$STAGE_DIR/initramfs_data.cpio" || dienow
44 echo Initramfs generated.
45
46 elif [ "$SYSIMAGE_TYPE" == "ext2" ]
47 then
48 # Generate a 64 megabyte ext2 filesystem image from the $NATIVE_ROOT
49 # directory, with a temporary file defining the /dev nodes for the new
50 # filesystem.
51
52 [ -z "$SYSIMAGE_HDA_MEGS" ] && SYSIMAGE_HDA_MEGS=64
53
54 echo "/dev d 755 0 0 - - - - -" > "$WORK/devs" &&
55 echo "/dev/console c 640 0 0 5 1 0 0 -" >> "$WORK/devs" &&
56
57 # Produce a filesystem with the currently used space plus 20% for filesystem
58 # overhead, which should always be big enough.
59
60 BLOCKS=$[1024*(($(du -m -s "$NATIVE_ROOT" | awk '{print $1}')*12)/10)]
61 [ $BLOCKS -lt 4096 ] && BLOCKS=4096
62
63 genext2fs -z -D "$WORK/devs" -d "$NATIVE_ROOT" -b $BLOCKS -i 1024 \
64 "$STAGE_DIR/hda.ext2" &&
65 rm "$WORK/devs" || dienow
66
67 # Extend image size to HDA_MEGS if necessary, keeping it sparse. (Feeding
68 # a larger -b size to genext2fs is insanely slow, and not particularly
69 # sparse.)
70
71 echo "$(stat -c %s "$STAGE_DIR/$IMAGE") -lt $SYSIMAGE_HDA_MEGS"
72
73 if [ ! -z "$SYSIMAGE_HDA_MEGS" ] &&
74 [ $((`stat -c %s "$STAGE_DIR/$IMAGE"` / (1024*1024) )) -lt "$SYSIMAGE_HDA_MEGS" ]
75 then
76 echo resizing image to $SYSIMAGE_HDA_MEGS
77 dd if=/dev/zero of="$STAGE_DIR/$IMAGE" bs=1k count=1 seek=$[1024*1024-1] &&
78 resize2fs "$STAGE_DIR/$IMAGE" ${SYSIMAGE_HDA_MEGS}M || dienow
79 echo resize complete
80 fi
81
82 elif [ "$SYSIMAGE_TYPE" == "squashfs" ]
83 then
84 mksquashfs "${NATIVE_ROOT}" "$STAGE_DIR/hda.sqf" -noappend -all-root \
85 ${FORK:+-no-progress} -p "/dev d 755 0 0" \
86 -p "/dev/console c 666 0 0 5 1" || dienow
87 else
88 echo "Unknown image type $SYSIMAGE_TYPE" >&2
89 dienow
90 fi
91
92 create_stage_tarball
93
94 echo Image generation complete.