• rc.libvirt

    Data:2010.05.26 | Categorialinux, servidores, virtualização | Tags: ,,

    Segue abaixo um script de start e stop para o serviço libvirtd que fiz para Slackware:

    #!/bin/bash
    
    MODULES="tun vhost_net"
    PIDFILE="/var/run/libvirtd.pid"
    TIMEOUT=${TIMEOUT:-40}
    OPTS=${OPTS:-""}
    
    check_running_machines() {
    
      i=0
    
      for j in `virsh list | grep running | awk '{print $2;}'` ; do
        virsh shutdown $j
      done
    
      echo -n "Waiting machines"
    
      while [ $(virsh list | grep running | wc -l) -gt "0" ]; do
        if [ "$i" -ge "$TIMEOUT" ];then
          break
        fi
        echo -n "."
        i=`expr $i + 1`
        sleep 1
      done
    
      echo ""
    
      if [ $(virsh list | grep running | wc -l) -gt "0" ];then
    
        echo -n "The following machines are still running, forcing shutdown: "
        for j in `virsh list | grep running | awk '{print $2;}'` ; do
          virsh destroy $j
          echo -n "$j "
        done
    
        echo ""
        sleep 2
      fi
    
    }
    
    check_processor() {
    
      egrep 'vmx' /proc/cpuinfo > /dev/null
    
      if [ "$?" -eq "0" ];then
        MODULES="$MODULES kvm_intel kvm"
      fi
    
      check=$?
    
      egrep 'svm' /proc/cpuinfo > /dev/null
    
      if [ "$?" -eq "0" ];then
        MODULES="$MODULES kvm_amd kvm"
      fi
    
      check=`expr $check + $?`
    
      if [ $check -eq "2" ];then
        echo "Your systems does not support KVM!"
      fi
    
    }
    
    start() {
      if [ -f $PIDFILE ];then
        echo "libvirt is already running..."
        exit 1
      fi
      echo "Starting libvirtd..."
      check_processor
      modprobe -a $MODULES
      libvirtd -d -l $OPTS
    }
    
    stop() {
      if [ ! -f $PIDFILE ];then
        echo "libvirt is not running..."
        exit 2
      fi
      check_running_machines
      check_processor
      echo "Stopping libvirtd..."
      kill -TERM `cat $PIDFILE`
      modprobe -ra $MODULES
    }
    
    case $1 in
    start)
      start
      ;;
    stop)
      stop
      ;;
    restart)
      stop
      sleep 1
      start
      ;;
    *)
      echo "Usage: $0 (start|stop|restart)"
      ;;
    esac