[RFC] new initctl command
Surbhi Palande
surbhi.palande at canonical.com
Wed Jun 22 13:01:28 UTC 2011
Hi James,
Thanks a lot for the review and the suggestions.
I have incorporated most of the changes you suggested and pushed them to:
https://code.launchpad.net/~csurbhi/upstart/upstart-add-pivot-handling/
I have not made two changes - please see the following inline comments:
> A few more observations:
>
> * init/pivot.h:
> - Out of interest when would MS_MOVE, etc not be defined? If there is
> a legitimate reason for including these redefs, I think we should
> document why.
> * init/pivot.c:
> - get_complete_path(): Needs asserts for dirname and dirent_name?
> - are_we_on_ramfs: compile error:
> pivot.c:186:17: error: comparison between signed and unsigned integer expressions
> - get_dir():
> - Use nih_dir_walk_scan() rather than the readdir() loop.
nih_dir_walk_scan () is a static function in file.c. The non static
function which calls nih_dir_walk_scan is nih_dir_walk (). AFAIU, this
is not very suitable for deleting the contents of a directory, but
rather for reading them. The implementation of nih_dir_walk()
particularly uses "stat" rather than "lstat" and so deletion of links is
difficult using this function.
> - pivot_emit_failed_event(): Need to document return value.
> - is_rootfs_ok():
> - Needs assert for rootfs.
> - Return statement should start "Returns ...".
> - get_init_args():
> - Needs assert for "root" and "init".
> - Use nih_file_read() rather than fopen() and fgets().
nih_file_read () uses stat () to find the size of the file and then uses
this size to read the contents of the file. stat on /proc/cmdline
indicates that its an empty file. Hence nih_file_read () returns an
empty string and a size of 0 bytes on trying it with /proc/cmdline.
Thus, this is not suitable for reading /proc/cmdline.
> - "line" is hard-coded to 4k, but it should seemingly be set to the
> page size (sysconf(PAGE_SIZE) / sysconf(PAGESIZE) / getpagesize()).
> - Use PROC_CMDLINE rather than hard-coding string "/proc/cmdline".
> - Use nih_string_split() rather than strtok().
> - is_init_ok():
> - Needs assert for "init".
> - Return statement should start "Returns ...".
> - Calls to nih_dbus_error_raise_printf() could log name of requested
> init too?
> - del_dir(): Remove "end of while" comment.
> - move_mounts(): Missing space after "if" in "if(errno == ENOMEM)".
> * init/events.h: PIVOT_FAILED_EVENT should be "pivot-failed" for
> consistency with other events (see upstart-events(7) on Ubuntu).
> * util/initctl.c:
> - pivot_action(): If the "nih_assert (ret< 0)" fails, you will never
> get beyond that line, so the nih_error() will never be called.
> - Suggest you change...
>
> "INIT is the new init process"
>
> ... to:
>
> "INIT is the full path to the binary"
I have not yet added the man page. However shall do that soon (once the
code is accepted on ml)
I have also added the code for sending a reply back to initctl without
returning to the dbus middle ware. I had misinterpreted the dbus
interface previously, due to which I thought that a ret was needed apart
from sending a reply.
Please do let me know any other changes that are necessary. As before, I
have tested this in Ubuntu's initramfs on kvm. Thanks!
Warm Regards,
Surbhi.
>
>
> Regarding the compile error, can you make sure that you test by configuring like this:
>
> ./configure --disable-silent-rules --enable-compiler-warnings --disable-compiler-optimisations
> - --disable-linker-optimisations ...&& make
>
> I'll add this to the cookbook...
>
> Regards,
>
> James.
>
>
> On 15/06/11 17:47, Scott James Remnant wrote:
>> A few notes:
>>
>> - the D-Bus command needs to issue a method return to allow the initctl command to exit ;-)
>>
>> - 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<surbhi.palande at canonical.com
>> <mailto:surbhi.palande at canonical.com>> 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.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
> - --
> James Hunt
> ____________________________________
> Ubuntu Foundations Team, Canonical.
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.11 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>
> iEYEARECAAYFAk352zAACgkQYBWEaHcQG9dhfwCfRUvF9yip1ztxKECQiOfUZO6b
> TiMAmweAxkbfsjqoumGyHp3SuSyXllOt
> =BFIB
> -----END PGP SIGNATURE-----
More information about the upstart-devel
mailing list