Enable libvirt coredumps
This adds a flag and basic config for enabling coredumps for libvirt. Partial-Bug: 1643911 Co-Authored-By: Matthew Booth <mbooth@redhat.com> Change-Id: If7cd54e804a5a389a0d82a325b58f5b41b8ef0db
This commit is contained in:
parent
6fbd969c85
commit
bfcc760b96
@ -20,8 +20,46 @@ set +o xtrace
|
|||||||
# extremely verbose.)
|
# extremely verbose.)
|
||||||
DEBUG_LIBVIRT=$(trueorfalse True DEBUG_LIBVIRT)
|
DEBUG_LIBVIRT=$(trueorfalse True DEBUG_LIBVIRT)
|
||||||
|
|
||||||
|
# Try to enable coredumps for libvirt
|
||||||
|
# Currently fairly specific to OpenStackCI hosts
|
||||||
|
DEBUG_LIBVIRT_COREDUMPS=$(trueorfalse False DEBUG_LIBVIRT_COREDUMPS)
|
||||||
|
|
||||||
|
# Only Xenial is left with libvirt-bin. Everywhere else is libvirtd
|
||||||
|
if is_ubuntu && [ ! -f /etc/init.d/libvirtd ]; then
|
||||||
|
LIBVIRT_DAEMON=libvirt-bin
|
||||||
|
else
|
||||||
|
LIBVIRT_DAEMON=libvirtd
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Enable coredumps for libvirt
|
||||||
|
# Bug: https://bugs.launchpad.net/nova/+bug/1643911
|
||||||
|
function _enable_coredump {
|
||||||
|
local confdir=/etc/systemd/system/${LIBVIRT_DAEMON}.service.d
|
||||||
|
local conffile=${confdir}/coredump.conf
|
||||||
|
|
||||||
|
# Create a coredump directory, and instruct the kernel to save to
|
||||||
|
# here
|
||||||
|
sudo mkdir -p /var/core
|
||||||
|
sudo chmod a+wrx /var/core
|
||||||
|
echo '/var/core/core.%e.%p.%h.%t' | \
|
||||||
|
sudo tee /proc/sys/kernel/core_pattern
|
||||||
|
|
||||||
|
# Drop a config file to up the core ulimit
|
||||||
|
sudo mkdir -p ${confdir}
|
||||||
|
sudo tee ${conffile} <<EOF
|
||||||
|
[Service]
|
||||||
|
LimitCORE=infinity
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Tell systemd to reload the unit (service restarts later after
|
||||||
|
# config anyway)
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Installs required distro-specific libvirt packages.
|
# Installs required distro-specific libvirt packages.
|
||||||
function install_libvirt {
|
function install_libvirt {
|
||||||
|
|
||||||
if is_ubuntu; then
|
if is_ubuntu; then
|
||||||
install_package qemu-system
|
install_package qemu-system
|
||||||
install_package libvirt-bin libvirt-dev
|
install_package libvirt-bin libvirt-dev
|
||||||
@ -48,7 +86,10 @@ function install_libvirt {
|
|||||||
|
|
||||||
install_package libvirt libvirt-devel
|
install_package libvirt libvirt-devel
|
||||||
pip_install_gr libvirt-python
|
pip_install_gr libvirt-python
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $DEBUG_LIBVIRT_COREDUMPS == True ]]; then
|
||||||
|
_enable_coredump
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,14 +109,6 @@ cgroup_device_acl = [
|
|||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Since the release of Debian Wheezy the libvirt init script is libvirtd
|
|
||||||
# and not libvirtd-bin anymore.
|
|
||||||
if is_ubuntu && [ ! -f /etc/init.d/libvirtd ]; then
|
|
||||||
LIBVIRT_DAEMON=libvirt-bin
|
|
||||||
else
|
|
||||||
LIBVIRT_DAEMON=libvirtd
|
|
||||||
fi
|
|
||||||
|
|
||||||
if is_fedora || is_suse; then
|
if is_fedora || is_suse; then
|
||||||
# Starting with fedora 18 and opensuse-12.3 enable stack-user to
|
# Starting with fedora 18 and opensuse-12.3 enable stack-user to
|
||||||
# virsh -c qemu:///system by creating a policy-kit rule for
|
# virsh -c qemu:///system by creating a policy-kit rule for
|
||||||
|
@ -223,6 +223,14 @@ def guru_meditation_reports():
|
|||||||
print("guru meditation report in %s log" % service)
|
print("guru meditation report in %s log" % service)
|
||||||
|
|
||||||
|
|
||||||
|
def var_core():
|
||||||
|
if os.path.exists('/var/core'):
|
||||||
|
_header("/var/core dumps")
|
||||||
|
# NOTE(ianw) : see DEBUG_LIBVIRT_COREDUMPS. We could think
|
||||||
|
# about getting backtraces out of these. There are other
|
||||||
|
# tools out there that can do that sort of thing though.
|
||||||
|
_dump_cmd("ls -ltrah /var/core")
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
opts = get_options()
|
opts = get_options()
|
||||||
fname = filename(opts.dir, opts.name)
|
fname = filename(opts.dir, opts.name)
|
||||||
@ -238,6 +246,7 @@ def main():
|
|||||||
ebtables_dump()
|
ebtables_dump()
|
||||||
compute_consoles()
|
compute_consoles()
|
||||||
guru_meditation_reports()
|
guru_meditation_reports()
|
||||||
|
var_core()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
Loading…
Reference in New Issue
Block a user