Statistics
| Branch: | Revision:

root / common.sh.in @ 2ec7c7a8

History | View | Annotate | Download (12.8 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 2ec7c7a8 Nikos Skalkotos
MKDIR_P="@MKDIR_P@"
22 8d0132dc Lance Albertson
DUMP="@DUMP@"
23 8d0132dc Lance Albertson
LOSETUP="@LOSETUP@"
24 8d0132dc Lance Albertson
KPARTX="@KPARTX@"
25 8d0132dc Lance Albertson
SFDISK="@SFDISK@"
26 ab712029 Lance Albertson
QEMU_IMG="@QEMU_IMG@"
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 9014a39d Lance Albertson
    [ "$IMAGE_DEBUG" == "1" -o "$IMAGE_DEBUG" == "yes" ] &&  $@ || :
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 99efa839 Lance Albertson
    local sfdisk_cmd="$SFDISK -uM -H 255 -S 63 --quiet --Linux --DOS $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 78422bb3 Lance Albertson
        $sfdisk_cmd > /dev/null <<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 78422bb3 Lance Albertson
        $sfdisk_cmd > /dev/null <<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 78422bb3 Lance Albertson
        $sfdisk_cmd > /dev/null <<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 78422bb3 Lance Albertson
        $sfdisk_cmd > /dev/null <<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 78422bb3 Lance Albertson
    $mkfs -Fq -L / $root_dev > /dev/null
201 77449e7c Lance Albertson
    # Format /boot
202 77449e7c Lance Albertson
    if [ -n "${boot_dev}" ] ; then
203 78422bb3 Lance Albertson
        $mkfs -Fq -L /boot $boot_dev > /dev/null
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 78422bb3 Lance Albertson
        mkswap -f $swap_dev > /dev/null
209 cc927a76 Lance Albertson
    fi
210 0bde4a2a Lance Albertson
    # During reinstalls, ext4 needs a little time after a mkfs so add it here
211 2146dd61 Lance Albertson
    # and also run a sync to be sure.
212 2146dd61 Lance Albertson
    sync
213 0bde4a2a Lance Albertson
    sleep 2
214 cc927a76 Lance Albertson
}
215 cc927a76 Lance Albertson
216 b05b1ab6 Lance Albertson
mount_disk0() {
217 77449e7c Lance Albertson
    local target=$1
218 3173a4bc Lance Albertson
    mount $root_dev $target
219 3173a4bc Lance Albertson
    CLEANUP+=("umount $target")
220 77449e7c Lance Albertson
    if [ -n "${boot_dev}" ] ; then
221 77449e7c Lance Albertson
        $MKDIR_P $target/boot
222 77449e7c Lance Albertson
        mount $boot_dev $target/boot
223 77449e7c Lance Albertson
        CLEANUP+=("umount $target/boot")
224 77449e7c Lance Albertson
    fi
225 1c571a34 Lance Albertson
    # sync the file systems before unmounting to ensure everything is flushed
226 1c571a34 Lance Albertson
    # out
227 1c571a34 Lance Albertson
    CLEANUP+=("sync")
228 b05b1ab6 Lance Albertson
}
229 b05b1ab6 Lance Albertson
230 79224631 Lance Albertson
map_disk0() {
231 77449e7c Lance Albertson
    blockdev="$1"
232 77449e7c Lance Albertson
    filesystem_dev_base=`$KPARTX -l -p- $blockdev | \
233 77449e7c Lance Albertson
                            grep -m 1 -- "-1.*$blockdev" | \
234 77449e7c Lance Albertson
                            $AWK '{print $1}'`
235 77449e7c Lance Albertson
    if [ -z "$filesystem_dev_base" ]; then
236 77449e7c Lance Albertson
        log_error "Cannot interpret kpartx output and get partition mapping"
237 77449e7c Lance Albertson
        exit 1
238 77449e7c Lance Albertson
    fi
239 77449e7c Lance Albertson
    $KPARTX -a -p- $blockdev > /dev/null
240 77449e7c Lance Albertson
    filesystem_dev="/dev/mapper/${filesystem_dev_base/%-1/}"
241 77449e7c Lance Albertson
    if [ ! -b "/dev/mapper/$filesystem_dev_base" ]; then
242 77449e7c Lance Albertson
        log_error "Can't find kpartx mapped partition: /dev/mapper/$filesystem_dev_base"
243 77449e7c Lance Albertson
        exit 1
244 77449e7c Lance Albertson
    fi
245 494927a8 Lance Albertson
    echo "$filesystem_dev"
246 494927a8 Lance Albertson
}
247 494927a8 Lance Albertson
248 494927a8 Lance Albertson
map_partition() {
249 494927a8 Lance Albertson
    filesystem_dev="$1"
250 494927a8 Lance Albertson
    partition="$2"
251 77449e7c Lance Albertson
    if [ "${SWAP}" = "yes" -a -z "${KERNEL_PATH}" ] ; then
252 494927a8 Lance Albertson
        boot_dev="${filesystem_dev}-1"
253 494927a8 Lance Albertson
        swap_dev="${filesystem_dev}-2"
254 494927a8 Lance Albertson
        root_dev="${filesystem_dev}-3"
255 77449e7c Lance Albertson
    elif [ "${SWAP}" = "no" -a -z "${KERNEL_PATH}" ] ; then
256 494927a8 Lance Albertson
        boot_dev="${filesystem_dev}-1"
257 494927a8 Lance Albertson
        root_dev="${filesystem_dev}-2"
258 77449e7c Lance Albertson
    elif [ "${SWAP}" = "yes" -a -n "${KERNEL_PATH}" ] ; then
259 494927a8 Lance Albertson
        swap_dev="${filesystem_dev}-1"
260 494927a8 Lance Albertson
        root_dev="${filesystem_dev}-2"
261 77449e7c Lance Albertson
    elif [ "${SWAP}" = "no" -a -n "${KERNEL_PATH}" ] ; then
262 494927a8 Lance Albertson
        root_dev="${filesystem_dev}-1"
263 77449e7c Lance Albertson
    fi
264 494927a8 Lance Albertson
    echo "$(eval "echo \${$(echo ${partition}_dev)"})"
265 79224631 Lance Albertson
}
266 79224631 Lance Albertson
267 79224631 Lance Albertson
unmap_disk0() {
268 8d0132dc Lance Albertson
  $KPARTX -d -p- $1
269 79224631 Lance Albertson
}
270 79224631 Lance Albertson
271 3903b7f1 Lance Albertson
setup_fstab() {
272 4c96e490 Lance Albertson
    local target=$1 fs=${FILESYSTEM}
273 ecd82584 Lance Albertson
    get_os_type $target
274 3903b7f1 Lance Albertson
    cat > $target/etc/fstab <<EOF
275 3903b7f1 Lance Albertson
# /etc/fstab: static file system information.
276 3903b7f1 Lance Albertson
#
277 3903b7f1 Lance Albertson
# <file system>   <mount point>   <type>  <options>       <dump>  <pass>
278 4c96e490 Lance Albertson
UUID=$root_uuid   /               $fs     defaults        0       1
279 3903b7f1 Lance Albertson
proc              /proc           proc    defaults        0       0
280 3903b7f1 Lance Albertson
EOF
281 3903b7f1 Lance Albertson
282 0877f9c0 Lance Albertson
if [ -n "$boot_dev" -a -n "$boot_uuid" ] ; then
283 0877f9c0 Lance Albertson
    cat >> $target/etc/fstab <<EOF
284 4c96e490 Lance Albertson
UUID=$boot_uuid   /boot           $fs     defaults        1       2
285 3903b7f1 Lance Albertson
EOF
286 0877f9c0 Lance Albertson
fi
287 3903b7f1 Lance Albertson
288 0877f9c0 Lance Albertson
if [ -n "$swap_dev" -a -n "$swap_uuid" ] ; then
289 0877f9c0 Lance Albertson
    cat >> $target/etc/fstab <<EOF
290 3903b7f1 Lance Albertson
UUID=$swap_uuid   swap            swap    defaults        0       0
291 3903b7f1 Lance Albertson
EOF
292 0877f9c0 Lance Albertson
fi
293 3903b7f1 Lance Albertson
294 3903b7f1 Lance Albertson
# OS Specific fstabs
295 0877f9c0 Lance Albertson
if [ "$OS_TYPE" = "redhat" ] ; then
296 0877f9c0 Lance Albertson
    cat >> $target/etc/fstab <<EOF
297 3903b7f1 Lance Albertson
tmpfs             /dev/shm        tmpfs   defaults        0       0
298 3903b7f1 Lance Albertson
devpts            /dev/pts        devpts  gid=5,mode=620  0       0
299 3903b7f1 Lance Albertson
sysfs             /sys            sysfs   defaults        0       0
300 3903b7f1 Lance Albertson
EOF
301 0877f9c0 Lance Albertson
fi
302 3903b7f1 Lance Albertson
303 0877f9c0 Lance Albertson
if [ "$OS_TYPE" = "gentoo" ] ; then
304 0877f9c0 Lance Albertson
    cat >> $target/etc/fstab <<EOF
305 3903b7f1 Lance Albertson
shm               /dev/shm        tmpfs   nodev,nosuid,noexec 0   0
306 3903b7f1 Lance Albertson
EOF
307 0877f9c0 Lance Albertson
fi
308 3903b7f1 Lance Albertson
}
309 3903b7f1 Lance Albertson
310 9f4b2c31 Lance Albertson
setup_console() {
311 9f4b2c31 Lance Albertson
    local target=$1
312 9f4b2c31 Lance Albertson
    if [ -z "$target" ] ; then
313 9f4b2c31 Lance Albertson
        log_error "target not set for setup_console"
314 9f4b2c31 Lance Albertson
        exit 1
315 9f4b2c31 Lance Albertson
    fi
316 9f4b2c31 Lance Albertson
    # Upstart is on this system, so do this instead
317 9f4b2c31 Lance Albertson
    if [ -e ${target}/etc/event.d/tty1 ] ; then
318 9f4b2c31 Lance Albertson
        cat ${target}/etc/event.d/tty1 | sed -re 's/tty1/ttyS0/' \
319 9f4b2c31 Lance Albertson
            > ${target}/etc/event.d/ttyS0
320 9f4b2c31 Lance Albertson
        return
321 9f4b2c31 Lance Albertson
    fi
322 0b56457d Lance Albertson
    # upstart in karmic and newer
323 0b56457d Lance Albertson
    if [ -e ${target}/etc/init/tty1.conf ] ; then
324 0b56457d Lance Albertson
        cat ${target}/etc/init/tty1.conf | \
325 230410df Lance Albertson
        sed -re 's/^exec.*/exec \/sbin\/getty -L 115200 ttyS0 vt102/' \
326 0b56457d Lance Albertson
            > ${target}/etc/init/ttyS0.conf
327 230410df Lance Albertson
        sed -ie 's/tty1/ttyS0/g' ${target}/etc/init/ttyS0.conf
328 0b56457d Lance Albertson
        return
329 0b56457d Lance Albertson
    fi
330 9f4b2c31 Lance Albertson
    get_os $target
331 9f4b2c31 Lance Albertson
    case $OPERATING_SYSTEM in
332 9f4b2c31 Lance Albertson
        gentoo)
333 9f4b2c31 Lance Albertson
            sed -i -e 's/.*ttyS0.*/s0:12345:respawn:\/sbin\/agetty 115200 ttyS0 vt100/' \
334 9f4b2c31 Lance Albertson
                ${target}/etc/inittab
335 9f4b2c31 Lance Albertson
            ;;
336 9f4b2c31 Lance Albertson
        centos)
