Revision b05b1ab6

b/common.sh.in
105 105
EOF
106 106
}
107 107

  
108
mount_disk0() {
109
    local tmpdir=$1 root_dev=$2 boot_dev=$3
110
    mount $root_dev $tmpdir
111
    CLEANUP+=("umount $tmpdir")
112
    $MKDIR_P $tmpdir/boot
113
    mount $boot_dev $tmpdir/boot
114
    CLEANUP+=("umount $tmpdir/boot")
115
}
116

  
108 117
map_disk0() {
109 118
  blockdev="$1"
110 119
  filesystem_dev_base=`$KPARTX -l -p- $blockdev | \
......
151 160
# will use it, this declaration is to make sure the variable is set
152 161
: ${CDINSTALL:="yes"}
153 162
: ${IMAGE_NAME:=""}
163
: ${IMAGE_TYPE:="qemu"}
154 164
: ${ARCH:=""}
155 165
: ${CUSTOMIZE_DIR:="@sysconfdir@/ganeti/instance-image.d"}
156 166
: ${VARIANTS_DIR:="@sysconfdir@/ganeti/instance-image/variants"}
b/create
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

  
b/defaults
11 11
#   centos-5.4 debian-4.0 fedora-12
12 12
# IMAGE_NAME=""
13 13

  
14
# IMAGE_TYPE: Either qemu disk images or tarball based images.
15
# Use either qemu or tarball (default is qemu)
16
# IMAGE_TYPE=qemu
17

  
14 18
# IMAGE_DIR: directory location for disk images
15 19
# IMAGE_DIR=""
16 20

  

Also available in: Unified diff