tamiko 15/06/24 09:48:26 Added: libvirtd.init-r15 libvirtd.confd-r5 Log: provide a configuration option for domains and network on restart, bug #551854 (Portage version: 2.2.18/cvs/Linux x86_64, signed Manifest commit with key BD3A97A3)
Revision Changes Path 1.1 app-emulation/libvirt/files/libvirtd.init-r15 file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-emulation/libvirt/files/libvirtd.init-r15?rev=1.1&view=markup plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-emulation/libvirt/files/libvirtd.init-r15?rev=1.1&content-type=text/plain Index: libvirtd.init-r15 =================================================================== #!/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 policy= local counter= local net_policy= local vm_name= local net_name= local dom_id= ebegin "Stopping libvirtd" if [ "${RC_CMD}" = "restart" -a -n "${LIBVIRTD_KVM_RESTART}" ] ; then policy="${LIBVIRTD_KVM_RESTART}" else policy="${LIBVIRTD_KVM_SHUTDOWN}" fi # sanitize policy: if [ "${policy}" != "none" -a "${policy}" != "managedsave" -a "${policy}" != "shutdown" ] ; then if [ -n "${policy}" ] ; then eerror " !!! Invalid policy \"${policy}\" specified in LIBVIRTD_KVM_SHUTDOWN/RESTART" fi einfo " Using default policy \"managedsave\" for domains" policy="managedsave" fi if [ -n "${LIBVIRTD_KVM_SHUTDOWN_MAXWAIT}" ] ; then counter="${LIBVIRTD_KVM_SHUTDOWN_MAXWAIT}" else counter=500 fi if [ "${RC_CMD}" = "restart" -a -n "${LIBVIRTD_KVM_NET_RESTART}" ] ; then net_policy="${LIBVIRTD_KVM_NET_RESTART}" else net_policy="${LIBVIRTD_KVM_NET_SHUTDOWN}" fi # try to shutdown all (KVM/Qemu) domains if [ "${policy}" != "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 ${policy} ${dom_id} > /dev/null done if [ "${policy}" = "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 # try to shutdown all networks if [ "${net_policy}" != "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 } 1.1 app-emulation/libvirt/files/libvirtd.confd-r5 file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-emulation/libvirt/files/libvirtd.confd-r5?rev=1.1&view=markup plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-emulation/libvirt/files/libvirtd.confd-r5?rev=1.1&content-type=text/plain Index: libvirtd.confd-r5 =================================================================== # /etc/conf.d/libvirtd # Startup dependency # libvirtd typically requires all networks to be up and settled which # is what rc_need="net" provides. However if you only use specific networks # for libvirtd, you may override this. Or if you only use libvirtd locally. rc_need="net" # LIBVIRTD_OPTS # You may want to add '--listen' to have libvirtd listen for tcp/ip # connections if you want to use libvirt for remote control. Please # consult 'libvirtd --help' for more options. #LIBVIRTD_OPTS="--listen" # LIBVIRTD_KVM_SHUTDOWN # controls the behavior for kvm guests on daemon shutdown # # Valid options: # * shutdown # - Sends an ACPI shutdown (think when you tap the power button on your # machine and it begins a graceful shutdown). If your VM ignores this, # it will have the power yanked out from under it in # LIBVIRTD_KVM_SHUTDOWN_MAXWAIT seconds. # * managedsave # - Performs a state save external to the VM. qemu-kvm will stop stop the # CPU and save off all state to a separate file. When the machine is # started again, it will resume like nothing ever happened. This is # guarenteed to always successfully stop your machine and restart it. # However it may take some time to finish. # * none # - No attempts will be made to stop any VMs. If you are restarting your # machine the qemu-kvm process will be simply killed, which may result # in your VMs having disk corruption. LIBVIRTD_KVM_SHUTDOWN="managedsave" # LIBVIRTD_KVM_SHUTDOWN_MAXWAIT # timeout in seconds until stopping libvirtd and "pulling the plug" on # the remaining VM's still in a running state LIBVIRTD_KVM_SHUTDOWN_MAXWAIT="500" # LIBVIRTD_KVM_RESTART # controls the behavior for kvm guests on daemon restart # # Valid options: # * <empty> # - apply the same policy on daemon restart as defined by # LIBVIRTD_KVM_SHUTDOWN for the shutdown # * shutdown # * managedsave # * none # - as defined for LIBVIRTD_KVM_SHUTDOWN LIBVIRTD_KVM_RESTART="" # LIBVIRTD_KVM_NET_SHUTDOWN # If libvirtd created networks for you (e.g. NATed networks) then this # init script will shut them down for you if this is set to 'yes'. # Otherwise, the networks will be left running once libvirt is shutdown. # For this option to be useful you must have enabled the 'virt-network' # USE flag and have had libvirt create a NATed network for you. Valid # values: 'yes' or 'no' LIBVIRTD_KVM_NET_SHUTDOWN="yes" # LIBVIRTD_KVM_NET_RESTART # Valid options: # * <empty> # - apply the same policy on daemon restart as defined by # LIBVIRTD_KVM_NET_SHUTDOWN for the shutdown # * yes # * no # - as defined for LIBVIRTD_KVM_NET_SHUTDOWN LIBVIRTD_KVM_NET_RESTART=""