Re: PID of init != 1 when initrd with pivot_root

W. Michael Petullo (mike@flyn.org)
Tue, 5 Jun 2001 17:56:18 +0200


>>> Well, I upgraded and found pivot_root and the problem is that how do I make
>>> init run with PID 1. My linuxrc gets PID 7.
>>>
>>> 1 ? 00:03:05 swapper
>>> ...
>>> 7 ? 00:00:00 linuxrc
>>>
>>> init doesn't like running with any other PID than 1. I could probably revert
>>> to the not so old way of doing things and exit linuxrc and let the kernel
>>> change root. But then I wouldn't be able to mount root over samba :-(.
>>>
>>> ...

>> This is this way for backwards bug compatibility. Use the following
>> command line options to make it behave properly:
>>
>> ram=/dev/ram0 init=/linuxrc

> ...
>
> But the problem still remains. How do I make my /sbin/init run with PID 1
> using initial ramdisk under the new root change mechanism? I don't want to
> use the old change_root mechanism...

I had the same problem when doing some development for mkCDrec.
This project uses busybox, whose init does not run if its PID != 1.
I asked the busybox folks same question you did and never got a response.

As a kludge, and after looking at the busybox source code, I renamed init
to linuxrc. In this case the program is functionally equivalent to init,
except that it does not do the PID == 1 check.

An excerpt from my real linuxrc:

echo Pivot_root: my PID is $$
# exec /usr/sbin/chroot . /sbin/init < dev/console > dev/console 2>&1
# Okay, try this:
exec /usr/sbin/chroot . /sbin/linuxrc < /dev/console > /dev/console 2>&1

/sbin/linuxrc is actually init, renamed.

I am sure this is not the preferred method. Please let me know if you
find the correct solution.

-- 
W. Michael Petullo

:wq - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/