XenDomUStartscript

Aus Xen-Forum-Wiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Init-Script zum Starten und Stoppen der DomUs

Mit den XEN-Utils kommt ein DomU Start/Stop-Script mit. Dieses hat jedoch bei mir nie funktioniert, daher habe ich selber ein solches erstellt. Es ist einfach gehalten und erfüllt seinen Zweck - das Starten der DomUs beim Systemstart und Stoppen, wenn der Rechner herunter gefahren wird.

Es wird noch etwas weiter entwickelt, läuft aber erstmal soweit, dass dafür keine Eile besteht. :-)

Das Script besteht aus 2 Teilen. Eine Konfigurationsdatei, welche in /etc/default liegt und dem Start/Stop-Script in /etc/init.d.

Derzeit heißt das Script xen-all-dom.

Konfigurationsdatei

Mit einem Editor wird eine neue Datei geöffnet/angelegt:

vi /etc/default/xen-all-dom

Es beinhaltet nur eine Variable mit deren Werten:

DOMAINS="domU1 domU2 domU3"

Es werden zwischen die Hochkommas die Namen der Konfigurationsdateien der DomUs eingetragen, jeweils durch Leerzeichen getrennt. Dabei ist es wichtig, dass die Domains den gleichen Namen tragen wie die Konfigurationsdateien, sonst funktioniert es nicht.

Init-Script

Start

Das Initscript durchläuft die Werte in der Variablen $DOMAINS, welche aus der Datei /etc/default/xen-all-dom eingelesen werden, und startet die Domains.

Stop

Beim Herunterfahren des Systems werden die Domains ebenfalls anhand ihrer Namen gestoppt. Dazu wird die Ausgabe von xm list verwendet.

Bevor eine der Aktionen für eine Domain durchgeführt wird, wird eine festgesetzte Zeit gewartet.

Hier nun der Inhalt des Init-Scriptes.

vi /etc/init.d/xen-all-dom
#! /bin/sh
# Starting all XEN Domains

set -e

DESC="all XEN Domains"
NAME="xen-all-dom"
SCRIPTNAME=/etc/init.d/$NAME

if [ -r /etc/default/$NAME ]
then
 source /etc/default/$NAME
else
 echo "Keine Konfigurationsdatei in /etc/default gefunden. Abbruch!"
 exit 1
fi

d_start() {
 echo
 for i in $DOMAINS; do
  sleep 50
  xm create $i
 done
 sleep 30
}

d_stop() {
 echo
    LISTE=`xm list | tail -n +3 | cut -d " " -f1`
       for i in $LISTE; do
          sleep 50
          xm shutdown $i
          echo "shutdown domain $i"
        done
        sleep 30
}

d_reload() {
 d_stop
 d_start
}

case "$1" in
 start)
  echo -n "Starting $DESC: $NAME"
  d_start
  echo "... done"
 ;;
 stop)
  echo -n "Stopping $DESC: $NAME"
  d_stop
  echo "... done"
 ;;
 restart)
  echo -n "Restarting $DESC: $NAME"
  d_stop
   sleep 1
  d_start
   echo "... done"
  ;;
 *)
  echo "Usage: $SCRIPTNAME {start|stop|restart|}" >&2
  exit 1
 ;;
esac

exit 0

Nun muss das Script noch ausführbar gemacht werden.

chmod +x /etc/init.d/xen-all-dom

Runlevels updaten

Damit das Script beim Systemstart ausgeführt wird, muß es noch in den Runleveln verlinkt werden. Dabei hat sich bewährt, es nach allen anderen Einträgen zu starten (S99) und mit als erstes zu stoppen (K19).

Dies kann mit folgendem Aufruf erledigt werden:

update-rc.d xen-all-dom defaults 99 19

Damit das originale DomU-Startscript nicht dazwischen funkt, habe ich es aus den Runleveln entfernt.

update-rc.d -f xendomains remove

ToDo

  • Namen der DomUs unabhängig vom Namen der Konfigurationsdatei
  • Anzeigen des DomU-Namen beim herunterfahren (im Moment nur ID)
  • Stoppen der DomUs anhand der vorhanden IDs


--McAldo 18:29, 23. Sep 2006 (CEST)

Persönliche Werkzeuge