337 6f7ac139 Lance Albertson
            echo "s0:12345:respawn:/sbin/agetty 115200 ttyS0 vt100" >> \
338 9f4b2c31 Lance Albertson
                ${target}/etc/inittab
339 9f4b2c31 Lance Albertson
            ;;
340 9f4b2c31 Lance Albertson
        debian|ubuntu)
341 a3e24c37 Lance Albertson
            sed -i -e 's/.*T0.*/T0:23:respawn:\/sbin\/getty -L ttyS0 115200 vt100/' \
342 9f4b2c31 Lance Albertson
                ${target}/etc/inittab
343 9f4b2c31 Lance Albertson
            ;;
344 9f4b2c31 Lance Albertson
        *)
345 9f4b2c31 Lance Albertson
            echo "No support for your OS in instance-image, skipping..."
346 9f4b2c31 Lance Albertson
            ;;
347 9f4b2c31 Lance Albertson
    esac
348 9f4b2c31 Lance Albertson
}
349 9f4b2c31 Lance Albertson
350 79224631 Lance Albertson
cleanup() {
351 79224631 Lance Albertson
  if [ ${#CLEANUP[*]} -gt 0 ]; then
352 79224631 Lance Albertson
    LAST_ELEMENT=$((${#CLEANUP[*]}-1))
353 79224631 Lance Albertson
    REVERSE_INDEXES=$(seq ${LAST_ELEMENT} -1 0)
354 79224631 Lance Albertson
    for i in $REVERSE_INDEXES; do
355 79224631 Lance Albertson
      ${CLEANUP[$i]}
356 79224631 Lance Albertson
    done
357 79224631 Lance Albertson
  fi
358 79224631 Lance Albertson
}
359 79224631 Lance Albertson
360 79224631 Lance Albertson
trap cleanup EXIT
361 79224631 Lance Albertson
362 9cdb305c Lance Albertson
DEFAULT_FILE="@DEFAULT_DIR@/ganeti-instance-image"
363 79224631 Lance Albertson
if [ -f "$DEFAULT_FILE" ]; then
364 79224631 Lance Albertson
    . "$DEFAULT_FILE"
365 79224631 Lance Albertson
fi
366 79224631 Lance Albertson
367 79224631 Lance Albertson
# note: we don't set a default mirror since debian and ubuntu have
368 79224631 Lance Albertson
# different defaults, and it's better to use the default
369 79224631 Lance Albertson
370 79224631 Lance Albertson
# only if the user want to specify a mirror in the defaults file we
371 79224631 Lance Albertson
# will use it, this declaration is to make sure the variable is set
372 828670a1 Lance Albertson
: ${CDINSTALL:="no"}
373 e21b8802 Lance Albertson
: ${SWAP:="yes"}
374 fd786991 Lance Albertson
: ${SWAP_SIZE:="${INSTANCE_BE_memory}"}
375 4c96e490 Lance Albertson
: ${FILESYSTEM:="ext3"}
376 be751693 Lance Albertson
: ${KERNEL_ARGS=""}
377 84472880 Lance Albertson
: ${OVERLAY=""}
378 134c11c3 Lance Albertson
: ${IMAGE_NAME:=""}
379 be751693 Lance Albertson
: ${IMAGE_TYPE:="dump"}
380 8727c57d Lance Albertson
: ${NOMOUNT:="no"}
381 79224631 Lance Albertson
: ${ARCH:=""}
382 549118f0 Lance Albertson
: ${CUSTOMIZE_DIR:="@sysconfdir@/ganeti/instance-image/hooks"}
383 f5aa7725 Lance Albertson
: ${VARIANTS_DIR:="@sysconfdir@/ganeti/instance-image/variants"}
384 7193962d Lance Albertson
: ${NETWORKS_DIR:="@sysconfdir@/ganeti/instance-image/networks"}
385 84472880 Lance Albertson
: ${OVERLAYS_DIR:="@sysconfdir@/ganeti/instance-image/overlays"}
386 2e0988ec Lance Albertson
: ${IMAGE_DIR:="@localstatedir@/cache/ganeti-instance-image"}
387 9014a39d Lance Albertson
: ${IMAGE_DEBUG:="no"}
388 f7959feb Lance Albertson
389 79224631 Lance Albertson
SCRIPT_NAME=$(basename $0)
390 77449e7c Lance Albertson
KERNEL_PATH="$INSTANCE_HV_kernel_path"
391 79224631 Lance Albertson
392 103d261e Lance Albertson
if [ -f /sbin/blkid -a -x /sbin/blkid ]; then
393 93fa6b1e Lance Albertson
    VOL_ID="/sbin/blkid -c /dev/null -o value -s UUID"
394 93fa6b1e Lance Albertson
    VOL_TYPE="/sbin/blkid -c /dev/null -o value -s TYPE"
395 103d261e Lance Albertson
else
396 103d261e Lance Albertson
    for dir in /lib/udev /sbin; do
397 103d261e Lance Albertson
        if [ -f $dir/vol_id -a -x $dir/vol_id ]; then
398 103d261e Lance Albertson
            VOL_ID="$dir/vol_id -u"
399 103d261e Lance Albertson
            VOL_TYPE="$dir/vol_id -t"
400 103d261e Lance Albertson
        fi
401 103d261e Lance Albertson
    done
402 103d261e Lance Albertson
fi
403 103d261e Lance Albertson
404 103d261e Lance Albertson
if [ -z "$VOL_ID" ]; then
405 103d261e Lance Albertson
    log_error "vol_id or blkid not found, please install udev or util-linux"
406 103d261e Lance Albertson
    exit 1
407 103d261e Lance Albertson
fi
408 103d261e Lance Albertson
409 103d261e Lance Albertson
410 79224631 Lance Albertson
if [ -z "$OS_API_VERSION" -o "$OS_API_VERSION" = "5" ]; then
411 79224631 Lance Albertson
  OS_API_VERSION=5
412 79224631 Lance Albertson
  GETOPT_RESULT=`getopt -o o:n:i:b:s: -n '$0' -- "$@"`
413 79224631 Lance Albertson
  if [ $? != 0 ] ; then log_error "Terminating..."; exit 1 ; fi
414 79224631 Lance Albertson
  get_api5_arguments $GETOPT_RESULT
415 79224631 Lance Albertson
elif [ "$OS_API_VERSION" = "10" -o "$OS_API_VERSION" = "15" ]; then
416 79224631 Lance Albertson
  get_api10_arguments
417 79224631 Lance Albertson
else
418 79224631 Lance Albertson
  log_error "Unknown OS API VERSION $OS_API_VERSION"
419 79224631 Lance Albertson
  exit 1
420 79224631 Lance Albertson
fi
421 79224631 Lance Albertson
422 79224631 Lance Albertson
if [ -n "$OS_VARIANT" ]; then
423 79224631 Lance Albertson
  if [ ! -d "$VARIANTS_DIR" ]; then
424 79224631 Lance Albertson
    log_error "OS Variants directory $VARIANTS_DIR doesn't exist"
425 79224631 Lance Albertson
    exit 1
426 79224631 Lance Albertson
  fi
427 79224631 Lance Albertson
  VARIANT_CONFIG="$VARIANTS_DIR/$OS_VARIANT.conf"
428 79224631 Lance Albertson
  if [ -f "$VARIANT_CONFIG" ]; then
429 79224631 Lance Albertson
    . "$VARIANT_CONFIG"
430 79224631 Lance Albertson
  else
431 79224631 Lance Albertson
    if grep -qxF "$OS_VARIANT" variants.list; then
432 f5aa7725 Lance Albertson
      log_error "ERROR: instance-image configuration error"
433 79224631 Lance Albertson
      log_error "  Published variant $OS_VARIANT is missing its config file"
434 79224631 Lance Albertson
      log_error "  Please create $VARIANT_CONFIG or unpublish the variant"
435 79224631 Lance Albertson
      log_error "  (by removing $OS_VARIANT from variants.list)"
436 79224631 Lance Albertson
    else
437 79224631 Lance Albertson
      log_error "Unofficial variant $OS_VARIANT is unsupported"
438 79224631 Lance Albertson
      log_error "Most probably this is a user error, forcing a wrong name"
439 79224631 Lance Albertson
      log_error "To support this variant please create file $VARIANT_CONFIG"
440 79224631 Lance Albertson
    fi
441 79224631 Lance Albertson
    exit 1
442 79224631 Lance Albertson
  fi
443 79224631 Lance Albertson
fi