Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 87602b09ea
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

executable file 159 lines (134 sloc) 4.318 kb
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
#!/bin/sh

echo Starting /init script ...

PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH

# Debian bug 606622.
RUNLEVEL=S
PREVLEVEL=N
export RUNLEVEL PREVLEVEL

mkdir -p /sysroot

if [ ! -d /proc ]; then rm -f /proc; fi
mkdir -p /proc
mount -t proc /proc /proc
if [ ! -d /sys ]; then rm -f /sys; fi
mkdir -p /sys
mount -t sysfs /sys /sys
mkdir -p /run/lock

# devtmpfs is required since udev 176
mount -t devtmpfs /dev /dev

if [ ! -L /etc/init.d/udev -a -x /etc/init.d/udev ]; then
if type service >/dev/null 2>&1; then
service udev start
  else
     /etc/init.d/udev start
  fi
elif [ -x /sbin/start_udev ] && /sbin/start_udev; then
  :
else
  # Find udevd and run it directly.
  for f in /sbin/udevd /lib/udev/udevd \
      /lib/systemd/systemd-udevd /usr/lib/systemd/systemd-udevd \
      /usr/lib/udev/udevd; do
if [ -x "$f" ]; then UDEVD="$f"; fi
done
if [ -n "$UDEVD" ]; then
echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug
    $UDEVD --daemon
    udevadm trigger
    udevadm settle --timeout=600
  else
echo No udevd, creating /dev manually.
    mount -t tmpfs none /dev
    mkdir /dev/pts /dev/shm /dev/mapper
    mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts
    # Must do each MAKEDEV individually, because if one device fails,
    # MAKEDEV will quit without creating the rest (RHBZ#507374).
    for dev in mem null port zero core full ram tty console fd \
      hda hdb hdc hdd sda sdb sdc sdd loop sd; do
MAKEDEV $dev ||:
    done
mknod /dev/ptmx c 5 2; chmod 0666 /dev/ptmx
    mknod /dev/random c 1 8; chmod 0666 /dev/random
    mknod /dev/urandom c 1 9; chmod 0444 /dev/urandom
    ln -sf /proc/self/fd/0 /dev/stdin
    ln -sf /proc/self/fd/1 /dev/stdout
    ln -sf /proc/self/fd/2 /dev/stderr

    modprobe virtio_pci
    modprobe virtio_net
  fi
fi

if grep -sq selinux=1 /proc/cmdline; then
mount -t selinuxfs none /selinux
fi

# Update the system clock.
hwclock -u -s

# Set up the network.
ip addr add 127.0.0.1/8 brd + dev lo scope host
ip link set dev lo up

ip addr add 169.254.2.10/16 brd + dev eth0 scope global
ip link set dev eth0 up

ip route add default via 169.254.2.2

# Scan for MDs.
mdadm -As --auto=yes --run

# Scan for LVM.
modprobe dm_mod ||:

lvm vgscan --ignorelockingfailure
lvm vgchange -ay --ignorelockingfailure

# Improve virtio-blk performance (RHBZ#509383).
for f in /sys/block/vd*/queue/rotational; do echo 1 > $f; done

# http://kbase.redhat.com/faq/docs/DOC-5428
# Disabled this until https://bugzilla.redhat.com/show_bug.cgi?id=630583
# is fixed (broken in Linux 2.6.36).
#for f in /sys/block/[hsv]d*/queue/scheduler; do echo noop > $f; done

# These are useful when debugging.
if grep -sq guestfs_verbose=1 /proc/cmdline; then
ls -lR /dev
    cat /proc/mounts
    lvm pvs
    lvm vgs
    lvm lvs
    ip a
    ip r
    lsmod
    #hwclock -r
    date
    #ping -n -v -c 5 10.0.2.2
    #ping -n -v -c 5 10.0.2.4

    echo -n "uptime: "; cat /proc/uptime
fi

if ! grep -sq guestfs_rescue=1 /proc/cmdline; then
  # Run the daemon under valgrind if ./configure --enable-valgrind-daemon
  vg_channel=/dev/virtio-ports/org.libguestfs.valgrind
  if [ -w $vg_channel ]; then
if [ -r /etc/guestfsd.suppressions ]; then
suppressions="--suppressions=/etc/guestfsd.suppressions"
    fi
exec 3>$vg_channel
    vg="valgrind --leak-check=full --log-fd=3 --error-exitcode=119 --max-stackframe=8388608 --child-silent-after-fork=yes $suppressions"
    echo "enabling valgrind: $vg"
  fi

  # The host will kill qemu abruptly if guestfsd shuts down normally
  $vg guestfsd

  # Otherwise we try to clean up gracefully. For example, this ensures that a
  # core dump generated by the guest daemon will be written to disk.
else
  # Use appliance in rescue mode, also used by the virt-rescue command.
  eval $(grep -Eo 'TERM=[^[:space:]]+' /proc/cmdline)
  PS1='><rescue> '
  export TERM PS1
  echo
echo "------------------------------------------------------------"
  echo
echo "Welcome to virt-rescue, the libguestfs rescue shell."
  echo
echo "Note: The contents of / are the rescue appliance."
  echo "You have to mount the guest's partitions under /sysroot"
  echo "before you can examine them."
  echo
bash -i
  echo
echo "virt-rescue: Syncing the disk now before exiting ..."
  echo
fi

sync
reboot -f
Something went wrong with that request. Please try again.