Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH] support: properly check for bash as a dependency
@ 2014-03-17 10:42 Yann E. MORIN
  2014-03-17 21:28 ` Peter Korsgaard
  2014-03-18  5:01 ` Thomas Petazzoni
  0 siblings, 2 replies; 8+ messages in thread
From: Yann E. MORIN @ 2014-03-17 10:42 UTC (permalink / raw)
  To: buildroot

From: "Yann E. MORIN" <yann.morin.1998@free.fr>

The way we are checking for bash is to look if "$SHELL --version"
will return a string containing "^GNU bash".

In case the system shell is dash (eg. /bin/sh -> /bin/dash), but
the user's login shell is bash, dash will not override the SHELL
variable:

    $ echo $SHELL
    /bin/bash
    $ /bin/dash
    $$ echo $SHELL
    /bin/bash

The same happens when called as the interpreter for a shell script:

    $ cat foo.sh
    #!/bin/dash
    echo $SHELL

    $ echo $SHELL
    /bin/bash
    $ ./foo.sh
    /bin/bash

So, calling "$SHELL --version" will still return "^GNU bash" no matter
what shell is actually running.

Since quite a lot of #!/bin/sh scripts are in fact bash scripts, we
really want to ensure that /bin/sh is bash.

Reported-by: Andrew Barnes <andy@outsideglobe.com> (on IRC)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Andrew Barnes <andy@outsideglobe.com>
---
 support/dependencies/dependencies.sh | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/support/dependencies/dependencies.sh b/support/dependencies/dependencies.sh
index a8261b3..1b1a825 100755
--- a/support/dependencies/dependencies.sh
+++ b/support/dependencies/dependencies.sh
@@ -138,11 +138,16 @@ if [ ! -z "$CXXCOMPILER" ] ; then
 	fi
 fi
 
-# Check bash
-if ! $SHELL --version 2>&1 | grep -q '^GNU bash'; then
+# Check bash is the system shell
+if ! /bin/sh --version 2>&1 | grep -q '^GNU bash'; then
 	echo
-	echo "You must install 'bash' on your build machine";
-	exit 1;
+	echo "You must install 'bash' on your build machine"
+	echo "and make it your default shell. On Debian-like"
+	echo "systems, this can be done with:"
+	echo "    sudo dpkg-reconfigure dash"
+	echo "and answer 'No' to the question:"
+	echo "    Use dash as the default system shell (/bin/sh)?"
+	exit 1
 fi;
 
 # Check that a few mandatory programs are installed
-- 
1.8.3.2

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Buildroot] [PATCH] support: properly check for bash as a dependency
  2014-03-17 10:42 [Buildroot] [PATCH] support: properly check for bash as a dependency Yann E. MORIN
@ 2014-03-17 21:28 ` Peter Korsgaard
  2014-03-17 21:36   ` Yann E. MORIN
  2014-03-18  5:01 ` Thomas Petazzoni
  1 sibling, 1 reply; 8+ messages in thread
From: Peter Korsgaard @ 2014-03-17 21:28 UTC (permalink / raw)
  To: buildroot

>>>>> "Yann" == Yann E MORIN <yann.morin.1998@free.fr> writes:

 > From: "Yann E. MORIN" <yann.morin.1998@free.fr>
 > The way we are checking for bash is to look if "$SHELL --version"
 > will return a string containing "^GNU bash".

 > In case the system shell is dash (eg. /bin/sh -> /bin/dash), but
 > the user's login shell is bash, dash will not override the SHELL
 > variable:

 >     $ echo $SHELL
 >     /bin/bash
 >     $ /bin/dash
 >     $$ echo $SHELL
 >     /bin/bash

 > The same happens when called as the interpreter for a shell script:

 >     $ cat foo.sh
 >     #!/bin/dash
 >     echo $SHELL

 >     $ echo $SHELL
 >     /bin/bash
 >     $ ./foo.sh
 >     /bin/bash

 > So, calling "$SHELL --version" will still return "^GNU bash" no matter
 > what shell is actually running.

 > Since quite a lot of #!/bin/sh scripts are in fact bash scripts, we
 > really want to ensure that /bin/sh is bash.

Is that really still an issue? I just checked a few of the machines I
often do buildroot builds on and they all have /bin/sh == dash.


 > -# Check bash
 > -if ! $SHELL --version 2>&1 | grep -q '^GNU bash'; then
 > +# Check bash is the system shell
 > +if ! /bin/sh --version 2>&1 | grep -q '^GNU bash'; then

FYI, dash doesn't even understand a --version argument:

sh --version
sh: 0: Illegal option --

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Buildroot] [PATCH] support: properly check for bash as a dependency
  2014-03-17 21:28 ` Peter Korsgaard
