Ian Jackson
2019-Feb-12 18:14 UTC
[Pkg-xen-devel] [PATCH 08/13] xen init script: rewrite xenstored start logic
Hans van Kranenburg writes ("Re: [PATCH 08/13] xen init script: rewrite
xenstored start logic"):> So the question we should answer first is: What do we allow the user to
> set as value? /bin/bash? And how should the init script deal with that?
If they specify an absolute path, it should be used. Eg,
/home/alice/Xen/xen/tools/xenstore/xenstore
If the user specifies /bin/bash they get to keep all the resulting
pieces.
> Or do you want to be able to use this to run your own xenstored
> replacement implementation from /usr/local/ian/ixenstored ?
Right. Or a wrapper script or something (although s-s-d will
mishandle that).
> > This exit status handling is confusing. AFAICT from the manpage for
> > start-stop-daemon, exit status 1 means "--oknodo was not
specified and
> > nothing was done". So I think that would occur when --start does
> > nothing because the daemon is already running. It might be worth
> > adding a comment.
>
> Using --start --pidfile --exec --test apparently both checks for pidfile
> and also for an actual matching running process. This construct was used
> here already, I just kept it. I see why a small comment that this
> returning 1 explicitely means that "Success! We found a matching
process!".
>
> Maybe simplify and just return 1 from this function if it's not good,
> and return 0 on success?
That would be more usual.
Normally an init script which is asked to start a daemon and declines
to do so because it's already running will treat that as a failure.
But we don't ever stop xenstored so I think in this case we should
probably treat it already being there as a success for `start' ?
> The 0|1) which are in several places further on are also confusing me:
>
> xenstored_start
> case "$?" in
> 0|1) ;;
> *) log_end_msg 1; exit ;;
> esac
>
> I mean, why torture the reader of the code with counter intuitive 1
> values that mean success...
I agree. Madness.
> > for try_xenstored_var in $try_xenstoreds; do
> > eval "try_xenstored=\$$try_xenstored_var"
> > ...
>
> Yes, that way the two start-stop-daemon can be one instead, nice!
>
> And do you agree that exploding when an explicit choice has been made by
> the user + that binary can't be started is the right thing?
Yes.
> If I would accidentally set 'xensrtored' as value, because I
explicitely
> want to run xenstored and not oxenstored, and the typo is because I'm
in
> a hurry because a gigantic security hole in oxenstored was found, I
> don't want the init script to silently still start oxenstored, because
> -x /[...]/xensrtored fails.
Indeed.
Ian.
--
Ian Jackson <ijackson at chiark.greenend.org.uk> These opinions are my
own.
If I emailed you from an address @fyvzl.net or @evade.org.uk, that is
a private address which bypasses my fierce spamfilter.
Hans van Kranenburg
2019-Feb-12 18:21 UTC
[Pkg-xen-devel] [PATCH 08/13] xen init script: rewrite xenstored start logic
On 2/12/19 7:14 PM, Ian Jackson wrote:> Hans van Kranenburg writes ("Re: [PATCH 08/13] xen init script: rewrite xenstored start logic"): >> So the question we should answer first is: What do we allow the user to >> set as value? /bin/bash? And how should the init script deal with that? > > If they specify an absolute path, it should be used. Eg, > /home/alice/Xen/xen/tools/xenstore/xenstoreOk.> If the user specifies /bin/bash they get to keep all the resulting > pieces. > >> Or do you want to be able to use this to run your own xenstored >> replacement implementation from /usr/local/ian/ixenstored ? > > Right. Or a wrapper script or something (although s-s-d will > mishandle that).Yes, I'm no start-stop-daemon expert, but this should be well tested in combination with the already-running check. Having the init script wrongly start another xenstored just makes everything hang withouta good explanation to the user. K
Hans van Kranenburg
2019-Feb-12 20:19 UTC
[Pkg-xen-devel] [PATCH 08/13] xen init script: rewrite xenstored start logic
On 2/12/19 7:21 PM, Hans van Kranenburg wrote:> On 2/12/19 7:14 PM, Ian Jackson wrote: >> Hans van Kranenburg writes ("Re: [PATCH 08/13] xen init script: rewrite xenstored start logic"): >>> So the question we should answer first is: What do we allow the user to >>> set as value? /bin/bash? And how should the init script deal with that? >> >> If they specify an absolute path, it should be used. Eg, >> /home/alice/Xen/xen/tools/xenstore/xenstoreSo, if I have /home/knorrie/xenstore-mouton and start that, and then change it to /home/knorrie/xenstore-kebab ...then do /etc/init.d/xen restart, then start-stop will not see a matching process because there's no way it can know about this xenstore-mouton binary which is still running. I end up with stopped xenconsoled, and then xenstore-kebab will be started, which fails and the whole thing aborts. Option 1: simplify check to just do -f pidfile existence, like upstream launch-xenstore does. Option 2: do something with the `xenstore-read -s /` check from the timeout loop. If it connects and reads, it's apparently running, boom, done. Or a combination... or... Whraagh, actually, instead of continuing with this... Maybe we should just call launch-xenstore from the init script, and butcher it a bit with a patch in the packaging... * Change /etc/default/xencommons to /etc/default/xen * Change the echo line into lsb_blah. * Change the startup command into start-stop-daemon. * Maybe do something with the `xenstore-read -s /` check? Why is this used in Debian in the timeout loop instead? Is it better than -f pidfile? * We already remove the section about XENSTORETYPE in /etc/default/xen, so the domain part in it is just inactive code. Then we have the script with build-replaced @@ in it and are closer to looking at changes which we might try upstreaming later (converting to lsb_etc for example.) And, we're closer to including systemd stuff, since that simply also reuses the launch-xenstore. (!) Also, apparently init-dom0 is not done inside launch-xenstore, but in xencommons: @XEN_SCRIPT_DIR@/launch-xenstore || exit 1 echo Setting domain 0 name, domid and JSON config... ${LIBEXEC_BIN}/xen-init-dom0 So, even the patch to move that into launch-xenstore because it wil only print "Bweuuh, I have nothing to do" in all other cases can go upstream.. What do you think?>> If the user specifies /bin/bash they get to keep all the resulting >> pieces. >> >>> Or do you want to be able to use this to run your own xenstored >>> replacement implementation from /usr/local/ian/ixenstored ? >> >> Right. Or a wrapper script or something (although s-s-d will >> mishandle that). > > Yes, I'm no start-stop-daemon expert, but this should be well tested in > combination with the already-running check. > > Having the init script wrongly start another xenstored just makes > everything hang withouta good explanation to the user.K