#!/usr/bin/bash # Init script for libvirtd on Slackware # Written by Matteo Bernardini # # Note that a dnsmasq daemon is started by libvirtd itself to serve # its virtual network, and possibly can conflict with a dnsmasq # already running on the system, see # http://wiki.libvirt.org/page/Libvirtd_and_dnsmasq # Note also that the tun, vhost_net and kvm related modules are # automatically loaded at start and removed at stop: edit the # script if this behaviour conflicts with anything else running # on your setup MODULES="tun vhost_net" PIDFILE="/var/run/libvirt/libvirtd.pid" NETNAME="$(ls -1 /var/lib/libvirt/network | cut -d. -f1)" TIMEOUT=${TIMEOUT:-40} OPTS=${OPTS:-" -v -f /etc/libvirt/libvirtd.conf -p $PIDFILE "} check_running_machines() { i=0 for j in `/usr/sbin/virsh list | grep running | awk '{print $2;}'` ; do /usr/sbin/virsh shutdown $j done echo -n "Waiting machines" while [ $(/usr/sbin/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 [ $(/usr/sbin/virsh list | grep running | wc -l) -gt "0" ];then echo -n "The following machines are still running, forcing shutdown: " for j in `/usr/sbin/virsh list | grep running | awk '{print $2;}'` ; do /usr/sbin/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..." mkdir -p $(dirname $PIDFILE) check_processor /sbin/modprobe -a $MODULES /usr/sbin/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..." for i in "$NETNAME"; do /usr/sbin/virsh net-destroy "$i" done kill -TERM `cat $PIDFILE` sleep 3 /sbin/modprobe -ra $MODULES } case $1 in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; *) echo "Usage: $0 (start|stop|restart)" ;; esac