@ 2014-03-17 21:36   ` Yann E. MORIN
  2014-03-17 22:01     ` Peter Korsgaard
  0 siblings, 1 reply; 8+ messages in thread
From: Yann E. MORIN @ 2014-03-17 21:36 UTC (permalink / raw)
  To: buildroot

Peter, All,

On 2014-03-17 22:28 +0100, Peter Korsgaard spake thusly:
> >>>>> "Yann" == Yann E MORIN <yann.morin.1998@free.fr> writes:
> 
>  > From: "Yann E. MORIN" <yann.morin.1998@free.fr>
>  > The way we are checking for bash is to look if "$SHELL --version"
>  > will return a string containing "^GNU bash".
> 
>  > In case the system shell is dash (eg. /bin/sh -> /bin/dash), but
>  > the user's login shell is bash, dash will not override the SHELL
>  > variable:
> 
>  >     $ echo $SHELL
>  >     /bin/bash
>  >     $ /bin/dash
>  >     $$ echo $SHELL
>  >     /bin/bash
> 
>  > The same happens when called as the interpreter for a shell script:
> 
>  >     $ cat foo.sh
>  >     #!/bin/dash
>  >     echo $SHELL
> 
>  >     $ echo $SHELL
>  >     /bin/bash
>  >     $ ./foo.sh
>  >     /bin/bash
> 
>  > So, calling "$SHELL --version" will still return "^GNU bash" no matter
>  > what shell is actually running.
> 
>  > Since quite a lot of #!/bin/sh scripts are in fact bash scripts, we
>  > really want to ensure that /bin/sh is bash.
> 
> Is that really still an issue? I just checked a few of the machines I
> often do buildroot builds on and they all have /bin/sh == dash.

Some configure-y scripts will run with /bin/sh, but have bashisms in them.

It was reported on IRC by Andrew that switching the system shell from
dash to bash fixed an issue (Andrew, was that with libxml2?).

>  > -# Check bash
>  > -if ! $SHELL --version 2>&1 | grep -q '^GNU bash'; then
>  > +# Check bash is the system shell
>  > +if ! /bin/sh --version 2>&1 | grep -q '^GNU bash'; then
> 
> FYI, dash doesn't even understand a --version argument:

Yes, but it surely does not return something matching "^GNU bash" which
is all we care about.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Buildroot] [PATCH] support: properly check for bash as a dependency
  2014-03-17 21:36   ` Yann E. MORIN
@ 2014-03-17 22:01     ` Peter Korsgaard
  0 siblings, 0 replies; 8+ messages in thread
From: Peter Korsgaard @ 2014-03-17 22:01 UTC (permalink / raw)
  To: buildroot

>>>>> "Yann" == Yann E MORIN <yann.morin.1998@free.fr> writes:

 > Peter, All,

 >> Is that really still an issue? I just checked a few of the machines I
 >> often do buildroot builds on and they all have /bin/sh == dash.

 > Some configure-y scripts will run with /bin/sh, but have bashisms in them.

 > It was reported on IRC by Andrew that switching the system shell from
 > dash to bash fixed an issue (Andrew, was that with libxml2?).

