diff mbox series

[1/2] modem-manager: fix test of unset variable in init script

Message ID 20180413162521.7078-2-casantos@datacom.ind.br
State Superseded
Headers show
Series Fix/improve modem-manager init script | expand

Commit Message

Carlos Santos April 13, 2018, 4:25 p.m. UTC
MODEMMANAGER_BIN was never set. Fortunately it did not break the script
execution due to the permissive behavior of "test":

    $ test -x non-existing || echo error
    error
    $ test -x  || echo error
    test -x && echo success
    success

Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
---
 package/modem-manager/S44modem-manager | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Thomas Petazzoni April 14, 2018, 4:07 p.m. UTC | #1
Hello,

On Fri, 13 Apr 2018 13:25:20 -0300, Carlos Santos wrote:
> MODEMMANAGER_BIN was never set. Fortunately it did not break the script
> execution due to the permissive behavior of "test":
> 
>     $ test -x non-existing || echo error
>     error
>     $ test -x  || echo error
>     test -x && echo success
>     success
> 
> Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
> ---
>  package/modem-manager/S44modem-manager | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/package/modem-manager/S44modem-manager b/package/modem-manager/S44modem-manager
> index cf6d89601d..05803fe198 100755
> --- a/package/modem-manager/S44modem-manager
> +++ b/package/modem-manager/S44modem-manager
> @@ -3,6 +3,7 @@
>  # Starts ModemManager
>  #
>  
> +MODEMMANAGER_BIN=/usr/sbin/ModemManager
>  PIDFILE=/var/run/ModemManager.pid
>  
>  [ -x $MODEMMANAGER_BIN ] || exit 0

In fact, I think this test doesn't make sense. It just exits without
any error if the binary doesn't exists, which is silly.

I'm advocating for removing such tests altogether, which would make the
MODEMMANAGER_BIN variable unnecessary.

Thomas
Carlos Santos April 15, 2018, 3:31 p.m. UTC | #2
> From: "Thomas Petazzoni" <thomas.petazzoni@bootlin.com>
> To: "Carlos Santos" <casantos@datacom.ind.br>
> Cc: "buildroot" <buildroot@buildroot.org>, "Aleksander Morgado" <aleksander@aleksander.es>
> Sent: Saturday, April 14, 2018 1:07:25 PM
> Subject: Re: [Buildroot] [PATCH 1/2] modem-manager: fix test of unset variable in init script

> Hello,
> 
> On Fri, 13 Apr 2018 13:25:20 -0300, Carlos Santos wrote:
>> MODEMMANAGER_BIN was never set. Fortunately it did not break the script
>> execution due to the permissive behavior of "test":
>> 
>>     $ test -x non-existing || echo error
>>     error
>>     $ test -x  || echo error
>>     test -x && echo success
>>     success
>> 
>> Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
>> ---
>>  package/modem-manager/S44modem-manager | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>> 
>> diff --git a/package/modem-manager/S44modem-manager
>> b/package/modem-manager/S44modem-manager
>> index cf6d89601d..05803fe198 100755
>> --- a/package/modem-manager/S44modem-manager
>> +++ b/package/modem-manager/S44modem-manager
>> @@ -3,6 +3,7 @@
>>  # Starts ModemManager
>>  #
>>  
>> +MODEMMANAGER_BIN=/usr/sbin/ModemManager
>>  PIDFILE=/var/run/ModemManager.pid
>>  
>>  [ -x $MODEMMANAGER_BIN ] || exit 0
> 
> In fact, I think this test doesn't make sense. It just exits without
> any error if the binary doesn't exists, which is silly.
> 
> I'm advocating for removing such tests altogether, which would make the
> MODEMMANAGER_BIN variable unnecessary.

I think the original purpose of these test was allowing the user to
disable the service by chmod'ing -x the executable file. We discussed
a similar situation in

   https://patchwork.ozlabs.org/patch/818897/

[which by the way is still in my endless to-do list]
Thomas Petazzoni April 15, 2018, 6:18 p.m. UTC | #3
Hello,

On Sun, 15 Apr 2018 12:31:49 -0300 (BRT), Carlos Santos wrote:

