Statistics
| Branch: | Revision:

root / common.sh.in @ df24aef4

History | View | Annotate | Download (14.7 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 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 ab462591 Constantinos Venetsanopoulos
get_api20_parameters() {
102 8e5449f1 Constantinos Venetsanopoulos
  if [ -z "$OSP_IMG_ID" -o -z "$OSP_IMG_FORMAT" -o -z "$OSP_IMG_PASSWD" ]; then
103 ab462591 Constantinos Venetsanopoulos
    log_error "Missing OS API Parameter:"
104 8e5449f1 Constantinos Venetsanopoulos
    log_error "(OSP_IMG_ID or OSP_IMG_FORMAT or OSP_IMG_PASSWD)"
105 ab462591 Constantinos Venetsanopoulos
    exit 1
106 ab462591 Constantinos Venetsanopoulos
  fi
107 ab462591 Constantinos Venetsanopoulos
  IMG_ID=$OSP_IMG_ID
108 8e5449f1 Constantinos Venetsanopoulos
  IMG_FORMAT=$OSP_IMG_FORMAT
109 ab462591 Constantinos Venetsanopoulos
  IMG_PASSWD=$OSP_IMG_PASSWD
110 ab462591 Constantinos Venetsanopoulos
}
111 ab462591 Constantinos Venetsanopoulos
112 f6f223b8 Lance Albertson
get_os_type() {
113 abade4ea Lance Albertson
    target=$1
114 abade4ea Lance Albertson
    if [ -z "${target}" ] ; then
115 abade4ea Lance Albertson
        log_error "target is not set in get_os_type"
116 abade4ea Lance Albertson
        exit 1
117 abade4ea Lance Albertson
    fi
118 abade4ea Lance Albertson
    if [ -e ${target}/etc/redhat-release ] ; then
119 f6f223b8 Lance Albertson
        OS_TYPE="redhat"
120 abade4ea Lance Albertson
    elif [ -e ${target}/etc/debian_version ] ; then
121 f6f223b8 Lance Albertson
        OS_TYPE="debian"
122 abade4ea Lance Albertson
    elif [ -e ${target}/etc/gentoo-release ] ; then
123 f6f223b8 Lance Albertson
        OS_TYPE="gentoo"
124 abade4ea Lance Albertson
    elif [ -e ${target}/etc/SuSE-release ] ; then
125 f6f223b8 Lance Albertson
        OS_TYPE="suse"
126 f6f223b8 Lance Albertson
    fi
127 f6f223b8 Lance Albertson
}
128 f6f223b8 Lance Albertson
129 abade4ea Lance Albertson
get_os() {
130 abade4ea Lance Albertson
    target=$1
131 abade4ea Lance Albertson
    if [ -z "${target}" ] ; then
132 abade4ea Lance Albertson
        log_error "target is not set in get_os"
133 abade4ea Lance Albertson
        exit 1
134 abade4ea Lance Albertson
    fi
135 49ae2760 Lance Albertson
    lsb="/usr/bin/lsb_release"
136 47e547ca Nikos Skalkotos
    if [ -e ${target}/$lsb ] ; then
137 a97ea696 Lance Albertson
        OPERATING_SYSTEM="$(chroot ${target} ${lsb} -i -s | tr "[:upper:]" "[:lower:]")"
138 abade4ea Lance Albertson
    elif [ -e ${target}/etc/debian_version ] ; then
139 abade4ea Lance Albertson
        OPERATING_SYSTEM="debian"
140 abade4ea Lance Albertson
    elif [ -e ${target}/etc/gentoo-release ] ; then
141 abade4ea Lance Albertson
        OPERATING_SYSTEM="gentoo"
142 abade4ea Lance Albertson
    elif [ -e ${target}/etc/fedora-release ] ; then
143 abade4ea Lance Albertson
        OPERATING_SYSTEM="fedora"
144 9d35a15e Lance Albertson
    elif [ -e ${target}/etc/redhat-release ] ; then
145 abade4ea Lance Albertson
        if [ -n "$(grep -i centos ${target}/etc/redhat-release)" ] ; then
146 abade4ea Lance Albertson
            OPERATING_SYSTEM="centos"
147 abade4ea Lance Albertson
        else
148 abade4ea Lance Albertson
            OPERATING_SYSTEM="redhat"
149 abade4ea Lance Albertson
        fi
150 abade4ea Lance Albertson
    fi
151 abade4ea Lance Albertson
}
152 abade4ea Lance Albertson
153 abade4ea Lance Albertson
get_os_release() {
154 abade4ea Lance Albertson
    target=$1
155 abade4ea Lance Albertson
    if [ -z "${target}" ] ; then
156 abade4ea Lance Albertson
        log_error "target is not set in get_os_release"
157 abade4ea Lance Albertson
        exit 1
158 abade4ea Lance Albertson
    fi
159 49ae2760 Lance Albertson
    lsb="/usr/bin/lsb_release"
160 47e547ca Nikos Skalkotos
    if [ -e ${target}/$lsb ] ; then
161 a97ea696 Lance Albertson
        OS_RELEASE="$(chroot ${target} ${lsb} -r -s | tr "[:upper:]" "[:lower:]")"
162 abade4ea Lance Albertson
    elif [ -e ${target}/etc/debian_version ] ; then
163 abade4ea Lance Albertson
        OS_RELEASE="$(cat ${target}/etc/debian_version)"
164 abade4ea Lance Albertson
    elif [ -e ${target}/etc/fedora-release ] ; then
165 abade4ea Lance Albertson
        OS_RELEASE="$(cat ${target}/etc/fedora-release | awk '{print $3}')"
166 abade4ea Lance Albertson
    elif [ -e ${$target}/etc/redhat-release ] ; then
167 abade4ea Lance Albertson
        OS_RELEASE="$(cat ${target}/etc/redhat-release | awk '{print $3}')"
168 abade4ea Lance Albertson
    fi
169 abade4ea Lance Albertson
}
170 abade4ea Lance Albertson
171 79224631 Lance Albertson
format_disk0() {
172 99efa839 Lance Albertson
    local sfdisk_cmd="$SFDISK -uM -H 255 -S 63 --quiet --Linux --DOS $1"
173 df24aef4 Nikos Skalkotos
    if [  "${SWAP}" = "yes" -a "${BOOT}" = "yes" ] ; then
174 e21b8802 Lance Albertson
        # Create three partitions:
175 e21b8802 Lance Albertson
        # 1 - 100MB /boot, bootable
176 e21b8802 Lance Albertson
        # 2 - Size of Memory, swap
177 e21b8802 Lance Albertson
        # 3 - Rest
178 78422bb3 Lance Albertson
        $sfdisk_cmd > /dev/null <<EOF
179 22b570d6 Lance Albertson
,100,L,*
180 fd786991 Lance Albertson
,${SWAP_SIZE},S
181 22b570d6 Lance Albertson
,,L
182 79224631 Lance Albertson
EOF
183 df24aef4 Nikos Skalkotos
    elif [  "${SWAP}" = "no" -a "${BOOT}" = "yes" ] ; then
184 e21b8802 Lance Albertson
        # Create two partitions:
185 e21b8802 Lance Albertson
        # 1 - 100MB /boot, bootable
186 e21b8802 Lance Albertson
        # 2 - Rest
187 78422bb3 Lance Albertson
        $sfdisk_cmd > /dev/null <<EOF
188 e21b8802 Lance Albertson
,100,L,*
189 e21b8802 Lance Albertson
,,L
190 e21b8802 Lance Albertson
EOF
191 df24aef4 Nikos Skalkotos
    elif [  "${SWAP}" = "yes" -a "${BOOT}" = "no" ] ; then
192 77449e7c Lance Albertson
        # Create two partitions:
193 77449e7c Lance Albertson
        # 1 - Size of Memory, swap
194 77449e7c Lance Albertson
        # 2 - Rest
195 78422bb3 Lance Albertson
        $sfdisk_cmd > /dev/null <<EOF
196 fd786991 Lance Albertson
,$SWAP_SIZE,S
197 77449e7c Lance Albertson
,,L
198 77449e7c Lance Albertson
EOF
199 df24aef4 Nikos Skalkotos
    elif [  "${SWAP}" = "no" -a "${BOOT}" = "no" ] ; then
200 77449e7c Lance Albertson
        # Create two partitions:
201 77449e7c Lance Albertson
        # 1 - Whole
202 78422bb3 Lance Albertson
        $sfdisk_cmd > /dev/null <<EOF
203 77449e7c Lance Albertson
,,L
204 77449e7c Lance Albertson
EOF
205 e21b8802 Lance Albertson
    fi
206 79224631 Lance Albertson
}
207 79224631 Lance Albertson
208 cc927a76 Lance Albertson
mkfs_disk0() {
209 4c96e490 Lance Albertson
    local mkfs="mkfs.${FILESYSTEM}"
210 cc927a76 Lance Albertson
    # Format /
211 78422bb3 Lance Albertson
    $mkfs -Fq -L / $root_dev > /dev/null
212 77449e7c Lance Albertson
    # Format /boot
213 77449e7c Lance Albertson
    if [ -n "${boot_dev}" ] ; then
214 78422bb3 Lance Albertson
        $mkfs -Fq -L /boot $boot_dev > /dev/null
215 77449e7c Lance Albertson
    fi
216 77449e7c Lance Albertson
    # Format swap
217 77449e7c Lance Albertson
    if [ -n "${swap_dev}" ] ; then
218 cc927a76 Lance Albertson
        # Format swap
219 78422bb3 Lance Albertson
        mkswap -f $swap_dev > /dev/null
220 cc927a76 Lance Albertson
    fi
221 0bde4a2a Lance Albertson
    # During reinstalls, ext4 needs a little time after a mkfs so add it here
222 2146dd61 Lance Albertson
    # and also run a sync to be sure.
223 2146dd61 Lance Albertson
    sync
224 0bde4a2a Lance Albertson
    sleep 2
225 cc927a76 Lance Albertson
}
226 cc927a76 Lance Albertson
227 b05b1ab6 Lance Albertson
mount_disk0() {
228 77449e7c Lance Albertson
    local target=$1
229 3173a4bc Lance Albertson
    mount $root_dev $target
230 3173a4bc Lance Albertson
    CLEANUP+=("umount $target")
231 77449e7c Lance Albertson
    if [ -n "${boot_dev}" ] ; then
232 77449e7c Lance Albertson
        $MKDIR_P $target/boot
233 77449e7c Lance Albertson
        mount $boot_dev $target/boot
234 77449e7c Lance Albertson
        CLEANUP+=("umount $target/boot")
235 77449e7c Lance Albertson
    fi
236 1c571a34 Lance Albertson
    # sync the file systems before unmounting to ensure everything is flushed
237 1c571a34 Lance Albertson
    # out
238 1c571a34 Lance Albertson
    CLEANUP+=("sync")
239 b05b1ab6 Lance Albertson
}
240 b05b1ab6 Lance Albertson
241 79224631 Lance Albertson
map_disk0() {
242 77449e7c Lance Albertson
    blockdev="$1"
243 77449e7c Lance Albertson
    filesystem_dev_base=`$KPARTX -l -p- $blockdev | \
244 77449e7c Lance Albertson
                            grep -m 1 -- "-1.*$blockdev" | \
245 77449e7c Lance Albertson
                            $AWK '{print $1}'`
246 77449e7c Lance Albertson
    if [ -z "$filesystem_dev_base" ]; then
247 77449e7c Lance Albertson
        log_error "Cannot interpret kpartx output and get partition mapping"
248 77449e7c Lance Albertson
        exit 1
249 77449e7c Lance Albertson
    fi
250 77449e7c Lance Albertson
    $KPARTX -a -p- $blockdev > /dev/null
251 77449e7c Lance Albertson
    filesystem_dev="/dev/mapper/${filesystem_dev_base/%-1/}"
252 77449e7c Lance Albertson
    if [ ! -b "/dev/mapper/$filesystem_dev_base" ]; then
253 77449e7c Lance Albertson
        log_error "Can't find kpartx mapped partition: /dev/mapper/$filesystem_dev_base"
254 77449e7c Lance Albertson
        exit 1
255 77449e7c Lance Albertson
    fi
256 494927a8 Lance Albertson
    echo "$filesystem_dev"
257 494927a8 Lance Albertson
}
258 494927a8 Lance Albertson
259 494927a8 Lance Albertson
map_partition() {
260 494927a8 Lance Albertson
    filesystem_dev="$1"
261 494927a8 Lance Albertson
    partition="$2"
262 df24aef4 Nikos Skalkotos
    if [ "${SWAP}" = "yes" -a "${BOOT}" = "yes" ] ; then
263 494927a8 Lance Albertson
        boot_dev="${filesystem_dev}-1"
264 494927a8 Lance Albertson
        swap_dev="${filesystem_dev}-2"
265 494927a8 Lance Albertson
        root_dev="${filesystem_dev}-3"
266 df24aef4 Nikos Skalkotos
    elif [ "${SWAP}" = "no" -a "${BOOT}" = "yes" ] ; then
267 494927a8 Lance Albertson
        boot_dev="${filesystem_dev}-1"
268 494927a8 Lance Albertson
        root_dev="${filesystem_dev}-2"
269 df24aef4 Nikos Skalkotos
    elif [ "${SWAP}" = "yes" -a "${BOOT}" = "no" ] ; then
270 494927a8 Lance Albertson
        swap_dev="${filesystem_dev}-1"
271 494927a8 Lance Albertson
        root_dev="${filesystem_dev}-2"
272 df24aef4 Nikos Skalkotos
    elif [ "${SWAP}" = "no" -a "${BOOT}" = "no" ] ; then
273 494927a8 Lance Albertson
        root_dev="${filesystem_dev}-1"
274 77449e7c Lance Albertson
    fi
275 494927a8 Lance Albertson
    echo "$(eval "echo \${$(echo ${partition}_dev)"})"
276 79224631 Lance Albertson
}
277 79224631 Lance Albertson
278 79224631 Lance Albertson
unmap_disk0() {
279 8d0132dc Lance Albertson
  $KPARTX -d -p- $1
280 79224631 Lance Albertson
}
281 79224631 Lance Albertson
282 3903b7f1 Lance Albertson
setup_fstab() {
283 4c96e490 Lance Albertson
    local target=$1 fs=${FILESYSTEM}
284 ecd82584 Lance Albertson
    get_os_type $target
285 3903b7f1 Lance Albertson
    cat > $target/etc/fstab <<EOF
286 3903b7f1 Lance Albertson
# /etc/fstab: static file system information.
287 3903b7f1 Lance Albertson
#
288 3903b7f1 Lance Albertson
# <file system>   <mount point>   <type>  <options>       <dump>  <pass>
289 4c96e490 Lance Albertson
UUID=$root_uuid   /               $fs     defaults        0       1
290 3903b7f1 Lance Albertson
proc              /proc           proc    defaults        0       0
291 3903b7f1 Lance Albertson
EOF
292 3903b7f1 Lance Albertson
293 0877f9c0 Lance Albertson
if [ -n "$boot_dev" -a -n "$boot_uuid" ] ; then
294 0877f9c0 Lance Albertson
    cat >> $target/etc/fstab <<EOF
295 4c96e490 Lance Albertson
UUID=$boot_uuid   /boot           $fs     defaults        1       2
296 3903b7f1 Lance Albertson
EOF
297 0877f9c0 Lance Albertson
fi
298 3903b7f1 Lance Albertson
299 0877f9c0 Lance Albertson
if [ -n "$swap_dev" -a -n "$swap_uuid" ] ; then
300 0877f9c0 Lance Albertson
    cat >> $target/etc/fstab <<EOF
301 3903b7f1 Lance Albertson
UUID=$swap_uuid   swap            swap    defaults        0       0
302 3903b7f1 Lance Albertson
EOF
303 0877f9c0 Lance Albertson
fi
304 3903b7f1 Lance Albertson
305 3903b7f1 Lance Albertson
# OS Specific fstabs
306 0877f9c0 Lance Albertson
if [ "$OS_TYPE" = "redhat" ] ; then
307 0877f9c0 Lance Albertson
    cat >> $target/etc/fstab <<EOF
308 3903b7f1 Lance Albertson
tmpfs             /dev/shm        tmpfs   defaults        0       0
309 3903b7f1 Lance Albertson
devpts            /dev/pts        devpts  gid=5,mode=620  0       0
310 3903b7f1 Lance Albertson
sysfs             /sys            sysfs   defaults        0       0
311 3903b7f1 Lance Albertson
EOF
312 0877f9c0 Lance Albertson
fi
313 3903b7f1 Lance Albertson
314 0877f9c0 Lance Albertson
if [ "$OS_TYPE" = "gentoo" ] ; then
315 0877f9c0 Lance Albertson
    cat >> $target/etc/fstab <<EOF
316 3903b7f1 Lance Albertson
shm               /dev/shm        tmpfs   nodev,nosuid,noexec 0   0
317 3903b7f1 Lance Albertson
EOF
318 0877f9c0 Lance Albertson
fi
319 3903b7f1 Lance Albertson
}
320 3903b7f1 Lance Albertson
321 9f4b2c31 Lance Albertson
setup_console() {
322 9f4b2c31 Lance Albertson
    local target=$1
323 9f4b2c31 Lance Albertson
    if [ -z "$target" ] ; then
324 9f4b2c31 Lance Albertson
        log_error "target not set for setup_console"
325 9f4b2c31 Lance Albertson
        exit 1
326 9f4b2c31 Lance Albertson
    fi
327 9f4b2c31 Lance Albertson
    # Upstart is on this system, so do this instead
328 9f4b2c31 Lance Albertson
    if [ -e ${target}/etc/event.d/tty1 ] ; then
329 9f4b2c31 Lance Albertson
        cat ${target}/etc/event.d/tty1 | sed -re 's/tty1/ttyS0/' \
330 9f4b2c31 Lance Albertson
            > ${target}/etc/event.d/ttyS0
331 9f4b2c31 Lance Albertson
        return
332 9f4b2c31 Lance Albertson
    fi
333 0b56457d Lance Albertson
    # upstart in karmic and newer
334 0b56457d Lance Albertson
    if [ -e ${target}/etc/init/tty1.conf ] ; then
335 0b56457d Lance Albertson
        cat ${target}/etc/init/tty1.conf | \
336 230410df Lance Albertson
        sed -re 's/^exec.*/exec \/sbin\/getty -L 115200 ttyS0 vt102/' \
337 0b56457d Lance Albertson
            > ${target}/etc/init/ttyS0.conf
338 230410df Lance Albertson
        sed -ie 's/tty1/ttyS0/g' ${target}/etc/init/ttyS0.conf
339 0b56457d Lance Albertson
        return
340 0b56457d Lance Albertson
    fi
341 9f4b2c31 Lance Albertson
    get_os $target
342 9f4b2c31 Lance Albertson
    case $OPERATING_SYSTEM in
343 9f4b2c31 Lance Albertson
        gentoo)
344 9f4b2c31 Lance Albertson
            sed -i -e 's/.*ttyS0.*/s0:12345:respawn:\/sbin\/agetty 115200 ttyS0 vt100/' \
345 9f4b2c31 Lance Albertson
                ${target}/etc/inittab
346 9f4b2c31 Lance Albertson
            ;;
347 9f4b2c31 Lance Albertson
        centos)
348 6f7ac139 Lance Albertson
            echo "s0:12345:respawn:/sbin/agetty 115200 ttyS0 vt100" >> \
349 9f4b2c31 Lance Albertson
                ${target}/etc/inittab
350 9f4b2c31 Lance Albertson
            ;;
351 9f4b2c31 Lance Albertson
        debian|ubuntu)
