Statistics
| Branch: | Revision:

root / common.sh.in @ 4c96e490

History | View | Annotate | Download (12.2 kB)

1 79224631 Lance Albertson
#
2 79224631 Lance Albertson
3 79224631 Lance Albertson
# Copyright (C) 2007, 2008, 2009 Google Inc.
4 79224631 Lance Albertson
#
5 79224631 Lance Albertson
# This program is free software; you can redistribute it and/or modify
6 79224631 Lance Albertson
# it under the terms of the GNU General Public License as published by
7 79224631 Lance Albertson
# the Free Software Foundation; either version 2 of the License, or
8 79224631 Lance Albertson
# (at your option) any later version.
9 79224631 Lance Albertson
#
10 79224631 Lance Albertson
# This program is distributed in the hope that it will be useful, but
11 79224631 Lance Albertson
# WITHOUT ANY WARRANTY; without even the implied warranty of
12 79224631 Lance Albertson
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 79224631 Lance Albertson
# General Public License for more details.
14 79224631 Lance Albertson
#
15 79224631 Lance Albertson
# You should have received a copy of the GNU General Public License
16 79224631 Lance Albertson
# along with this program; if not, write to the Free Software
17 79224631 Lance Albertson
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 79224631 Lance Albertson
# 02110-1301, USA.
19 79224631 Lance Albertson
20 8d0132dc Lance Albertson
AWK="@AWK@"
21 8d0132dc Lance Albertson
DUMP="@DUMP@"
22 8d0132dc Lance Albertson
LOSETUP="@LOSETUP@"
23 8d0132dc Lance Albertson
KPARTX="@KPARTX@"
24 8d0132dc Lance Albertson
SFDISK="@SFDISK@"
25 ab712029 Lance Albertson
QEMU_IMG="@QEMU_IMG@"
26 8d0132dc Lance Albertson
MKDIR_P="@MKDIR_P@"
27 8d0132dc Lance Albertson
28 79224631 Lance Albertson
CLEANUP=( )
29 79224631 Lance Albertson
30 79224631 Lance Albertson
log_error() {
31 79224631 Lance Albertson
  echo "$@" >&2
32 79224631 Lance Albertson
}
33 79224631 Lance Albertson
34 e7a2d1ad Lance Albertson
debug() {
35 e7a2d1ad Lance Albertson
    [ "$IMAGE_DEBUG" == "1" ] &&  $@ || :
36 e7a2d1ad Lance Albertson
}
37 e7a2d1ad Lance Albertson
38 79224631 Lance Albertson
get_api5_arguments() {
39 79224631 Lance Albertson
  GETOPT_RESULT=$*
40 79224631 Lance Albertson
  # Note the quotes around `$TEMP': they are essential!
41 79224631 Lance Albertson
  eval set -- "$GETOPT_RESULT"
42 79224631 Lance Albertson
  while true; do
43 79224631 Lance Albertson
    case "$1" in
44 79224631 Lance Albertson
      -i|-n) instance=$2; shift 2;;
45 79224631 Lance Albertson
46 79224631 Lance Albertson
      -o) old_name=$2; shift 2;;
47 79224631 Lance Albertson
48 79224631 Lance Albertson
      -b) blockdev=$2; shift 2;;
49 79224631 Lance Albertson
50 79224631 Lance Albertson
      -s) swapdev=$2; shift 2;;
51 79224631 Lance Albertson
52 79224631 Lance Albertson
      --) shift; break;;
53 79224631 Lance Albertson
54 79224631 Lance Albertson
      *)  log_error "Internal error!" >&2; exit 1;;
55 79224631 Lance Albertson
    esac
56 79224631 Lance Albertson
  done
57 79224631 Lance Albertson
  if [ -z "$instance" -o -z "$blockdev" ]; then
58 79224631 Lance Albertson
    log_error "Missing OS API Argument (-i, -n, or -b)"
59 79224631 Lance Albertson
    exit 1
60 79224631 Lance Albertson
  fi
61 79224631 Lance Albertson
  if [ "$SCRIPT_NAME" != "export" -a -z "$swapdev"  ]; then