I don't think it is libxml2 as the stuff I'm currently doing at $WORK
uses libxml2 and I haven't seen any issues with /bin/sh = dash.


 >> > -# Check bash
 >> > -if ! $SHELL --version 2>&1 | grep -q '^GNU bash'; then
 >> > +# Check bash is the system shell
 >> > +if ! /bin/sh --version 2>&1 | grep -q '^GNU bash'; then
 >> 
 >> FYI, dash doesn't even understand a --version argument:

 > Yes, but it surely does not return something matching "^GNU bash" which
 > is all we care about.

True.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Buildroot] [PATCH] support: properly check for bash as a dependency
  2014-03-17 10:42 [Buildroot] [PATCH] support: properly check for bash as a dependency Yann E. MORIN
  2014-03-17 21:28 ` Peter Korsgaard
@ 2014-03-18  5:01 ` Thomas Petazzoni
  2014-03-18 16:55   ` Yann E. MORIN
  1 sibling, 1 reply; 8+ messages in thread
From: Thomas Petazzoni @ 2014-03-18  5:01 UTC (permalink / raw)
  To: buildroot

Dear Yann E. MORIN,

On Mon, 17 Mar 2014 11:42:34 +0100, Yann E. MORIN wrote:

> So, calling "$SHELL --version" will still return "^GNU bash" no matter
> what shell is actually running.
> 
> Since quite a lot of #!/bin/sh scripts are in fact bash scripts, we
> really want to ensure that /bin/sh is bash.

I'm definitely against that. My system has /bin/sh pointing to dash,
and Buildroot works fine. One of the thing that annoyed me in
OpenEmbedded was its requirements to have /bin/sh be bash.

We clearly don't want that.

I've just checked the Free Electrons autobuilders, and there are also
using dash as /bin/sh. This means that if configure scripts were using
bashims unsupported by dash, we would have noticed.

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Buildroot] [PATCH] support: properly check for bash as a dependency
  2014-03-18  5:01 ` Thomas Petazzoni
@ 2014-03-18 16:55   ` Yann E. MORIN
  2014-03-18 18:27     ` Thomas Petazzoni
  2014-03-20 20:43     ` Arnout Vandecappelle
  0 siblings, 2 replies; 8+ messages in thread
From: Yann E. MORIN @ 2014-03-18 16:55 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2014-03-18 06:01 +0100, Thomas Petazzoni spake thusly:
> On Mon, 17 Mar 2014 11:42:34 +0100, Yann E. MORIN wrote:
> 
> > So, calling "$SHELL --version" will still return "^GNU bash" no matter
> > what shell is actually running.
> > 
> > Since quite a lot of #!/bin/sh scripts are in fact bash scripts, we
> > really want to ensure that /bin/sh is bash.
> 
> I'm definitely against that. My system has /bin/sh pointing to dash,
> and Buildroot works fine. One of the thing that annoyed me in
> OpenEmbedded was its requirements to have /bin/sh be bash.
> 
> We clearly don't want that.

I'm just fine with that. :-)

But the current check is broken anyway, as all it checks is that the
login shell of the user is bash.

  - if we want to work whith dash as the system shell, then the current
    check is unneeded;

  - if we want to work with dash as the system shell, we don't care what
    login shell the user is using, as we must also work when this is dash;

  - SHELL is not mandated by POSIX, so it may be empty on a
    POSIX-compliant shell anyway.

So, we should just remove this check altogether.

> I've just checked the Free Electrons autobuilders, and there are also
> using dash as /bin/sh. This means that if configure scripts were using
> bashims unsupported by dash, we would have noticed.

Andrew, what package was the breakage due to?

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Buildroot] [PATCH] support: properly check for bash as a dependency
  2014-03-18 16:55   ` Yann E. MORIN
@ 2014-03-18 18:27     ` Thomas Petazzoni
  2014-03-20 20:43     ` Arnout Vandecappelle
  1 sibling, 0 replies; 8+ messages in thread
From: Thomas Petazzoni @ 2014-03-18 18:27 UTC (permalink / raw)
  To: buildroot

Dear Yann E. MORIN,

On Tue, 18 Mar 2014 17:55:18 +0100, Yann E. MORIN wrote:

