32 |
32 |
CLEANUP+=("$LOSETUP -d $blockdev")
|
33 |
33 |
fi
|
34 |
34 |
|
35 |
|
# Create 3 partitions, /boot, swap, & /
|
36 |
|
format_disk0 $blockdev
|
|
35 |
if [ ! -f "$IMAGE_FILE" ] ; then
|
|
36 |
log_error "Can't find image file: $IMAGE_FILE"
|
|
37 |
exit 1
|
|
38 |
fi
|
|
39 |
|
|
40 |
# If the image is tarball based, then we need to manually create the
|
|
41 |
# volumes, filesystems, etc
|
|
42 |
if [ "${IMAGE_TYPE}" = "tarball" ] ; then
|
|
43 |
# Create 3 partitions, /boot, swap, & /
|
|
44 |
format_disk0 $blockdev
|
|
45 |
elif [ "${IMAGE_TYPE}" = "qemu" ] ; then
|
|
46 |
# need a recent version of qemu for this
|
|
47 |
qemu-img convert ${IMAGE_FILE} -O host_device ${blockdev}
|
|
48 |
fi
|
|
49 |
|
37 |
50 |
filesystem_base_dev=$(map_disk0 $blockdev)
|
38 |
51 |
root_dev="${filesystem_base_dev}-3"
|
39 |
52 |
boot_dev="${filesystem_base_dev}-1"
|
40 |
53 |
swap_dev="${filesystem_base_dev}-2"
|
41 |
54 |
CLEANUP+=("unmap_disk0 $blockdev")
|
42 |
55 |
|
43 |
|
# Format /boot
|
44 |
|
mke2fs -Fjq -L /boot $boot_dev
|
45 |
|
# Format /
|
46 |
|
mke2fs -Fjq -L / $root_dev
|
47 |
|
# Format swap
|
48 |
|
mkswap $swap_dev
|
|
56 |
if [ "${IMAGE_TYPE}" = "tarball" ] ; then
|
|
57 |
# Format /boot
|
|
58 |
mke2fs -Fjq -L /boot $boot_dev
|
|
59 |
# Format /
|
|
60 |
mke2fs -Fjq -L / $root_dev
|
|
61 |
# Format swap
|
|
62 |
mkswap $swap_dev
|
|
63 |
fi
|
49 |
64 |
|
50 |
65 |
TMPDIR=`mktemp -d` || exit 1
|
51 |
66 |
CLEANUP+=("rmdir $TMPDIR")
|
52 |
67 |
|
53 |
68 |
# mount filesystems
|
54 |
|
mount $root_dev $TMPDIR
|
55 |
|
CLEANUP+=("umount $TMPDIR")
|
56 |
|
$MKDIR_P $TMPDIR/boot
|
57 |
|
mount $boot_dev $TMPDIR/boot
|
58 |
|
CLEANUP+=("umount $TMPDIR/boot")
|
59 |
|
|
60 |
|
if [ ! -f "$IMAGE_FILE" ] ; then
|
61 |
|
log_error "Can't find image file: $IMAGE_FILE"
|
62 |
|
exit 1
|
63 |
|
fi
|
64 |
|
|
65 |
|
# unpack image
|
66 |
|
tar pzxf $IMAGE_FILE -C $TMPDIR
|
67 |
|
|
68 |
|
# Set disk based on type of hypervisor
|
69 |
|
disk=""
|
70 |
|
if [ "$HYPERVISOR" = "kvm" ] ; then
|
71 |
|
disk="vda"
|
72 |
|
else
|
73 |
|
disk="xda"
|
74 |
|
fi
|
75 |
|
|
76 |
|
# make /dev/$disk
|
77 |
|
mknod $TMPDIR/dev/$disk b $(stat -L -c "0x%t 0x%T" $blockdev)
|
78 |
|
CLEANUP+=("rm -f $TMPDIR/dev/$disk")
|
79 |
|
|
80 |
|
# make /dev/${disk}1
|
81 |
|
mknod $TMPDIR/dev/${disk}1 b $(stat -L -c "0x%t 0x%T" $boot_dev)
|
82 |
|
CLEANUP+=("rm -f $TMPDIR/dev/${disk}1")
|
83 |
|
|
84 |
|
# make /dev/${disk}1
|
85 |
|
mknod $TMPDIR/dev/${disk}3 b $(stat -L -c "0x%t 0x%T" $root_dev)
|
86 |
|
CLEANUP+=("rm -f $TMPDIR/dev/${disk}3")
|
87 |
|
|
88 |
|
# create device.map
|
89 |
|
cat > "$TMPDIR/boot/grub/device.map" <<EOF
|
|
69 |
mount_disk0 $TMPDIR $root_dev $boot_dev
|
|
70 |
|
|
71 |
if [ "${IMAGE_TYPE}" = "tarball" ] ; then
|
|
72 |
# unpack image
|
|
73 |
tar pzxf $IMAGE_FILE -C $TMPDIR
|
|
74 |
|
|
75 |
# Set disk based on type of hypervisor
|
|
76 |
disk=""
|
|
77 |
if [ "$HYPERVISOR" = "kvm" ] ; then
|
|
78 |
disk="vda"
|
|
79 |
else
|
|
80 |
disk="xda"
|
|
81 |
fi
|
|
82 |
|
|
83 |
# make /dev/$disk
|
|
84 |
mknod $TMPDIR/dev/$disk b $(stat -L -c "0x%t 0x%T" $blockdev)
|
|
85 |
CLEANUP+=("rm -f $TMPDIR/dev/$disk")
|
|
86 |
|
|
87 |
# make /dev/${disk}1
|
|
88 |
mknod $TMPDIR/dev/${disk}1 b $(stat -L -c "0x%t 0x%T" $boot_dev)
|
|
89 |
CLEANUP+=("rm -f $TMPDIR/dev/${disk}1")
|
|
90 |
|
|
91 |
# make /dev/${disk}1
|
|
92 |
mknod $TMPDIR/dev/${disk}3 b $(stat -L -c "0x%t 0x%T" $root_dev)
|
|
93 |
CLEANUP+=("rm -f $TMPDIR/dev/${disk}3")
|
|
94 |
|
|
95 |
# create device.map
|
|
96 |
cat > "$TMPDIR/boot/grub/device.map" <<EOF
|
90 |
97 |
(hd0) /dev/$disk
|
91 |
98 |
EOF
|
92 |
99 |
|
93 |
|
# install grub to the block device
|
94 |
|
chroot $TMPDIR grub --batch --no-floppy --device-map=/boot/grub/device.map <<EOF
|
|
100 |
# install grub to the block device
|
|
101 |
chroot $TMPDIR grub --batch --no-floppy --device-map=/boot/grub/device.map <<EOF
|
95 |
102 |
root (hd0,0)
|
96 |
103 |
setup (hd0)
|
97 |
104 |
quit
|
98 |
105 |
EOF
|
|
106 |
fi
|
99 |
107 |
|
100 |
108 |
RUN_PARTS=`which run-parts`
|
101 |
109 |
|