Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20141231215549.GF1809@newbook>
Date: Wed, 31 Dec 2014 13:55:50 -0800
From: Isaac Dunham <ibid.ag@...il.com>
To: musl@...ts.openwall.com
Subject: Re: Failed to execute /init (error -2) for system-wide musl
 libc

On Wed, Dec 31, 2014 at 09:17:06PM +0100, piranna@...il.com wrote:
> > I'm not clear what your root filesystem for qemu looks like
> > (the contents of /lib are the interesting part).
> 
> It's being generated by a cpio.txt file (it's being bundle into Linux
> kernel to be used as initramfs). You can check it at
> https://github.com/NodeOS/NodeOS/pull/89/files#diff-2
> 
> 
> > An ls -l of that directory would be useful.
> >
> > It *should* look like this:
> > /lib
> > /lib/ld-musl-i386.so.1 # either file or  -> /lib/libc.so
> > /lib/libc.so # only if ld-musl-i386.so.1 is symlink
> > /lib/libstdc++.so.6
> > /lib/libgcc_s.so.1
> >
> > Note the version numbers.
> 
> 
> > All of these should be chmod 0755.
> 
> Does this to be mandatory? As you can see, I'm using a 0555 permission
> on libc.so (because it's an executable) and 0444 for the other libs,
> and 0111 for the directories. This is on purposse, both for security
> and to keep users eyes out of ugly things and internal implementation
> details (they should only worry about Node.js APIs).
> 
> Anyway, this gave me and idea and reviewing the cpio.txt file I've
> found this line:
> 
> #dir /lib 0111 0 0
> 
> I uncommented it and the Hello World init has written to the console,
> so I've just recompile using Node.js as /init, and...
> 
> > [    2.255765] input: ImExPS/2 Generic Explorer Mouse as /devices/platform/i8042/serio1/input/input3
> [    2.863453] Switched to clocksource tsc
> 1 +1
> 2
> > Date()
> 'Wed Dec 31 2014 20:08:31 GMT+0000 (GMT)'
> >
> 
> /me head banging in the wall X-D I'll do some more tests, but seems
> that was the issue X-D If so, probably it's a bug on the Linux kernel
> initramfs builder (gen_init_cpio), because the .cpio.gz file is being
> correctly generated and include the libraries without raising an
> error... :-/

Glad you figured it out.

This is one of the arcane details of cpio:
as originally designed, every input that you specify corresponds to
exactly one record, and every record creates at most one file/directory.
The Linux kernel follows this approach; if you create /lib/file but not
/lib in your initrd, the non-existence of /lib will result in /lib/file
not being created.


Thanks,
Isaac Dunham

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.