Bug 199054

Summary: freebsd-update should use /boot/kernel.old and not kernel.old1
Product: Base System Reporter: torsten.eichstaedt
Component: miscAssignee: freebsd-bugs mailing list <bugs>
Status: Open ---    
Severity: Affects Only Me CC: allanjude, emaste
Priority: ---    
Version: 9.3-RELEASE   
Hardware: Any   
OS: Any   

Description torsten.eichstaedt 2015-03-30 22:33:34 UTC
After 'freebsd-update' the old kernel saved in /boot/kernel.old1 and not /kernel.old, but kernel/old1 is not in the boot loader's menu by default.  Thus one can't go back after an update in case something went wrong.

Environment:
FreeBSD paul-lifebook.local.lan 9.3-RELEASE-p10 FreeBSD 9.3-RELEASE-p10 #0: Tue Feb 24 21:28:03 UTC 2015     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64
(I booted kernel.old after update)

How-To-Repeat:
have /boot/kernel.old and issue 'freebsd-update'

Fix:
Add this line to /boot/loader.conf:
kernels="kernel kernel.old kernel.old1"
Comment 1 Ed Maste freebsd_committer 2017-08-10 14:53:57 UTC
Note that FreeBSD-update first tries kernel.old, then kernel.old1 etc.:

# We could not use current directory name, so add counter to
# the end and try again.
CNT=$((CNT + 1))
if [ $CNT -gt 9 ]; then
        echo "Could not find valid backup dir ($BASEDIR/$BACKUPKERNELDIR)"
        exit 1
fi
BACKUPKERNELDIR="`echo $BACKUPKERNELDIR | sed -Ee 's/[0-9]\$//'`"
BACKUPKERNELDIR="${BACKUPKERNELDIR}${CNT}"

Allan has some WIP to automatically determine the available kernel list; this problem will likely be solved with that work.