make buildkernel fails without complete source tree

John Baldwin jhb at freebsd.org
Mon Jan 22 18:48:24 UTC 2007


On Monday 22 January 2007 13:17, Ken Smith wrote:
> On Mon, 2007-01-22 at 11:11 -0500, John Baldwin wrote:
> > On Sunday 21 January 2007 16:24, Ruslan Ermilov wrote:
> > > On Thu, Jan 18, 2007 at 01:48:14PM -0800, Murray Stokely wrote:
> > > > On 1/18/07, John Baldwin <jhb at freebsd.org> wrote:
> > > > ===================================================================
> > > > >-      { " sys",                "/usr/src/sys (FreeBSD kernel)",
> > > > >+      { " sys",                "/usr/src/sys (FreeBSD kernel; 
requires 
> > > > >'base'
> > > > >to build)",
> > > > 
> > > > I think this is a good solution.
> > > > 
> > > I don't think this is a good idea as it's not actually required.
> > > The sys/ part have traditionally been standalone.  And if you're
> > > not upgrading then "buildkernel" is just a convenience alias for
> > > config/make method.  Actually this method is always used except
> > > that in the buildkernel case it will use an upgraded toolchain
> > > if it was previously built by "buildworld".
> > 
> > It is required for buildkernel as otherwise there's no Makefile 
in /usr/src 
> > with a buildkernel target.  It's only not required if you do 'config, 
etc.' 
> > by hand, but 'make buildkernel' requires some sort of /usr/src/Makefile, 
> > obviously. :)
> 
> I think that's what Ruslan meant by it having "traditionally been
> standalone".  By tradition someone who just extracted the sys stuff
> wasn't expecting to do 'make buildkernel', they expected to do the
> 'config, etc'.  For example someone who wanted to build custom kernels
> but had no intention of updating the machine using the source tree, and
> they knew how to build the kernels manually.

Yes, but the thread started because someone installed 'ssys' and tried to 
build it using 'buildkernel' because that's what the handbook mentions.  In 
fact, the handbook doesn't even mention the old way anymore at all, so for 
new users ssys for all intents and purposes does depend on sbase.

> The truth is the message should read "(FreeBSD kernel; requires 'base'
> to build if you insist on using 'make buildkernel' in /usr/src to build
> a kernel but if you know how to build a kernel 'manually' then 'base' is
> not required)".  But I don't think that fits in 80 columns... :-)

If someone knows how to build it the old way, they probably know they can just 
install ssys, and installing sbase won't hurt them anyway, it's really small 
in terms of disk space.  OTOH, someone who is new to FreeBSD might just pick 
the kernel sources and end up in the OP's situation by following the 
handbook.

However, to counter that, if a new(er) user chooses the 'Kernel Developer' 
or 'X-Kernel Developer' from the dist menu, they will get sbase and ssys 
installed, so it's really when they go and dink with the src dists by hand 
that the get into trouble, so maybe we just leave it as it is.  They asked 
for pain and they got pain. :)  Alternatively, you could also add a note to 
the handbook near the kernel building instructions to note that if you wish 
to build a kernel from the src dists in sysinstall, you need to have both 
the 'ssys' and 'sbase' dists installed.  That might actually be the best 
solution.  It can even be one of those fancy Note: boxes via a <note> tag. :)

On another side note, the name "Kernel Developer" in the dist menu is probably 
confusing.  Most new users probably don't consider themselves a "kernel 
developer", so probably don't go for that option.  Shoot, there are people 
who probably don't consider themselves "developers" in that they don't churn 
out mountains of C/C++ code, but they need the kernel sources to compile 
custom kernels to tweak their boxes.

> The message as proposed above also begs the question "So why have sys as
> a separate thing if all you can do is look at it?.  That's not true but
> it is what the message suggests.

Because some people may just want to look at it. :)  You can also still build 
modules by hand by going to /sys/modules/foo without having sbase installed.  
(Similar to installing 'sbin' and going to /usr/src/bin/foo to build 'foo').

-- 
John Baldwin



More information about the freebsd-doc mailing list