Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 6 Mar 2016 17:38:53 -0700
From:      Warner Losh <imp@bsdimp.com>
To:        Nikolai Lifanov <lifanov@mail.lifanov.com>
Cc:        Dimitry Andric <dim@freebsd.org>, "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>,  "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, src-committers <src-committers@freebsd.org>,  owner-svn-src-head@freebsd.org, Oliver Pinter <oliver.pinter@hardenedbsd.org>
Subject:   Re: svn commit: r296428 - head/sys/boot/common
Message-ID:  <CANCZdfqDHb5JjjADU4n6r88mMGZ0HcRnP3T3anjgnxiFgPReUg@mail.gmail.com>
In-Reply-To: <D0BC75E8-4B9A-4727-9F8F-365CA3A49667@mail.lifanov.com>
References:  <201603061557.u26FvhMi033982@repo.freebsd.org> <CAPQ4ffut5jLNp5X4cV_DCsPGfv4Fw%2BPVm0ANNftuj2PLFZrjtQ@mail.gmail.com> <0FC43773-1BF0-43FF-BB97-35B482ABBE12@FreeBSD.org> <5ba9554b9066227c883140c7c12e4703@mail.lifanov.com> <0D2DFD32-B29F-48EA-8D60-458960993E97@FreeBSD.org> <D0BC75E8-4B9A-4727-9F8F-365CA3A49667@mail.lifanov.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Mar 6, 2016 at 4:44 PM, Nikolai Lifanov <lifanov@mail.lifanov.com>
wrote:

> On March 6, 2016 4:13:34 PM EST, Dimitry Andric <dim@FreeBSD.org> wrote:
> >On 06 Mar 2016, at 20:57, Nikolai Lifanov <lifanov@mail.lifanov.com>
> >wrote:
> >>
> >> On 2016-03-06 11:17, Dimitry Andric wrote:
> >>> On 06 Mar 2016, at 17:00, Oliver Pinter
> ><oliver.pinter@hardenedbsd.org> wrote:
> >>>> On 3/6/16, Dimitry Andric <dim@freebsd.org> wrote:
> >>>>> Author: dim
> >>>>> Date: Sun Mar  6 15:57:43 2016
> >>>>> New Revision: 296428
> >>>>> URL: https://svnweb.freebsd.org/changeset/base/296428
> >>>>> Log:
> >>>>> Since kernel modules can now contain sections of type
> >SHT_AMD64_UNWIND,
> >>>>> the boot loader should not skip over these anymore while loading
> >images.
> >>>>> Otherwise the kernel can still panic when it doesn't find the
> >.eh_frame
> >>>>> section belonging to the .rela.eh_frame section.
> >>>>> Unfortunately this will require installing boot loaders from
> >sys/boot
> >>>>> before attempting to boot with a new kernel.
> >>>> Could you please add a note about this to UPDATING file?
> >>> I am a bit torn on this, because normally we always tell people to
> >>> install the kernel first, reboot, then run make installworld (which
> >also
> >>> installs the boot loaders).
> >>> However, in this case, people might depend on their boot loader
> >loading
> >>> modules which are required to make the system boot at all.  So if
> >they
> >>> happened to forget updating their boot loader first, a panic might
> >be
> >>> the result.
> >>> I wonder what a failsafe and acceptable upgrade scenario is, in this
> >>> case.  Normally the procedure is something like:
> >>>  make buildworld
> >>>  make buildkernel (with KERNCONF=whatever, if needed)
> >>>  make installkernel (again with KERNCONF, if needed)
> >>>  reboot (to single user, but cheating is possible usually)
> >>>  mergemaster -p
> >>>  make installworld
> >>> This could maybe be modified to:
> >>>  make buildworld
> >>>  make buildkernel (with KERNCONF=whatever, if needed)
> >>>  make installkernel (again with KERNCONF, if needed)
> >>>  make -C sys/boot install
> >>>  reboot (to single user, but cheating is possible usually)
> >>>  mergemaster -p
> >>>  make installworld
> >>> E.g. insert the step which installs the boot loaders just after (or
> >>> before) the step which installs the kernel.
> >>> Is something like this acceptable as a one-time workaround, or maybe
> >it
> >>> is better in general, in case we ever add other new features to the
> >boot
> >>> loaders?
> >>> -Dimitry
> >>
> >> In my opinion, boot *blocks* (boot1) should be updated seldomly and
> >not on every install.
> >> All (?) instances of not updating these resulting in a failed boot
> >have an UPDATING
> >> entry or a similar warning (like the one during "zpool upgrade").
> >
> >Well, each time you run make installworld, almost all the files in
> >/boot
> >(except for configuration) get reinstalled.  For e.g. mbr, boot1 and
> >such, this has no consequences at all, until you install them into some
> >partition using gpart, but changes to loader, loader.efi or zfsloader
> >*will* affect the next startup.
> >
> >Per a suggestion from Kostik, maybe it would be nice to have a separate
> >"make installboot" target, which installs just the components in /boot.
> >This could then be used before or after "make installkernel".
> >
> >-Dimitry
>
> The bootcode gets installed to boot, but deployed with gpart, cp, sliced
> in half and dd, etc. And that's to one or more partitions.
> I don't think that a separate install target that just stages boot1 to
> /boot is valuable.
>

I think it is. First, the boot code you talk about doesn't matter *AT*ALL*
for this
change. It needn't be deployed to be safe. We've had a few rare cases where
you
do need new boot code as well, but they seem to happen about once a decade
or so.

Personally, I always install both a kernel and userspace at the same time
when
upgrading, though sometimes just the kernel. Usually it just doesn't
matter. In
this case, I'll know I need new boot blocks. I'm kinda of the opinion that
the boot
loader should be part of installkernel, but I can see how others may
disagree and
that's likely too much POLA to do now (it should have been done in the 4.0
time
frame when we went to a tertiary boot loader).

With the recent expansion of limits, however, it's become critical that you
have
a new kernel on boot so that limits used by the rc system are set correctly
(the
new code has no fallback, but fails for limits it doesn't know about, which
is
super lame, and should be fixed, but until it is we're stuck with needing a
new kernel. This also means, btw, that a 10.x kernel has no chance of
booting
an 11.x userland, which is somewhat contrary to traditional practice in the
project).

Warner



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfqDHb5JjjADU4n6r88mMGZ0HcRnP3T3anjgnxiFgPReUg>