> >> +MODEMMANAGER_BIN=/usr/sbin/ModemManager
> >>  PIDFILE=/var/run/ModemManager.pid
> >>  
> >>  [ -x $MODEMMANAGER_BIN ] || exit 0  
> > 
> > In fact, I think this test doesn't make sense. It just exits without
> > any error if the binary doesn't exists, which is silly.
> > 
> > I'm advocating for removing such tests altogether, which would make the
> > MODEMMANAGER_BIN variable unnecessary.  
> 
> I think the original purpose of these test was allowing the user to
> disable the service by chmod'ing -x the executable file. We discussed
> a similar situation in
> 
>    https://patchwork.ozlabs.org/patch/818897/
> 
> [which by the way is still in my endless to-do list]

Well, if you look at my feedback on this patch, I was already saying
that the test to check whether radvd was executable or not was not
useful.

I don't think making a binary program non-executable as a way of
disabling its startup at boot time is very common. Probably a
ENABLED=true/false variable in /etc/default/<service> is more common.

So, I think we should remove all those [ -x /usr/sbin/<foo> ] checks in
our init scripts.

Cc'ing Peter, Arnout and Yann to gather additional opinions on this.

Thomas
Yann E. MORIN April 15, 2018, 6:58 p.m. UTC | #4
Thomas, All,

On 2018-04-15 20:18 +0200, Thomas Petazzoni spake thusly:
> On Sun, 15 Apr 2018 12:31:49 -0300 (BRT), Carlos Santos wrote:
> > >> +MODEMMANAGER_BIN=/usr/sbin/ModemManager
> > >>  PIDFILE=/var/run/ModemManager.pid
> > >>  
> > >>  [ -x $MODEMMANAGER_BIN ] || exit 0  
> > > 
> > > In fact, I think this test doesn't make sense. It just exits without
> > > any error if the binary doesn't exists, which is silly.
> > > 
> > > I'm advocating for removing such tests altogether, which would make the
> > > MODEMMANAGER_BIN variable unnecessary.  
> > 
> > I think the original purpose of these test was allowing the user to
> > disable the service by chmod'ing -x the executable file. We discussed
> > a similar situation in
> > 
> >    https://patchwork.ozlabs.org/patch/818897/
> > 
> > [which by the way is still in my endless to-do list]
> 
> Well, if you look at my feedback on this patch, I was already saying
> that the test to check whether radvd was executable or not was not
> useful.
> 
> I don't think making a binary program non-executable as a way of
> disabling its startup at boot time is very common. Probably a
> ENABLED=true/false variable in /etc/default/<service> is more common.
> 
> So, I think we should remove all those [ -x /usr/sbin/<foo> ] checks in
> our init scripts.
> 
> Cc'ing Peter, Arnout and Yann to gather additional opinions on this.

I agree with Thomas.

This is a position we already stated quite a few times in the past.

If one does not want the daemon, then just remove it and the init script
from a post-build script. If it is about debugging, just remove the
startup script on the target, or just 'exit 0' at the top of it.

Regards,
Yann E. MORIN.
Carlos Santos April 15, 2018, 8:22 p.m. UTC | #5
> From: "Yann E. MORIN" <yann.morin.1998@free.fr>
> To: "Thomas Petazzoni" <thomas.petazzoni@bootlin.com>
> Cc: "Carlos Santos" <casantos@datacom.ind.br>, "buildroot" <buildroot@buildroot.org>, "Aleksander Morgado"
> <aleksander@aleksander.es>, "Peter Korsgaard" <peter@korsgaard.com>, "Arnout Vandecappelle" <arnout@mind.be>
> Sent: Sunday, April 15, 2018 3:58:28 PM
> Subject: Re: [Buildroot] [PATCH 1/2] modem-manager: fix test of unset variable in init script