62 79224631 Lance Albertson
    log_error "Missing OS API Argument -s (swapdev)"
63 79224631 Lance Albertson
    exit 1
64 79224631 Lance Albertson
  fi
65 79224631 Lance Albertson
  if [ "$SCRIPT_NAME" = "rename" -a -z "$old_name"  ]; then
66 79224631 Lance Albertson
    log_error "Missing OS API Argument -o (old_name)"
67 79224631 Lance Albertson
    exit 1
68 79224631 Lance Albertson
  fi
69 79224631 Lance Albertson
}
70 79224631 Lance Albertson
71 79224631 Lance Albertson
get_api10_arguments() {
72 79224631 Lance Albertson
  if [ -z "$INSTANCE_NAME" -o -z "$HYPERVISOR" -o -z "$DISK_COUNT" ]; then
73 79224631 Lance Albertson
    log_error "Missing OS API Variable:"
74 79224631 Lance Albertson
    log_error "(INSTANCE_NAME HYPERVISOR or DISK_COUNT)"
75 79224631 Lance Albertson
    exit 1
76 79224631 Lance Albertson
  fi
77 79224631 Lance Albertson
  instance=$INSTANCE_NAME
78 79224631 Lance Albertson
  if [ $DISK_COUNT -lt 1 -o -z "$DISK_0_PATH" ]; then
79 79224631 Lance Albertson
    log_error "At least one disk is needed"
80 79224631 Lance Albertson
    exit 1
81 79224631 Lance Albertson
  fi
82 79224631 Lance Albertson
  if [ "$SCRIPT_NAME" = "export" ]; then
83 79224631 Lance Albertson
    if [ -z "$EXPORT_DEVICE" ]; then
84 79224631 Lance Albertson
      log_error "Missing OS API Variable EXPORT_DEVICE"
85 79224631 Lance Albertson
    fi
86 79224631 Lance Albertson
    blockdev=$EXPORT_DEVICE
87 79224631 Lance Albertson
  elif [ "$SCRIPT_NAME" = "import" ]; then
88 79224631 Lance Albertson
    if [ -z "$IMPORT_DEVICE" ]; then
89 79224631 Lance Albertson
       log_error "Missing OS API Variable IMPORT_DEVICE"
90 79224631 Lance Albertson
    fi
91 79224631 Lance Albertson
    blockdev=$IMPORT_DEVICE
92 79224631 Lance Albertson
  else
93 79224631 Lance Albertson
    blockdev=$DISK_0_PATH
94 79224631 Lance Albertson
  fi
95 79224631 Lance Albertson
  if [ "$SCRIPT_NAME" = "rename" -a -z "$OLD_INSTANCE_NAME" ]; then
96 79224631 Lance Albertson
    log_error "Missing OS API Variable OLD_INSTANCE_NAME"
97 79224631 Lance Albertson
  fi
98 79224631 Lance Albertson
  old_name=$OLD_INSTANCE_NAME
99 79224631 Lance Albertson
}
100 79224631 Lance Albertson
101 f6f223b8 Lance Albertson
get_os_type() {
102 abade4ea Lance Albertson
    target=$1
103 abade4ea Lance Albertson
    if [ -z "${target}" ] ; then
104 abade4ea Lance Albertson
        log_error "target is not set in get_os_type"
105 abade4ea Lance Albertson
        exit 1
106 abade4ea Lance Albertson
    fi
107 abade4ea Lance Albertson
    if [ -e ${target}/etc/redhat-release ] ; then
108 f6f223b8 Lance Albertson
        OS_TYPE="redhat"
109 abade4ea Lance Albertson
    elif [ -e ${target}/etc/debian_version ] ; then
110 f6f223b8 Lance Albertson
        OS_TYPE="debian"
111 abade4ea Lance Albertson
    elif [ -e ${target}/etc/gentoo-release ] ; then
112 f6f223b8 Lance Albertson
        OS_TYPE="gentoo"
113 abade4ea Lance Albertson
    elif [ -e ${target}/etc/SuSE-release ] ; then
114 f6f223b8 Lance Albertson
        OS_TYPE="suse"
115 f6f223b8 Lance Albertson
    fi
116 f6f223b8 Lance Albertson
}
117 f6f223b8 Lance Albertson
118 abade4ea Lance Albertson
get_os() {
119 abade4ea Lance Albertson
    target=$1
120 abade4ea Lance Albertson
    if [ -z "${target}" ] ; then
121 abade4ea Lance Albertson
        log_error "target is not set in get_os"
122 abade4ea Lance Albertson
        exit 1
123 abade4ea Lance Albertson
    fi
124 49ae2760 Lance Albertson
    lsb="/usr/bin/lsb_release"
125 a97ea696 Lance Albertson
    if [ -e $lsb ] ; then
126 a97ea696 Lance Albertson
        OPERATING_SYSTEM="$(chroot ${target} ${lsb} -i -s | tr "[:upper:]" "[:lower:]")"
127 abade4ea Lance Albertson
    elif [ -e ${target}/etc/debian_version ] ; then
128 abade4ea Lance Albertson
        OPERATING_SYSTEM="debian"
129 abade4ea Lance Albertson
    elif [ -e ${target}/etc/gentoo-release ] ; then
130 abade4ea Lance Albertson
        OPERATING_SYSTEM="gentoo"
131 abade4ea Lance Albertson
    elif [ -e ${target}/etc/fedora-release ] ; then
132 abade4ea Lance Albertson
        OPERATING_SYSTEM="fedora"
133 9d35a15e Lance Albertson
    elif [ -e ${target}/etc/redhat-release ] ; then
134 abade4ea Lance Albertson
        if [ -n "$(grep -i centos ${target}/etc/redhat-release)" ] ; then
135 abade4ea Lance Albertson
            OPERATING_SYSTEM="centos"
136 abade4ea Lance Albertson
        else
137 abade4ea Lance Albertson
            OPERATING_SYSTEM="redhat"
138 abade4ea Lance Albertson
        fi
139 abade4ea Lance Albertson
    fi
140 abade4ea Lance Albertson
}
141 abade4ea Lance Albertson
142 abade4ea Lance Albertson
get_os_release() {
143 abade4ea Lance Albertson
    target=$1
144 abade4ea Lance Albertson
    if [ -z "${target}" ] ; then
145 abade4ea Lance Albertson
        log_error "target is not set in get_os_release"
146 abade4ea Lance Albertson
        exit 1
147 abade4ea Lance Albertson
    fi
148 49ae2760 Lance Albertson
    lsb="/usr/bin/lsb_release"
149 a97ea696 Lance Albertson
    if [ -e $lsb ] ; then
150 a97ea696 Lance Albertson
        OS_RELEASE="$(chroot ${target} ${lsb} -r -s | tr "[:upper:]" "[:lower:]")"
151 abade4ea Lance Albertson
    elif [ -e ${target}/etc/debian_version ] ; then
152 abade4ea Lance Albertson
        OS_RELEASE="$(cat ${target}/etc/debian_version)"
153 abade4ea Lance Albertson
    elif [ -e ${target}/etc/fedora-release ] ; then
154 abade4ea Lance Albertson
        OS_RELEASE="$(cat ${target}/etc/fedora-release | awk '{print $3}')"
155 abade4ea Lance Albertson
    elif [ -e ${$target}/etc/redhat-release ] ; then
156 abade4ea Lance Albertson
        OS_RELEASE="$(cat ${target}/etc/redhat-release | awk '{print $3}')"
157 abade4ea Lance Albertson
    fi
158 abade4ea Lance Albertson
}
159 abade4ea Lance Albertson
160 79224631 Lance Albertson
format_disk0() {
161 9a259787 Lance Albertson
    local sfdisk_cmd="$SFDISK -uM -H 255 -S 63 --quiet --Linux $1"
162 77449e7c Lance Albertson
    if [  "${SWAP}" = "yes" -a -z "${KERNEL_PATH}" ] ; then
163 e21b8802 Lance Albertson
        # Create three partitions:
164 e21b8802 Lance Albertson
        # 1 - 100MB /boot, bootable
165 e21b8802 Lance Albertson
        # 2 - Size of Memory, swap
166 e21b8802 Lance Albertson
        # 3 - Rest
167 77449e7c Lance Albertson
        $sfdisk_cmd <<EOF
168 22b570d6 Lance Albertson
,100,L,*
169 fd786991 Lance Albertson
,${SWAP_SIZE},S
170 22b570d6 Lance Albertson
,,L
171 79224631 Lance Albertson
EOF
172 77449e7c Lance Albertson
    elif [  "${SWAP}" = "no" -a -z "${KERNEL_PATH}" ] ; then
173 e21b8802 Lance Albertson
        # Create two partitions:
174 e21b8802 Lance Albertson
        # 1 - 100MB /boot, bootable
175 e21b8802 Lance Albertson
        # 2 - Rest
176 77449e7c Lance Albertson
        $sfdisk_cmd <<EOF
177 e21b8802 Lance Albertson
,100,L,*
178 e21b8802 Lance Albertson
,,L
179 e21b8802 Lance Albertson
EOF
180 77449e7c Lance Albertson
    elif [  "${SWAP}" = "yes" -a -n "${KERNEL_PATH}" ] ; then
181 77449e7c Lance Albertson
        # Create two partitions:
182 77449e7c Lance Albertson
        # 1 - Size of Memory, swap
183 77449e7c Lance Albertson
        # 2 - Rest
184 77449e7c Lance Albertson
        $sfdisk_cmd <<EOF
185 fd786991 Lance Albertson
,$SWAP_SIZE,S
186 77449e7c Lance Albertson
,,L
187 77449e7c Lance Albertson
EOF
188 77449e7c Lance Albertson
    elif [  "${SWAP}" = "no" -a -n "${KERNEL_PATH}" ] ; then
189 77449e7c Lance Albertson
        # Create two partitions:
190 77449e7c Lance Albertson
        # 1 - Whole
191 77449e7c Lance Albertson
        $sfdisk_cmd <<EOF
192 77449e7c Lance Albertson
,,L
193 77449e7c Lance Albertson
EOF
194 e21b8802 Lance Albertson
    fi
195 79224631 Lance Albertson
}
196 79224631 Lance Albertson
197 cc927a76 Lance Albertson
mkfs_disk0() {
198 4c96e490 Lance Albertson
    local mkfs="mkfs.${FILESYSTEM}"
199 cc927a76 Lance Albertson
    # Format /
200 4c96e490 Lance Albertson
    $mkfs -Fq -L / $root_dev
201 77449e7c Lance Albertson
    # Format /boot
202 77449e7c Lance Albertson
    if [ -n "${boot_dev}" ] ; then
203 4c96e490 Lance Albertson
        $mkfs -Fq -L /boot $boot_dev
204 77449e7c Lance Albertson
    fi
205 77449e7c Lance Albertson
    # Format swap
206 77449e7c Lance Albertson
    if [ -n "${swap_dev}" ] ; then
207 cc927a76 Lance Albertson
        # Format swap
208 70054ca5 Lance Albertson
        mkswap -f $swap_dev
209 cc927a76 Lance Albertson
    fi
210 cc927a76 Lance Albertson
}
211 cc927a76 Lance Albertson
212 b05b1ab6 Lance Albertson
mount_disk0() {
213 77449e7c Lance Albertson
    local target=$1
214 3173a4bc Lance Albertson
    mount $root_dev $target
215 3173a4bc Lance Albertson
    CLEANUP+=("umount $target")
216 77449e7c Lance Albertson
    if [ -n "${boot_dev}" ] ; then
217 77449e7c Lance Albertson
        $MKDIR_P $target/boot
218 77449e7c Lance Albertson
        mount $boot_dev $target/boot
219 77449e7c Lance Albertson
        CLEANUP+=("umount $target/boot")
220 77449e7c Lance Albertson
    fi
221 b05b1ab6 Lance Albertson
}
222 b05b1ab6 Lance Albertson
223 79224631 Lance Albertson
map_disk0() {
224 77449e7c Lance Albertson
    blockdev="$1"
225 77449e7c Lance Albertson
    filesystem_dev_base=`$KPARTX -l -p- $blockdev | \
226 77449e7c Lance Albertson
                            grep -m 1 -- "-1.*$blockdev" | \
227 77449e7c Lance Albertson
                            $AWK '{print $1}'`
228 77449e7c Lance Albertson
    if [ -z "$filesystem_dev_base" ]; then
229 77449e7c Lance Albertson
        log_error "Cannot interpret kpartx output and get partition mapping"
230 77449e7c Lance Albertson
        exit 1
231 77449e7c Lance Albertson
    fi
232 77449e7c Lance Albertson
    $KPARTX -a -p- $blockdev > /dev/null
233 77449e7c Lance Albertson
    filesystem_dev="/dev/mapper/${filesystem_dev_base/%-1/}"
234 77449e7c Lance Albertson
    if [ ! -b "/dev/mapper/$filesystem_dev_base" ]; then
235 77449e7c Lance Albertson
        log_error "Can't find kpartx mapped partition: /dev/mapper/$filesystem_dev_base"
236 77449e7c Lance Albertson
        exit 1
237 77449e7c Lance Albertson
    fi
238 494927a8 Lance Albertson
    echo "$filesystem_dev"
239 494927a8 Lance Albertson
}
240 494927a8 Lance Albertson
241 494927a8 Lance Albertson
map_partition() {
242 494927a8 Lance Albertson
    filesystem_dev="$1"
243 494927a8 Lance Albertson
    partition="$2"
244 77449e7c Lance Albertson
    if [ "${SWAP}" = "yes" -a -z "${KERNEL_PATH}" ] ; then
245 494927a8 Lance Albertson
        boot_dev="${filesystem_dev}-1"
246 494927a8 Lance Albertson
        swap_dev="${filesystem_dev}-2"
247 494927a8 Lance Albertson
        root_dev="${filesystem_dev}-3"
248 77449e7c Lance Albertson
    elif [ "${SWAP}" = "no" -a -z "${KERNEL_PATH}" ] ; then
249 494927a8 Lance Albertson
        boot_dev="${filesystem_dev}-1"
250 494927a8 Lance Albertson
        root_dev="${filesystem_dev}-2"
251 77449e7c Lance Albertson
    elif [ "${SWAP}" = "yes" -a -n "${KERNEL_PATH}" ] ; then
252 494927a8 Lance Albertson
        swap_dev="${filesystem_dev}-1"
253 494927a8 Lance Albertson
        root_dev="${filesystem_dev}-2"
254 77449e7c Lance Albertson
    elif [ "${SWAP}" = "no" -a -n "${KERNEL_PATH}" ] ; then
255 494927a8 Lance Albertson
        root_dev="${filesystem_dev}-1"
256 77449e7c Lance Albertson
    fi
257 494927a8 Lance Albertson
    echo "$(eval "echo \${$(echo ${partition}_dev)"})"
258 79224631 Lance Albertson
}
259 79224631 Lance Albertson
260 79224631 Lance Albertson
unmap_disk0() {
261 8d0132dc Lance Albertson
  $KPARTX -d -p- $1
262 79224631 Lance Albertson
}
263 79224631 Lance Albertson
264 3903b7f1 Lance Albertson
setup_fstab() {
265 4c96e490 Lance Albertson
    local target=$1 fs=${FILESYSTEM}
266 ecd82584 Lance Albertson
    get_os_type $target
267 3903b7f1 Lance Albertson
    cat > $target/etc/fstab <<EOF
268 3903b7f1 Lance Albertson
# /etc/fstab: static file system information.
269 3903b7f1 Lance Albertson
#
270 3903b7f1 Lance Albertson
# <file system>   <mount point>   <type>  <options>       <dump>  <pass>
271 4c96e490 Lance Albertson
UUID=$root_uuid   /               $fs     defaults        0       1
272 3903b7f1 Lance Albertson
proc              /proc           proc    defaults        0       0
273 3903b7f1 Lance Albertson
EOF
274 3903b7f1 Lance Albertson
275 0877f9c0 Lance Albertson
if [ -n "$boot_dev" -a -n "$boot_uuid" ] ; then
276 0877f9c0 Lance Albertson
    cat >> $target/etc/fstab <<EOF
277 4c96e490 Lance Albertson
UUID=$boot_uuid   /boot           $fs     defaults        1       2
278 3903b7f1 Lance Albertson
EOF
279 0877f9c0 Lance Albertson
fi
280 3903b7f1 Lance Albertson
281 0877f9c0 Lance Albertson
if [ -n "$swap_dev" -a -n "$swap_uuid" ] ; then
282 0877f9c0 Lance Albertson
    cat >> $target/etc/fstab <<EOF
283 3903b7f1 Lance Albertson
UUID=$swap_uuid   swap            swap    defaults        0       0
284 3903b7f1 Lance Albertson
EOF
285 0877f9c0 Lance Albertson
fi
286 3903b7f1 Lance Albertson
287 3903b7f1 Lance Albertson
# OS Specific fstabs
288 0877f9c0 Lance Albertson
if [ "$OS_TYPE" = "redhat" ] ; then
289 0877f9c0 Lance Albertson
    cat >> $target/etc/fstab <<EOF
290 3903b7f1 Lance Albertson
tmpfs             /dev/shm        tmpfs   defaults        0       0
291 3903b7f1 Lance Albertson
devpts            /dev/pts        devpts  gid=5,mode=620  0       0
292 3903b7f1 Lance Albertson
sysfs             /sys            sysfs   defaults        0       0
293 3903b7f1 Lance Albertson
EOF
294 0877f9c0 Lance Albertson
fi
295 3903b7f1 Lance Albertson
296 0877f9c0 Lance Albertson
if [ "$OS_TYPE" = "gentoo" ] ; then
297 0877f9c0 Lance Albertson
    cat >> $target/etc/fstab <<EOF
298 3903b7f1 Lance Albertson
shm               /dev/shm        tmpfs   nodev,nosuid,noexec 0   0
299 3903b7f1 Lance Albertson
EOF
300 0877f9c0 Lance Albertson
fi
301 3903b7f1 Lance Albertson
}
302 3903b7f1 Lance Albertson
303 9f4b2c31 Lance Albertson
setup_console() {
304 9f4b2c31 Lance Albertson
    local target=$1
305 9f4b2c31 Lance Albertson
    if [ -z "$target" ] ; then
306 9f4b2c31 Lance Albertson
        log_error "target not set for setup_console"
307 9f4b2c31 Lance Albertson
        exit 1
308 9f4b2c31 Lance Albertson
    fi
309 9f4b2c31 Lance Albertson
    # Upstart is on this system, so do this instead
310 9f4b2c31 Lance Albertson
    if [ -e ${target}/etc/event.d/tty1 ] ; then
311 9f4b2c31 Lance Albertson
        cat ${target}/etc/event.d/tty1 | sed -re 's/tty1/ttyS0/' \
312 9f4b2c31 Lance Albertson
            > ${target}/etc/event.d/ttyS0
313 9f4b2c31 Lance Albertson
        return
314 9f4b2c31 Lance Albertson
    fi
315 0b56457d Lance Albertson
    # upstart in karmic and newer
316 0b56457d Lance Albertson
    if [ -e ${target}/etc/init/tty1.conf ] ; then
317 0b56457d Lance Albertson
        cat ${target}/etc/init/tty1.conf | \
318 230410df Lance Albertson
        sed -re 's/^exec.*/exec \/sbin\/getty -L 115200 ttyS0 vt102/' \
319 0b56457d Lance Albertson
            > ${target}/etc/init/ttyS0.conf
320 230410df Lance Albertson
        sed -ie 's/tty1/ttyS0/g' ${target}/etc/init/ttyS0.conf
321 0b56457d Lance Albertson
        return
322 0b56457d Lance Albertson
    fi
323 9f4b2c31 Lance Albertson
    get_os $target
324 9f4b2c31 Lance Albertson
    case $OPERATING_SYSTEM in
325 9f4b2c31 Lance Albertson
        gentoo)
326 9f4b2c31 Lance Albertson
            sed -i -e 's/.*ttyS0.*/s0:12345:respawn:\/sbin\/agetty 115200 ttyS0 vt100/' \
327 9f4b2c31 Lance Albertson
                ${target}/etc/inittab
328 9f4b2c31 Lance Albertson
            ;;
329 9f4b2c31 Lance Albertson
        centos)
