/usr/share/ganeti/os/debootstrap/create is in ganeti-instance-debootstrap 0.15-2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 | #!/bin/bash
# Copyright (C) 2007, 2008, 2009, 2012 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
set -e
# minimum device size is 256 MB, but we use 255 to account for
# potential rounding
declare -ri MIN_DEV_SIZE=$((255*1048576))
. common.sh
if [ "$GENERATE_CACHE" = "yes" -a ! -d "$CACHE_DIR" ]; then
mkdir -p "$CACHE_DIR"
fi
DPKG_ARCH=${ARCH:-`dpkg --print-architecture`}
CACHE_FILE="$CACHE_DIR/cache-${SUITE}-${DPKG_ARCH}.tar"
# If the target device is not a real block device we'll first losetup it.
# This is needed for file disks.
if [ ! -b $blockdev ]; then
ORIGINAL_BLOCKDEV=$blockdev
blockdev=$(losetup --show -f $blockdev)
CLEANUP+=("losetup -d $blockdev")
CLEANUP+=("udevadm settle")
fi
DEVICE_SIZE=$(blockdev --getsize64 $blockdev)
if [ "$DEVICE_SIZE" -lt $MIN_DEV_SIZE ]; then
echo "Device size is too small ($((DEVICE_SIZE/1048576)) MB)" 1>&2
echo "Required size is at least 256MB" 1>&2
exit 1
fi
if [ "$PARTITION_STYLE" = "none" ]; then
filesystem_dev=$blockdev
elif [ "$PARTITION_STYLE" = "msdos" ]; then
# Create one big partition, and make it bootable
format_disk0 $blockdev
filesystem_dev=$(map_disk0 $blockdev)
CLEANUP+=("unmap_disk0 $blockdev")
else
echo "Unknown partition style $PARTITION_STYLE" 1>&2
exit 1
fi
mke2fs -Fjqt $OSP_FILESYSTEM $filesystem_dev
root_uuid=$($VOL_ID $filesystem_dev )
if [ -n "$swapdev" ]; then
mkswap $swapdev
swap_uuid=$($VOL_ID $swapdev || true )
fi
TMPDIR=`mktemp -d` || exit 1
CLEANUP+=("rmdir $TMPDIR")
mount $filesystem_dev $TMPDIR
CLEANUP+=("umount $TMPDIR")
# remove the cache file if it's old (> 2 weeks) and writable by the owner (the
# default due to the standard umask)
if [ "$CLEAN_CACHE" -a -d "$CACHE_DIR" ]; then
find "$CACHE_DIR" -name 'cache-*.tar' -type f \
-daystart -mtime "+${CLEAN_CACHE}" -print0 | \
xargs -r0 rm -f
fi
if [ -f "$CACHE_FILE" ]; then
tar xf "$CACHE_FILE" -C $TMPDIR
else
if [ "$PROXY" ]; then
export http_proxy="$PROXY"
export https_proxy="$PROXY"
fi
# INCLUDE will be empty if EXTRA_PKGS is null/empty, otherwise we
# build the full parameter format from it
INCLUDE=${EXTRA_PKGS:+"--include=$EXTRA_PKGS"}
COMP=${COMPONENTS:+"--components=$COMPONENTS"}
debootstrap \
--arch "$DPKG_ARCH" \
$INCLUDE \
$COMP \
"$SUITE" $TMPDIR $MIRROR
# remove the downloaded debs, as they are no longer needed
find "$TMPDIR/var/cache/apt/archives" -type f -name '*.deb' -print0 | \
xargs -r0 rm -f
# remove the persistent-net rules, otherwise it will remember the node's
# interfaces as eth0, eth1, ...
rm -f "$TMPDIR/etc/udev/rules.d/z25_persistent-net.rules"
if [ "$GENERATE_CACHE" = "yes" ]; then
TMP_CACHE=`mktemp "${CACHE_FILE}.XXXXXX"`
tar cf "$TMP_CACHE" -C $TMPDIR .
mv -f "$TMP_CACHE" "$CACHE_FILE"
fi
fi
# reset the root password
chroot $TMPDIR passwd -d root
cp -p /etc/hosts $TMPDIR/etc/hosts
cp -p /etc/resolv.conf $TMPDIR/etc/resolv.conf
echo $instance > $TMPDIR/etc/hostname
echo $instance > $TMPDIR/etc/mailname
cat > $TMPDIR/etc/fstab <<EOF
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=$root_uuid / $OSP_FILESYSTEM defaults 0 1
proc /proc proc defaults 0 0
EOF
[ -n "$swapdev" -a -n "$swap_uuid" ] && cat >> $TMPDIR/etc/fstab <<EOF
UUID=$swap_uuid swap swap defaults 0 0
EOF
cat > $TMPDIR/etc/network/interfaces <<EOF
auto lo
iface lo inet loopback
EOF
# for kvm, we should only activate a serial console if the
# 'serial_console' parameter is set; for xen-pvm though, we should
# always define a serial console
SERIAL_PORT=""
if [ "$INSTANCE_HV_serial_console" = "True" ]; then
SERIAL_PORT="ttyS0"
elif [ "$HYPERVISOR" = "xen-pvm" ]; then
SERIAL_PORT="hvc0"
fi
if [ -n "$SERIAL_PORT" ]; then
if [ -e $TMPDIR/etc/inittab ]; then
# debian
echo "T0:23:respawn:/sbin/getty $SERIAL_PORT 38400" >> $TMPDIR/etc/inittab
elif [ -e $TMPDIR/etc/init ]; then
# ubuntu (eg. karmic)
cat > $TMPDIR/etc/init/${SERIAL_PORT}.conf <<EOF
start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]
respawn
exec /sbin/getty -8 38400 $SERIAL_PORT
EOF
elif [ -e $TMPDIR/etc/event.d ]; then
# ubuntu (eg. intrepid)
cat > $TMPDIR/etc/event.d/${SERIAL_PORT}.conf <<EOF
start on stopped rc2
start on stopped rc3
start on stopped rc4
start on stopped rc5
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
respawn
exec /sbin/getty 38400 ${SERIAL_PORT}
EOF
fi
fi
RUN_PARTS=`which run-parts`
if [ -n "$RUN_PARTS" -a -n "$CUSTOMIZE_DIR" -a -d "$CUSTOMIZE_DIR" ]; then
TARGET=$TMPDIR
BLOCKDEV=$blockdev
FSYSDEV=$filesystem_dev
export TARGET SUITE ARCH PARTITION_STYLE EXTRA_PKGS BLOCKDEV FSYSDEV
$RUN_PARTS $CUSTOMIZE_DIR
fi
# execute cleanups
cleanup
trap - EXIT
exit 0
|