> Thomas, All,
> 
> On 2018-04-15 20:18 +0200, Thomas Petazzoni spake thusly:
>> On Sun, 15 Apr 2018 12:31:49 -0300 (BRT), Carlos Santos wrote:
>> > >> +MODEMMANAGER_BIN=/usr/sbin/ModemManager
>> > >>  PIDFILE=/var/run/ModemManager.pid
>> > >>  
>> > >>  [ -x $MODEMMANAGER_BIN ] || exit 0
>> > > 
>> > > In fact, I think this test doesn't make sense. It just exits without
>> > > any error if the binary doesn't exists, which is silly.
>> > > 
>> > > I'm advocating for removing such tests altogether, which would make the
>> > > MODEMMANAGER_BIN variable unnecessary.
>> > 
>> > I think the original purpose of these test was allowing the user to
>> > disable the service by chmod'ing -x the executable file. We discussed
>> > a similar situation in
>> > 
>> >    https://patchwork.ozlabs.org/patch/818897/
>> > 
>> > [which by the way is still in my endless to-do list]
>> 
>> Well, if you look at my feedback on this patch, I was already saying
>> that the test to check whether radvd was executable or not was not
>> useful.
>> 
>> I don't think making a binary program non-executable as a way of
>> disabling its startup at boot time is very common. Probably a
>> ENABLED=true/false variable in /etc/default/<service> is more common.
>> 
>> So, I think we should remove all those [ -x /usr/sbin/<foo> ] checks in
>> our init scripts.
>> 
>> Cc'ing Peter, Arnout and Yann to gather additional opinions on this.
> 
> I agree with Thomas.
> 
> This is a position we already stated quite a few times in the past.
> 
> If one does not want the daemon, then just remove it and the init script
> from a post-build script. If it is about debugging, just remove the
> startup script on the target, or just 'exit 0' at the top of it.

So I will prepare a series removing the tests from the startup scripts.
Arnout Vandecappelle April 16, 2018, 3:53 p.m. UTC | #6
On 15-04-18 22:22, Carlos Santos wrote:
>> From: "Yann E. MORIN" <yann.morin.1998@free.fr>
>> To: "Thomas Petazzoni" <thomas.petazzoni@bootlin.com>
>> Cc: "Carlos Santos" <casantos@datacom.ind.br>, "buildroot" <buildroot@buildroot.org>, "Aleksander Morgado"
>> <aleksander@aleksander.es>, "Peter Korsgaard" <peter@korsgaard.com>, "Arnout Vandecappelle" <arnout@mind.be>
>> Sent: Sunday, April 15, 2018 3:58:28 PM
>> Subject: Re: [Buildroot] [PATCH 1/2] modem-manager: fix test of unset variable in init script
> 
>> Thomas, All,
>>
>> On 2018-04-15 20:18 +0200, Thomas Petazzoni spake thusly:
>>> On Sun, 15 Apr 2018 12:31:49 -0300 (BRT), Carlos Santos wrote:
>>>>>> +MODEMMANAGER_BIN=/usr/sbin/ModemManager
>>>>>>  PIDFILE=/var/run/ModemManager.pid
>>>>>>  
>>>>>>  [ -x $MODEMMANAGER_BIN ] || exit 0
>>>>>
>>>>> In fact, I think this test doesn't make sense. It just exits without
>>>>> any error if the binary doesn't exists, which is silly.
>>>>>
>>>>> I'm advocating for removing such tests altogether, which would make the
>>>>> MODEMMANAGER_BIN variable unnecessary.
>>>>
>>>> I think the original purpose of these test was allowing the user to
>>>> disable the service by chmod'ing -x the executable file. We discussed
>>>> a similar situation in
>>>>
>>>>    https://patchwork.ozlabs.org/patch/818897/
>>>>
>>>> [which by the way is still in my endless to-do list]
>>>
>>> Well, if you look at my feedback on this patch, I was already saying
>>> that the test to check whether radvd was executable or not was not
>>> useful.
>>>
>>> I don't think making a binary program non-executable as a way of
>>> disabling its startup at boot time is very common. Probably a
>>> ENABLED=true/false variable in /etc/default/<service> is more common.
>>>
>>> So, I think we should remove all those [ -x /usr/sbin/<foo> ] checks in
>>> our init scripts.
>>>
>>> Cc'ing Peter, Arnout and Yann to gather additional opinions on this.
>>
>> I agree with Thomas.

 +1


>> This is a position we already stated quite a few times in the past.
>>
>> If one does not want the daemon, then just remove it and the init script
>> from a post-build script. If it is about debugging, just remove the
>> startup script on the target, or just 'exit 0' at the top of it.
> 
> So I will prepare a series removing the tests from the startup scripts.

 Well, part of the position we already stated a few times in the past is that we
should make our sysvinit scripts conform to a pattern. So I think the optimal
approach is:

