tamiko      14/12/18 21:05:55

  Added:                libvirtd.init-r14
  Log:
  fail prominently in case of config directories being a regular file, bug 
#532892
  
  (Portage version: 2.2.15/cvs/Linux x86_64, signed Manifest commit with key 
BD3A97A3)

Revision  Changes    Path
1.1                  app-emulation/libvirt/files/libvirtd.init-r14

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-emulation/libvirt/files/libvirtd.init-r14?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-emulation/libvirt/files/libvirtd.init-r14?rev=1.1&content-type=text/plain

Index: libvirtd.init-r14
===================================================================
#!/sbin/runscript

description="Virtual Machine Management daemon (libvirt)"
extra_started_commands="reload halt"
description_halt="Stops the libvirt daemon without stopping your VMs"
description_reload="Restarts the libvirt daemon without stopping your VMs"

depend() {
    USE_FLAG_FIREWALLD
    use USE_FLAG_AVAHI USE_FLAG_ISCSI USE_FLAG_RBD dbus virtlockd
    after ntp-client ntpd nfs nfsmount portmap rpc.statd iptables ip6tables 
ebtables corosync sanlock cgconfig xenconsoled
}

libvirtd_virsh() {
    local mode=$1
    shift

    # Silence errors because virsh always throws an error about
    # not finding the hypervisor version when connecting to libvirtd
    LC_ALL=C virsh -c ${mode}:///system "$@" 2>/dev/null
}

libvirtd_dom_list() {
    # Make sure that it wouldn't be confused if the domain name
    # contains the word running.
    libvirtd_virsh $1 list | awk '$3 == "running" { print $1 }'
}

libvirtd_dom_count() {
    # Make sure that it wouldn't be confused if the domain name
    # contains the word running.
    libvirtd_virsh $1 list | awk 'BEGIN { count = 0 } \
        $3 == "running" { count++ } \
        END { print count }'
}

libvirtd_net_list() {
    # The purpose of the awk is to avoid networks with 'active' in the name
    libvirtd_virsh $1 net-list | awk '$2 == "active" { print $1 }'
}

libvirtd_net_count() {
    # The purpose of the awk is to avoid networks with 'active' in the name
    libvirtd_virsh $1 net-list | awk 'BEGIN { count = 0 } \
        $2 == "active" { count++ } \
        END { print count }'
}


start() {
    # Test configuration directories in /etc/libvirt/ to be either not
    # present or a directory, i.e. not a regular file, bug #532892
    for dir in lxc nwfilter qemu storage; do
      if [ -f /etc/libvirt/$dir ]; then
        eerror "/etc/libvirt/$dir was created as a regular file. It must be 
either"
        eerror "a directory or not present for libvirtd to start up 
successfully."
        return 1
      fi
    done

    ebegin "Starting libvirtd"
    start-stop-daemon --start \
        --env KRB5_KTNAME=/etc/libvirt/krb5.tab \
        --exec /usr/sbin/libvirtd -- -d ${LIBVIRTD_OPTS}
    eend $?
}

stop() {
    local counter=
    local vm_name=
    local net_name=
    local dom_id=

    ebegin "Stopping libvirtd"
    # try to shutdown all (KVM/Qemu) domains
    if [ "${LIBVIRTD_KVM_SHUTDOWN}" != "none" ] \
        && [ "$(libvirtd_dom_count qemu)" != "0" ] ; then

        einfo " Shutting down domain(s):"
        for dom_id in $(libvirtd_dom_list qemu) ; do
            vm_name="$(libvirtd_virsh qemu domname ${dom_id} | head -n 1)"
            einfo "   ${vm_name}"
            libvirtd_virsh qemu ${LIBVIRTD_KVM_SHUTDOWN} ${dom_id} > /dev/null
        done

        if [ -n "${LIBVIRTD_KVM_SHUTDOWN_MAXWAIT}" ] ; then
            counter="${LIBVIRTD_KVM_SHUTDOWN_MAXWAIT}"
        else
            counter=500
        fi

        if [ "${LIBVIRTD_KVM_SHUTDOWN}" = "shutdown" ]; then
            einfo " Waiting ${counter} seconds while domains shutdown ..."
            DOM_COUNT="$(libvirtd_dom_count qemu)"
            while [ ${DOM_COUNT} -gt 0 ] && [ ${counter} -gt 0 ] ; do
                DOM_COUNT="$(libvirtd_dom_count qemu)"
                sleep 1
                counter=$((${counter} - 1))
                echo -n "."
            done
        fi

        if [ "$(libvirtd_dom_count qemu)" != "0" ] ; then
            eerror " !!! Some guests are still running, stopping anyway"
        fi

    fi

    if [ "${LIBVIRTD_KVM_NET_SHUTDOWN}" != "no" ] \
        && [ "$(libvirtd_net_count qemu)" != "0" ]; then

        einfo " Shutting down network(s):"
        for net_name in $(libvirtd_net_list qemu); do
            einfo "   ${net_name}"
            libvirtd_virsh qemu net-destroy ${net_name} > /dev/null
        done

        if [ "$(libvirtd_net_count qemu)" != "0" ]; then
            eerror " !!! Some networks are still active, stopping anyway"
        fi
    fi

    # Now actually stop the daemon
    start-stop-daemon --stop --quiet --exec \
        /usr/sbin/libvirtd --pidfile=/var/run/libvirtd.pid
    eend $?
}

halt() {
    ebegin "Stopping libvirtd without shutting down your VMs"
    start-stop-daemon --stop --quiet --exec \
        /usr/sbin/libvirtd --pidfile=/var/run/libvirtd.pid
    eend $?
}

reload() {
    halt
    start
}




Reply via email to