352 a3e24c37 Lance Albertson
            sed -i -e 's/.*T0.*/T0:23:respawn:\/sbin\/getty -L ttyS0 115200 vt100/' \
353 9f4b2c31 Lance Albertson
                ${target}/etc/inittab
354 9f4b2c31 Lance Albertson
            ;;
355 9f4b2c31 Lance Albertson
        *)
356 9f4b2c31 Lance Albertson
            echo "No support for your OS in instance-image, skipping..."
357 9f4b2c31 Lance Albertson
            ;;
358 9f4b2c31 Lance Albertson
    esac
359 9f4b2c31 Lance Albertson
}
360 9f4b2c31 Lance Albertson
361 47e547ca Nikos Skalkotos
filesystem_check() {
362 47e547ca Nikos Skalkotos
    local target=$1
363 47e547ca Nikos Skalkotos
    if [ -z "$target" ] ; then
364 47e547ca Nikos Skalkotos
        log_error "target not set for filesystem_check"
365 47e547ca Nikos Skalkotos
        exit 1
366 47e547ca Nikos Skalkotos
    fi
367 47e547ca Nikos Skalkotos
368 47e547ca Nikos Skalkotos
    get_os $target
369 47e547ca Nikos Skalkotos
370 47e547ca Nikos Skalkotos
    if [ "${OPERATING_SYSTEM}" = "fedora" ]; then
371 47e547ca Nikos Skalkotos
        # we have to force a filesystem relabeling for SELinux after messing
372 47e547ca Nikos Skalkotos
        # around with the filesystem in fedora
373 47e547ca Nikos Skalkotos
        echo "Enforce an automatic relabeling in the initial boot process..."
374 47e547ca Nikos Skalkotos
        touch $target/.autorelabel
375 47e547ca Nikos Skalkotos
    fi
376 47e547ca Nikos Skalkotos
}
377 47e547ca Nikos Skalkotos
378 79224631 Lance Albertson
cleanup() {
379 171aea62 Nikos Skalkotos
  # if something fails here, it souldn't call cleanup again...
380 171aea62 Nikos Skalkotos
  trap - EXIT
381 171aea62 Nikos Skalkotos
382 79224631 Lance Albertson
  if [ ${#CLEANUP[*]} -gt 0 ]; then
383 79224631 Lance Albertson
    LAST_ELEMENT=$((${#CLEANUP[*]}-1))
384 79224631 Lance Albertson
    REVERSE_INDEXES=$(seq ${LAST_ELEMENT} -1 0)
385 79224631 Lance Albertson
    for i in $REVERSE_INDEXES; do
386 171aea62 Nikos Skalkotos
        # If something fails here, it's better to retry it for a few times
387 171aea62 Nikos Skalkotos
        # before we give up with an error. This is needed for kpartx when
388 171aea62 Nikos Skalkotos
        # dealing with ntfs partitions mounted through fuse. umount is not
389 171aea62 Nikos Skalkotos
        # synchronous and may return while the partition is still busy. A
390 171aea62 Nikos Skalkotos
        # premature attempt to delete partition mappings through kpartx on a
391 171aea62 Nikos Skalkotos
        # device that hosts previously mounted ntfs partition may fail with an 
392 171aea62 Nikos Skalkotos
        # `device-mapper: remove ioctl failed: Device or resource busy'
393 171aea62 Nikos Skalkotos
        # error. A sensible workaround for this is to wait for a while and then
394 171aea62 Nikos Skalkotos
        # try again.
395 171aea62 Nikos Skalkotos
        local cmd=${CLEANUP[$i]}
396 171aea62 Nikos Skalkotos
        $cmd || for interval in 0.25 0.5 1 2 4; do
397 171aea62 Nikos Skalkotos
            echo "Command $cmd failed!"
398 171aea62 Nikos Skalkotos
            echo "I'll wait for $interval secs and will retry..."
399 171aea62 Nikos Skalkotos
            sleep $interval
400 171aea62 Nikos Skalkotos
            $cmd && break
401 171aea62 Nikos Skalkotos
        done
402 171aea62 Nikos Skalkotos
        test $? -eq 1 && { echo "Giving Up..."; exit 1; }
403 79224631 Lance Albertson
    done
404 79224631 Lance Albertson
  fi
405 171aea62 Nikos Skalkotos
  echo "Clean UP executed"
406 79224631 Lance Albertson
}
407 79224631 Lance Albertson
408 79224631 Lance Albertson
trap cleanup EXIT
409 79224631 Lance Albertson
410 9cdb305c Lance Albertson
DEFAULT_FILE="@DEFAULT_DIR@/ganeti-instance-image"
411 79224631 Lance Albertson
if [ -f "$DEFAULT_FILE" ]; then
412 79224631 Lance Albertson
    . "$DEFAULT_FILE"
413 79224631 Lance Albertson
fi
414 79224631 Lance Albertson
415 79224631 Lance Albertson
# note: we don't set a default mirror since debian and ubuntu have
416 79224631 Lance Albertson
# different defaults, and it's better to use the default
417 79224631 Lance Albertson
418 79224631 Lance Albertson
# only if the user want to specify a mirror in the defaults file we
419 79224631 Lance Albertson
# will use it, this declaration is to make sure the variable is set
420 828670a1 Lance Albertson
: ${CDINSTALL:="no"}
421 df24aef4 Nikos Skalkotos
: ${BOOT:="no"}
422 e21b8802 Lance Albertson
: ${SWAP:="yes"}
423 fd786991 Lance Albertson
: ${SWAP_SIZE:="${INSTANCE_BE_memory}"}
424 4c96e490 Lance Albertson
: ${FILESYSTEM:="ext3"}
425 be751693 Lance Albertson
: ${KERNEL_ARGS=""}
426 84472880 Lance Albertson
: ${OVERLAY=""}
427 134c11c3 Lance Albertson
: ${IMAGE_NAME:=""}
428 be751693 Lance Albertson
: ${IMAGE_TYPE:="dump"}
429 8727c57d Lance Albertson
: ${NOMOUNT:="no"}
430 79224631 Lance Albertson
: ${ARCH:=""}
431 549118f0 Lance Albertson
: ${CUSTOMIZE_DIR:="@sysconfdir@/ganeti/instance-image/hooks"}
432 f5aa7725 Lance Albertson
: ${VARIANTS_DIR:="@sysconfdir@/ganeti/instance-image/variants"}
433 7193962d Lance Albertson
: ${NETWORKS_DIR:="@sysconfdir@/ganeti/instance-image/networks"}
434 84472880 Lance Albertson
: ${OVERLAYS_DIR:="@sysconfdir@/ganeti/instance-image/overlays"}
435 2e0988ec Lance Albertson
: ${IMAGE_DIR:="@localstatedir@/cache/ganeti-instance-image"}
436 9014a39d Lance Albertson
: ${IMAGE_DEBUG:="no"}
437 ab462591 Constantinos Venetsanopoulos
: ${TOOLS_DIR:="@OS_DIR@/@OS_NAME@/tools"}
438 f7959feb Lance Albertson
439 79224631 Lance Albertson
SCRIPT_NAME=$(basename $0)
440 77449e7c Lance Albertson
KERNEL_PATH="$INSTANCE_HV_kernel_path"
441 79224631 Lance Albertson
442 103d261e Lance Albertson
if [ -f /sbin/blkid -a -x /sbin/blkid ]; then
443 93fa6b1e Lance Albertson
    VOL_ID="/sbin/blkid -c /dev/null -o value -s UUID"
444 93fa6b1e Lance Albertson
    VOL_TYPE="/sbin/blkid -c /dev/null -o value -s TYPE"
445 103d261e Lance Albertson
else
446 103d261e Lance Albertson
    for dir in /lib/udev /sbin; do
447 103d261e Lance Albertson
        if [ -f $dir/vol_id -a -x $dir/vol_id ]; then
448 103d261e Lance Albertson
            VOL_ID="$dir/vol_id -u"
449 103d261e Lance Albertson
            VOL_TYPE="$dir/vol_id -t"
450 103d261e Lance Albertson
        fi
451 103d261e Lance Albertson
    done
452 103d261e Lance Albertson
fi
453 103d261e Lance Albertson
454 103d261e Lance Albertson
if [ -z "$VOL_ID" ]; then
455 103d261e Lance Albertson
    log_error "vol_id or blkid not found, please install udev or util-linux"
456 103d261e Lance Albertson
    exit 1
457 103d261e Lance Albertson
fi
458 103d261e Lance Albertson
459 103d261e Lance Albertson
460 79224631 Lance Albertson
if [ -z "$OS_API_VERSION" -o "$OS_API_VERSION" = "5" ]; then
461 79224631 Lance Albertson
  OS_API_VERSION=5
462 79224631 Lance Albertson
  GETOPT_RESULT=`getopt -o o:n:i:b:s: -n '$0' -- "$@"`
463 79224631 Lance Albertson
  if [ $? != 0 ] ; then log_error "Terminating..."; exit 1 ; fi
464 79224631 Lance Albertson
  get_api5_arguments $GETOPT_RESULT
465 79224631 Lance Albertson
elif [ "$OS_API_VERSION" = "10" -o "$OS_API_VERSION" = "15" ]; then
466 79224631 Lance Albertson
  get_api10_arguments
467 ab462591 Constantinos Venetsanopoulos
elif [ "$OS_API_VERSION" = "20" ]; then
468 ab462591 Constantinos Venetsanopoulos
  get_api10_arguments
469 ab462591 Constantinos Venetsanopoulos
  get_api20_parameters
470 ab462591 Constantinos Venetsanopoulos
  IMAGE_NAME=$IMG_ID
471 79224631 Lance Albertson
else
472 79224631 Lance Albertson
  log_error "Unknown OS API VERSION $OS_API_VERSION"
473 79224631 Lance Albertson
  exit 1
474 79224631 Lance Albertson
fi
475 79224631 Lance Albertson
476 79224631 Lance Albertson
if [ -n "$OS_VARIANT" ]; then
477 79224631 Lance Albertson
  if [ ! -d "$VARIANTS_DIR" ]; then
478 79224631 Lance Albertson
    log_error "OS Variants directory $VARIANTS_DIR doesn't exist"
479 79224631 Lance Albertson
    exit 1
480 79224631 Lance Albertson
  fi
481 79224631 Lance Albertson
  VARIANT_CONFIG="$VARIANTS_DIR/$OS_VARIANT.conf"
482 79224631 Lance Albertson
  if [ -f "$VARIANT_CONFIG" ]; then
483 79224631 Lance Albertson
    . "$VARIANT_CONFIG"
484 79224631 Lance Albertson
  else
485 79224631 Lance Albertson
    if grep -qxF "$OS_VARIANT" variants.list; then
486 f5aa7725 Lance Albertson
      log_error "ERROR: instance-image configuration error"
487 79224631 Lance Albertson
      log_error "  Published variant $OS_VARIANT is missing its config file"
488 79224631 Lance Albertson
      log_error "  Please create $VARIANT_CONFIG or unpublish the variant"
489 79224631 Lance Albertson
      log_error "  (by removing $OS_VARIANT from variants.list)"
490 79224631 Lance Albertson
    else
491 79224631 Lance Albertson
      log_error "Unofficial variant $OS_VARIANT is unsupported"
492 79224631 Lance Albertson
      log_error "Most probably this is a user error, forcing a wrong name"
493 79224631 Lance Albertson
      log_error "To support this variant please create file $VARIANT_CONFIG"
494 79224631 Lance Albertson
    fi
495 79224631 Lance Albertson
    exit 1
496 79224631 Lance Albertson
  fi
497 79224631 Lance Albertson
fi