1. Update the sysvinit scripts of one or two packages to conform to this
pattern. Note that we have not really discussed the actual pattern, just a few
preferences (e.g. don't test for the existence of the daemon). So it is
important to update only one or two scripts so we can get convergence on the
desired pattern, before updating many more packages.

2. Document this pattern in the manual. For me, it would be sufficient to refer
to an existing sysvinit script rather than repeating it in the manual.

3. Update more packages.

4. Add some support to check-package to identify common mistakes in the pattern.

 Regards,
 Arnout
Thomas Petazzoni May 14, 2018, 6:57 a.m. UTC | #7
Hello,

On Mon, 16 Apr 2018 17:53:25 +0200, Arnout Vandecappelle wrote:

> > So I will prepare a series removing the tests from the startup scripts.  
> 
>  Well, part of the position we already stated a few times in the past is that we
> should make our sysvinit scripts conform to a pattern. So I think the optimal
> approach is:
> 
> 1. Update the sysvinit scripts of one or two packages to conform to this
> pattern. Note that we have not really discussed the actual pattern, just a few
> preferences (e.g. don't test for the existence of the daemon). So it is
> important to update only one or two scripts so we can get convergence on the
> desired pattern, before updating many more packages.
> 
> 2. Document this pattern in the manual. For me, it would be sufficient to refer
> to an existing sysvinit script rather than repeating it in the manual.
> 
> 3. Update more packages.
> 
> 4. Add some support to check-package to identify common mistakes in the pattern.

Agreed on this plan.

Anybody interested in this effort ?

Best regards,

Thomas
Carlos Santos May 14, 2018, 11:21 a.m. UTC | #8
> From: "Thomas Petazzoni" <thomas.petazzoni@bootlin.com>
> To: "Arnout Vandecappelle" <arnout@mind.be>
> Cc: "Carlos Santos" <casantos@datacom.ind.br>, "Yann Morin" <yann.morin.1998@free.fr>, "buildroot"
> <buildroot@buildroot.org>, "Aleksander Morgado" <aleksander@aleksander.es>, "Peter Korsgaard" <peter@korsgaard.com>
> Sent: Monday, May 14, 2018 3:57:06 AM
> Subject: Re: [Buildroot] [PATCH 1/2] modem-manager: fix test of unset variable in init script

> Hello,
> 
> On Mon, 16 Apr 2018 17:53:25 +0200, Arnout Vandecappelle wrote:
> 
>> > So I will prepare a series removing the tests from the startup scripts.
>> 
>>  Well, part of the position we already stated a few times in the past is that we
>> should make our sysvinit scripts conform to a pattern. So I think the optimal
>> approach is:
>> 
>> 1. Update the sysvinit scripts of one or two packages to conform to this
>> pattern. Note that we have not really discussed the actual pattern, just a few
>> preferences (e.g. don't test for the existence of the daemon). So it is
>> important to update only one or two scripts so we can get convergence on the
>> desired pattern, before updating many more packages.
>> 
>> 2. Document this pattern in the manual. For me, it would be sufficient to refer
>> to an existing sysvinit script rather than repeating it in the manual.
>> 
>> 3. Update more packages.
>> 
>> 4. Add some support to check-package to identify common mistakes in the pattern.
> 
> Agreed on this plan.
> 
> Anybody interested in this effort ?

I already have some scratches and will send some patches as soon as
possible. <o/
diff mbox series

Patch

diff --git a/package/modem-manager/S44modem-manager b/package/modem-manager/S44modem-manager
index cf6d89601d..05803fe198 100755
--- a/package/modem-manager/S44modem-manager
+++ b/package/modem-manager/S44modem-manager
@@ -3,6 +3,7 @@ 
 # Starts ModemManager
 #
 
+MODEMMANAGER_BIN=/usr/sbin/ModemManager
 PIDFILE=/var/run/ModemManager.pid
 
 [ -x $MODEMMANAGER_BIN ] || exit 0
@@ -11,7 +12,7 @@  start() {
 	printf "Starting ModemManager: "
 	umask 077
 	start-stop-daemon -S -q -b -m -p $PIDFILE \
-		--exec /usr/sbin/ModemManager
+		--exec $MODEMMANAGER_BIN
 	[ $? = 0 ] && echo "OK" || echo "FAIL"
 }
 stop() {