On Tue, 10 Feb 2004, Mark Lawrence wrote:

> I have written an alpha-quality (untested) version of the vshelper script
> (and accompanying manpage) which I would like to invite discussion on. It
> does not actually do anything at the moment because it requires the
> vserver(8) script to be patched with a new "kill" command.

So, I hacked on the script a bit more, and found a system to test it on.
The results surprised me a bit, and I'd like to make the following
comments with regards to the interface between the kernel and userland.

The kernel patch to reboot(2) invokes the vshelper script with the
following syntax:

  vshelper restart|halt|poweroff|restart2 <ctx> [arg]

My first comment about this is that it is only suitable for use for reboot
related activities, and can't be nicely extended. Although I don't have
any examples, I thought that vshelper would be intended as a a more
generic tool.

So I put the script location into /proc/sys/kernel/vshelper and called
halt(1) from a context. The following showed up in the syslog:

Feb 10 19:24:07 hsee-tor-s001 logger: reboot(restart2) ctx 3 (unknown), uid 0, pid 
508, arg
Feb 10 19:24:07 hsee-tor-s001 logger: reboot(halt) ctx 3 (unknown), uid 0, pid 508, arg
Feb 10 19:24:07 hsee-tor-s001 logger: reboot(restart2) ctx 3 (unknown), uid 0, pid 
508, arg

No I did not call halt or restart three times. It turns out that the
sysvinit utilities (halt, reboot etc) make several calls to reboot(2).

The first changes the Ctl-Alt-Del setting (flag LINUX_REBOOT_CMD_CAD_ON).
Then it calls reboot(2) to actually halt (flag LINUX_REBOOT_CMD_HALT). The
third call (flag ...RESTART2) is actually a fall-through because normally
the CMD_HALT would not return.

What I find misleading, is that the current vserver-reboot(2) patch makes
a distiction between restart, poweroff, halt and restart2, but not the
other two possibilites CAD_ON and CAD_OFF. In fact it kind of puts the
last two flags into the RESTART2 category.

I would prefer that vshelper be the true user-space policy implementation
of reboot(2), and be given a clearer message of what the context
requested.

Therefore I would like to propose the following interface between
kernel/vshelper.

  vshelper <action> <ctx> [<arg...>]

Where <action> depends on the system call or unique area of request from
the context. <ctx> is of course the context, and <arg...> are zero or more
arguments which are specific to the <action>.

Hence for reboot we would have in the generic sense:

  vshelper reboot <ctx> <flag> [arg]

which in the specific sense would be:

  vshelper reboot <ctx> reboot|halt|poweroff|cad_on|cad_off|{restart2 arg}

(actually I would just let the kernel pass the actual hex value of flag).

As you can see this is much closer to the original system call, and lets
us better define policy in userland. Maybe one day we want to perform an
action when CAD_ON or CAD_OFF are called? However calling vshelper with
"restart2" to do that is not very obvious.

I have also put together a script which implements this syntax (but no
man-page yet) at http://rekudos.net/download/vshelper-new.

Once again feedback is welcome...

Cheers, Mark.
-- 
Mark Lawrence

_______________________________________________
Vserver mailing list
[EMAIL PROTECTED]
http://list.linux-vserver.org/mailman/listinfo/vserver

Reply via email to