Hi Scott,
On 06/15/2011 07:47 PM, Scott James Remnant wrote:
A few notes:
- the D-Bus command needs to issue a method return to allow the
initctl command to exit ;-)
Ok! I have uploaded a new diff with this change. Since we need to return
(along with sending a reply) before doing an execvp, we need two threads
of execution. I have used fork to achieve this.
Before returning to initctl, the child process changes the default
SIGTERM handler to a new one which on invocation calls exit(). Then the
child process returns to the initctl command whereas the parent process
waits for this child process to exit. When initctl gets a successful
return, initctl sends the child process a SIGTERM signal upon which the
child process exits. The parent process continues to execvp the new
requested init after it unblocks from the blocking waitpid().
I weighed this against other alternatives and found this to be simpler
than others. Please do let me know if you think this is ok or something
else that could be done in a more efficient/elegant way.
I also added code to remove the inotify handlers against the
configuration directories/files. This is otherwise invoked when you try
to free memory by deleting the contents of the initramfs - i.e when you
delete these configuration directories and files (you see some messages
on the console)
Also as suggested by Evan Broder, removed the moving of the /dev (/dev
-> @rootfs/dev) from upstart. Kept this in the udev job script.
I also need to include a few other changes (namely using libnih function
to do the directory walking/reading ) suggested by James. I will do that
once the "returning to initctl" is resolved.
Thanks!
Warm Regards,
Surbhi.
- I would say you should move /proc, /sys & /dev over simply because
Upstart happens to use two of those, and it makes everyone's lives easier
On Wed, Jun 15, 2011 at 8:06 AM, Surbhi Palande
<[email protected] <mailto:[email protected]>> wrote:
Hi Scott,
I have uploaded a new diff for the new initctl "pivot" command at:
https://code.launchpad.net/~csurbhi/upstart/upstart-add-pivot-handling
Background:
--------------
The pivot command is used for changing the root filesystem in the
initramfs from the memory based "/" to the disk based real root
filesystem. This command can be issued as follows:
initctl pivot <ROOTFS> <INIT>
where ROOTFS is the root filesystem that we want to move to while in
the initramfs. INIT is the first program that we wish to execute
once this move to the real root filesystem is made.
This command is intended to be used when upstart is executed in
initramfs for making the initramfs event driven.
It is assumed that a user can specify a different ROOTFS, INIT or
arguments to this new INIT at the grub command prompt. The console
used for logging the messages is /dev/console and is a not a boot
argument which can be changed.
This command has no effect when it is executed from a non memory
based root filesystem.
---------------
The uploaded diff has the following changes:
1. Added the pivot related code in pivot.c, pivot.h.
2. Added support for compiling pivot.c
3. Made the code in pivot.c modular.
4. Added the handling of moving the virtual filesystem from / to the
requested new rootfs.
5. The default console used is /dev/console. No other console can be
specified. However, if we want to make the console device a boot
parameter or a command line argument for the pivot command then this
can be added. Would like to know views on this. Currently at least
Ubuntu's initramfs does not change the console when it executes
run_init.
I would also love to know any views on whether the pivot command is
the right place to handle the moving of the virtual filesystems
(/dev, /proc, /sys to @rootfs/). Personally, I think that this
virtual filesystem movement is needed _only_ for the correct
execution of the pivot command and so it should be handled by the
pivot command.
Please do let me know your views on this diff. Thanks a lot!
Warm Regards,
Surbhi.
--
upstart-devel mailing list
[email protected]
Modify settings or unsubscribe at:
https://lists.ubuntu.com/mailman/listinfo/upstart-devel