Determine if reboot is required to update kernel?
You can try the following bash script from this answer from ServerFault.
#!/bin/bash
LAST_KERNEL=$(rpm -q --last kernel | perl -pe 's/^kernel-(\S+).*/$1/' | head -1)
CURRENT_KERNEL=$(uname -r)
test $LAST_KERNEL = $CURRENT_KERNEL || echo REBOOT
First of all, we print out running kernel version:
# uname -r 2.6.32-71.29.1.el6.i686 Ok, we have to patch: # yum update kernel* Grab the kexec tools: # yum install kexec-tools Now we get last installed kernel version release and put it on a var: # latestkernel=`ls -t /boot/vmlinuz-* | sed "s/\/boot\/vmlinuz-//g" | head -n1` # echo $latestkernel 2.6.32-220.4.1.el6.i686 Now we need to load the new kernel version in memory: # kexec -l /boot/vmlinuz-${latestkernel} --initrd=/boot/initramfs-${latestkernel}.img --append="`cat /proc/cmdline`" Finally, we can issue a reset: # kexec -e ..and.. wow, we lost the system! ..Well, not exactly. The system will “restart without restarting”..something like a fast reboot, without performing BIOS checks (and you know how long can a full system restart last). # uname -r 2.6.32-220.4.1.el6.i686
It worked!
- Be aware that kernel reset will perform a connection reset as well, together with resetting your uptime, so if you’re searching for something to grant your uptime record while security patching, well, this is not for you.