330 6f7ac139 Lance Albertson
            echo "s0:12345:respawn:/sbin/agetty 115200 ttyS0 vt100" >> \
331 9f4b2c31 Lance Albertson
                ${target}/etc/inittab
332 9f4b2c31 Lance Albertson
            ;;
333 9f4b2c31 Lance Albertson
        debian|ubuntu)
334 a3e24c37 Lance Albertson
            sed -i -e 's/.*T0.*/T0:23:respawn:\/sbin\/getty -L ttyS0 115200 vt100/' \
335 9f4b2c31 Lance Albertson
                ${target}/etc/inittab
336 9f4b2c31 Lance Albertson
            ;;
337 9f4b2c31 Lance Albertson
        *)
338 9f4b2c31 Lance Albertson
            echo "No support for your OS in instance-image, skipping..."
339 9f4b2c31 Lance Albertson
            ;;
340 9f4b2c31 Lance Albertson
    esac
341 9f4b2c31 Lance Albertson
}
342 9f4b2c31 Lance Albertson
343 79224631 Lance Albertson
cleanup() {
344 79224631 Lance Albertson
  if [ ${#CLEANUP[*]} -gt 0 ]; then
345 79224631 Lance Albertson
    LAST_ELEMENT=$((${#CLEANUP[*]}-1))
346 79224631 Lance Albertson
    REVERSE_INDEXES=$(seq ${LAST_ELEMENT} -1 0)
347 79224631 Lance Albertson
    for i in $REVERSE_INDEXES; do
348 79224631 Lance Albertson
      ${CLEANUP[$i]}
349 79224631 Lance Albertson
    done
350 79224631 Lance Albertson
  fi
351 79224631 Lance Albertson
}
352 79224631 Lance Albertson
353 79224631 Lance Albertson
trap cleanup EXIT
354 79224631 Lance Albertson
355 c4661256 Lance Albertson
DEFAULT_FILE="@DEFAULTS_DIR@/ganeti-instance-image"
356 79224631 Lance Albertson
if [ -f "$DEFAULT_FILE" ]; then
357 79224631 Lance Albertson
    . "$DEFAULT_FILE"
358 79224631 Lance Albertson
fi
359 79224631 Lance Albertson
360 79224631 Lance Albertson
# note: we don't set a default mirror since debian and ubuntu have
361 79224631 Lance Albertson
# different defaults, and it's better to use the default
362 79224631 Lance Albertson
363 79224631 Lance Albertson
# only if the user want to specify a mirror in the defaults file we
364 79224631 Lance Albertson
# will use it, this declaration is to make sure the variable is set
365 fcce5224 Lance Albertson
: ${CDINSTALL:="yes"}
366 e21b8802 Lance Albertson
: ${SWAP:="yes"}
367 fd786991 Lance Albertson
: ${SWAP_SIZE:="${INSTANCE_BE_memory}"}
368 4c96e490 Lance Albertson
: ${FILESYSTEM:="ext3"}
369 134c11c3 Lance Albertson
: ${IMAGE_NAME:=""}
370 b05b1ab6 Lance Albertson
: ${IMAGE_TYPE:="qemu"}
371 79224631 Lance Albertson
: ${ARCH:=""}
372 f5aa7725 Lance Albertson
: ${CUSTOMIZE_DIR:="@sysconfdir@/ganeti/instance-image.d"}
373 f5aa7725 Lance Albertson
: ${VARIANTS_DIR:="@sysconfdir@/ganeti/instance-image/variants"}
374 2e0988ec Lance Albertson
: ${IMAGE_DIR:="@localstatedir@/cache/ganeti-instance-image"}
375 611fa6b0 Lance Albertson
: ${IMAGE_DEBUG:="0"}
376 f7959feb Lance Albertson
377 79224631 Lance Albertson
SCRIPT_NAME=$(basename $0)
378 77449e7c Lance Albertson
KERNEL_PATH="$INSTANCE_HV_kernel_path"
379 79224631 Lance Albertson
380 103d261e Lance Albertson
if [ -f /sbin/blkid -a -x /sbin/blkid ]; then
381 103d261e Lance Albertson
    VOL_ID="/sbin/blkid -o value -s UUID"
382 103d261e Lance Albertson
    VOL_TYPE="/sbin/blkid -o value -s TYPE"
383 103d261e Lance Albertson
else
384 103d261e Lance Albertson
    for dir in /lib/udev /sbin; do
385 103d261e Lance Albertson
        if [ -f $dir/vol_id -a -x $dir/vol_id ]; then
386 103d261e Lance Albertson
            VOL_ID="$dir/vol_id -u"
387 103d261e Lance Albertson
            VOL_TYPE="$dir/vol_id -t"
388 103d261e Lance Albertson
        fi
389 103d261e Lance Albertson
    done
390 103d261e Lance Albertson
fi
391 103d261e Lance Albertson
392 103d261e Lance Albertson
if [ -z "$VOL_ID" ]; then
393 103d261e Lance Albertson
    log_error "vol_id or blkid not found, please install udev or util-linux"
394 103d261e Lance Albertson
    exit 1
395 103d261e Lance Albertson
fi
396 103d261e Lance Albertson
397 103d261e Lance Albertson
398 79224631 Lance Albertson
if [ -z "$OS_API_VERSION" -o "$OS_API_VERSION" = "5" ]; then
399 79224631 Lance Albertson
  OS_API_VERSION=5
400 79224631 Lance Albertson
  GETOPT_RESULT=`getopt -o o:n:i:b:s: -n '$0' -- "$@"`
401 79224631 Lance Albertson
  if [ $? != 0 ] ; then log_error "Terminating..."; exit 1 ; fi
402 79224631 Lance Albertson
  get_api5_arguments $GETOPT_RESULT
403 79224631 Lance Albertson
elif [ "$OS_API_VERSION" = "10" -o "$OS_API_VERSION" = "15" ]; then
404 79224631 Lance Albertson
  get_api10_arguments
405 79224631 Lance Albertson
else
406 79224631 Lance Albertson
  log_error "Unknown OS API VERSION $OS_API_VERSION"
407 79224631 Lance Albertson
  exit 1
408 79224631 Lance Albertson
fi
409 79224631 Lance Albertson
410 79224631 Lance Albertson
if [ -n "$OS_VARIANT" ]; then
411 79224631 Lance Albertson
  if [ ! -d "$VARIANTS_DIR" ]; then
412 79224631 Lance Albertson
    log_error "OS Variants directory $VARIANTS_DIR doesn't exist"
413 79224631 Lance Albertson
    exit 1
414 79224631 Lance Albertson
  fi
415 79224631 Lance Albertson
  VARIANT_CONFIG="$VARIANTS_DIR/$OS_VARIANT.conf"
416 79224631 Lance Albertson
  if [ -f "$VARIANT_CONFIG" ]; then
417 79224631 Lance Albertson
    . "$VARIANT_CONFIG"
418 79224631 Lance Albertson
  else
419 79224631 Lance Albertson
    if grep -qxF "$OS_VARIANT" variants.list; then
420 f5aa7725 Lance Albertson
      log_error "ERROR: instance-image configuration error"
421 79224631 Lance Albertson
      log_error "  Published variant $OS_VARIANT is missing its config file"
422 79224631 Lance Albertson
      log_error "  Please create $VARIANT_CONFIG or unpublish the variant"
423 79224631 Lance Albertson
      log_error "  (by removing $OS_VARIANT from variants.list)"
424 79224631 Lance Albertson
    else
425 79224631 Lance Albertson
      log_error "Unofficial variant $OS_VARIANT is unsupported"
426 79224631 Lance Albertson
      log_error "Most probably this is a user error, forcing a wrong name"
427 79224631 Lance Albertson
      log_error "To support this variant please create file $VARIANT_CONFIG"
428 79224631 Lance Albertson
    fi
429 79224631 Lance Albertson
    exit 1
430 79224631 Lance Albertson
  fi
431 79224631 Lance Albertson
fi