> > I'm definitely against that. My system has /bin/sh pointing to dash,
> > and Buildroot works fine. One of the thing that annoyed me in
> > OpenEmbedded was its requirements to have /bin/sh be bash.
> > 
> > We clearly don't want that.
> 
> I'm just fine with that. :-)
> 
> But the current check is broken anyway, as all it checks is that the
> login shell of the user is bash.
> 
>   - if we want to work whith dash as the system shell, then the current
>     check is unneeded;
> 
>   - if we want to work with dash as the system shell, we don't care what
>     login shell the user is using, as we must also work when this is dash;
> 
>   - SHELL is not mandated by POSIX, so it may be empty on a
>     POSIX-compliant shell anyway.
> 
> So, we should just remove this check altogether.

Yes, I agree.

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Buildroot] [PATCH] support: properly check for bash as a dependency
  2014-03-18 16:55   ` Yann E. MORIN
  2014-03-18 18:27     ` Thomas Petazzoni
@ 2014-03-20 20:43     ` Arnout Vandecappelle
  1 sibling, 0 replies; 8+ messages in thread
From: Arnout Vandecappelle @ 2014-03-20 20:43 UTC (permalink / raw)
  To: buildroot

On 18/03/14 17:55, Yann E. MORIN wrote:
> Thomas, All,
> 
> On 2014-03-18 06:01 +0100, Thomas Petazzoni spake thusly:
>> On Mon, 17 Mar 2014 11:42:34 +0100, Yann E. MORIN wrote:
>>
>>> So, calling "$SHELL --version" will still return "^GNU bash" no matter
>>> what shell is actually running.

 Have you tested this? dependencies.sh is run from the Makefile, and that
says:

SHELL:=$(shell if [ -x "$$BASH" ]; then echo $$BASH; \
        else if [ -x /bin/bash ]; then echo /bin/bash; \
        else echo sh; fi; fi)
[snip]

export SHELL CONFIG_SHELL quiet Q KBUILD_VERBOSE VERBOSE

 So $SHELL _will_ be set to bash unless there is no bash.

>>>
>>> Since quite a lot of #!/bin/sh scripts are in fact bash scripts, we
>>> really want to ensure that /bin/sh is bash.
>>
>> I'm definitely against that. My system has /bin/sh pointing to dash,
>> and Buildroot works fine. One of the thing that annoyed me in
>> OpenEmbedded was its requirements to have /bin/sh be bash.
>>
>> We clearly don't want that.
> 
> I'm just fine with that. :-)
> 
> But the current check is broken anyway, as all it checks is that the
> login shell of the user is bash.
> 
>   - if we want to work whith dash as the system shell, then the current
>     check is unneeded;
> 
>   - if we want to work with dash as the system shell, we don't care what
>     login shell the user is using, as we must also work when this is dash;
> 
>   - SHELL is not mandated by POSIX, so it may be empty on a
>     POSIX-compliant shell anyway.
> 
> So, we should just remove this check altogether.

 Not remove, but rather replace it with a check for /bin/bash existence.
We do have quite a lot of stuff referring to /bin/bash. bash in PATH is
not good enough.


 Regards,
 Arnout

> 
>> I've just checked the Free Electrons autobuilders, and there are also
>> using dash as /bin/sh. This means that if configure scripts were using
>> bashims unsupported by dash, we would have noticed.
> 
> Andrew, what package was the breakage due to?
> 
> Regards,
> Yann E. MORIN.
> 


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2014-03-20 20:43 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-17 10:42 [Buildroot] [PATCH] support: properly check for bash as a dependency Yann E. MORIN
2014-03-17 21:28 ` Peter Korsgaard
2014-03-17 21:36   ` Yann E. MORIN
2014-03-17 22:01     ` Peter Korsgaard
2014-03-18  5:01 ` Thomas Petazzoni
2014-03-18 16:55   ` Yann E. MORIN
2014-03-18 18:27     ` Thomas Petazzoni
2014-03-20 20:43     ` Arnout Vandecappelle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox