BusyBox/inittab weirdness
Rob Landley
rob at landley.net
Wed Dec 7 20:09:51 UTC 2005
On Wednesday 07 December 2005 12:06, Rory Vieira wrote:
> The second line, yes. But as I am omitting the whole thing on
> line 1, I don't know where that's pointing to. If I remember
> correctly from the manual, it should be /dev/console (or the
> current active console)
I read the source code pretty throughly when I was doing my init rewrite, but
I don't know if what I remember is what it was doing or what I changed it to
do because what it was doing was stupid.
I need to dig that back up, or redo it.
> > > The first line shows 'echo' and 'uname' without a path
> > specification.
> >
> > Did you give an absolute path to either one?
>
> Nope.
Ok, so when you specify a path in inittab, init shows this path. When you
don't specify a path in inittab, init doesn't show a path.
Where's the problem again?
> > > Obviously I needed to make the 'mount', 'sh', and 'init' links
> > > beforehand. Why do I need to do this for mount etc, but not
> >
> > with echo
> >
> > > or uname?
> >
> > Why did you specify an absolute path for them, but not for
> > echo and uname?
>
> Well, that's what I'm trying to find out *grin*
You made the inittab file...
> > > If I change the second line to just 'mount...' it claims it
> >
> > can find mount at all...
> >
> > I have no idea what your $PATH is set to.
>
> Well, as it is inittab we're talking about... I assume nothing or
> /bin:/sbin. I really don't know as I haven't set a path yet...
If $PATH is blank, bash will suppose some deeply stupid defaults that,
strangely enough, gcc refuses to work with.
details:
The default path provided by bash (2.05b, anyway), if PATH is unset when you
run bash, is:
/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.
Note the "." at the end of the path. If the current directory is in the path
anywhere, the gcc component "collect2" will refuse to search the $PATH when
looking for "ld", and will thus generally ever find it. It doesn't explain
_why_ it can't find ld, it just decides it knows better than the user and
silently skips searching the path based on a dislike of one of its
components. There is no error message, other than "can't find ld". The fix
is simply:
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
But finding that _out_ involves spending an evening tracing your way through
gcc and collect2.
And you wonder why my opinion of the Free Software Foundation's code is
something less than abject worship?
> The line '::sysinit:echo...' is in fact the first line. I'm setting
> the path in /etc/rc.d/rcS but that is still a few lines lower in my
> inittab.
>
> In this case I think the obvious question would be:
> What is BusyBox' default path setting?
Let's see, busybox has libbb/setup_environment.c with DEFAULT_LOGIN_PATH and
DEFAULT_ROOT_LOGIN_PATH. So naturally, with such a clean mechanism in place,
the various applets which merely have "busybox" painted on the side don't use
it. Things like udhcp, ifupdown, and ash all set their own path from a
hardwired list. (Largely the same list, actually, but separate copies
thereof.)
init/init.c also ignores busybox's mechanism, but it at least uses
_PATH_STDPATH, which is some kind of standard I vaguely remember looking up a
year and change ago when I was poking init. It's posix or some such, and I
believe it's in your system header files.
> PS I read that whole thread about the tar/cpio thing. It was extremely
> interesting to read (even for my level). Now somewhere I read the line
> about how to use cpio to 'extract' the archive. Any chance you know
> how to create it using cpio?
Um, I've done it, but not recently.
You can more or less reverse the cpio extract line I gave. if you can't get
it to work poke me and I'll take a whack at it, but giving you a divinitive
answer involves putting together a quick little "hello world" style initramfs
directory, making the cpio.gz, copying that file into the linux build, and
actually testing that it does indeed boot properly with that.
Thats a good 15 to 20 minutes of work, and most of it involves reading the man
pages and trying out what they say. I usually just let the kernel build the
sucker for me anyway, since that's so easy. (Just point the initramfs
generator at a directory and it'll build the cpio archive from that. No
need to use an archiver when there's one built into the kernel
compilation...)
> I'm actually thinking of giving initramfs
> a try. Until now I have created static images that were initrd's. I've
> even got as far as to utilize the pivot_root/chroot stuff and got it
> working too.
With initramfs you have to use switch_root, for reasons I explained in the
initramfs docs I sent the kernel guys (It's in 2.6.15-rc1 and up).
> But it's a pain in the neck, and hard to understand for
> that matter... I have the idea (or it least hope so) that initramfs is
> more suitable for my needs.
It's pretty cool. Feel free to ask me questions and I'll try to answer them,
but read the docs first.
> Now my mini initrd simply created a tmpfs, which I fill by extracting a
> tar file from cd, and pivot to it, so I can clear the memory used by the
> initrd. I hope this whole step will not be nessesary at all...
Yup. It's generally pretty straightforward.
My firmware-linux build is already doing this, by the way.
"http://www.landley.net/code/firmware". I'd hoped to get a new version up
this past weekend, but haven't yet due to spiky design issues that aren't
responding well to being glossed over. Currently aiming for tonight... :)
> Cheers,
> Rory
Rob
--
Steve Ballmer: Innovation! Inigo Montoya: You keep using that word.
I do not think it means what you think it means.
More information about the busybox
mailing list