On 02/12/18 17:04, Horst G. Burkhardt wrote:
On Mon, 12 Feb 2018 16:51:07 -0600
"A. Wilcox" <awilfox(a)adelielinux.org> wrote:
> On 02/12/18 16:26, A. Wilcox wrote:
>> Correct on both accounts. My concern is more with root's default
>> login shell being /bin/sh. I do not know how well dash would be
>> tolerated as the interactive shell for administrating Adélie.
Honestly, that's a preference issue - it's trivial to change the
default login shell for root to something friendlier.
"let root have nice things" or "don't spend any more time than you
need
to in an interactive root shell". Or perhaps some mix of both. This
isn't a huge obstacle, it's just another thing that needs to go in the
documentation - "hey, POSIX sh is kind of limiting, you might want to
use bash for day to day system administration."
You make a good argument that users should not be spending time in an
interactive root shell anyway. Perhaps dash-binsh /would/ have a place;
but see below.
> awilcox on elaine /usr/src/packages/system/dash $ abuild
> /usr/bin/abuild: 1778: /usr/bin/abuild: Bad substitution
ooft. I've seen this happen with some configure scripts that falsely
advertise that they're 'sh' when they only ever really got tested with
bash.
> abuild does not work with dash as /bin/sh. This is pretty much going
> to be a non-starter on builders, and it's going to make development on
> computers with dash-binsh completely unusable.
>
> I'm not sure if dash-binsh should conflict with abuild so a user can't
> do that, or if I should just remove dash-binsh completely, or if
> abuild should depend on bash and use #!/bin/bash. This is kind of
> terrible, especially since abuild works fine with bash or busybox
> as /bin/sh. It even almost works completely with zsh as /bin/sh.
The solution is to make abuild depend on bash and use #!/bin/bash - if
it's using sh features that aren't quite POSIX it shouldn't be calling
sh.
If abuild doesn't honestly advertise its requirements and capabilities,
that's an issue with abuild, and it's a fixable one. We have a good
working relationship already with the Alpine folks, and you've
mentioned some of them also would like dash as /bin/sh - I'm sure
they'll be amenable to that being fixed.
Let me start off by saying abuild, as written upstream, is not falsely
advertising anything.
Upstream ships abuild with #!/bin/ash. They require BusyBox shell. I
managed to make it work on bash *and* get the patches upstreamed:
https://github.com/alpinelinux/abuild/commit/f1faef786
https://github.com/alpinelinux/abuild/commit/f39ef92cd
https://github.com/alpinelinux/abuild/commit/597a7f167
That said, I do not think Alpine's developers had any intention of
making a POSIX sh script when they wrote abuild.
The line that failed with "bad substitution" is:
if [ ! -f
"$REPODEST/$repo/${subpkgarch/noarch/$CARCH}/$subpkgname-$pkgver-r$pkgrel.apk"
]; then
This is a blatant bashism, but it's supported in BusyBox (and zsh), so
there is no harm in using it for them.
Additionally, since they require BusyBox, they specifically told me two
years ago that making it #!/bin/sh on Adélie was unsupported and that I
can keep the pieces when it breaks.
possible bashism in /usr/bin/abuild line 232 (type):
possible bashism in /usr/bin/abuild line 257 ($'...' should be "$(printf
'...')"):
possible bashism in /usr/bin/abuild line 265 (${foo:3[:1]}):
possible bashism in /usr/bin/abuild line 502 (${parm/?/pat[/str]}):
possible bashism in /usr/bin/abuild line 832 ($'...' should be "$(printf
'...')"):
possible bashism in /usr/bin/abuild line 834 ($'...' should be "$(printf
'...')"):
possible bashism in /usr/bin/abuild line 944 (${parm/?/pat[/str]}):
possible bashism in /usr/bin/abuild line 1323 (${foo:3[:1]}):
possible bashism in /usr/bin/abuild line 1440 (${parm/?/pat[/str]}):
possible bashism in /usr/bin/abuild line 1441 (${parm/?/pat[/str]}):
possible bashism in /usr/bin/abuild line 1684 (type):
possible bashism in /usr/bin/abuild line 1778 (${parm/?/pat[/str]}):
possible bashism in /usr/bin/abuild line 1793 (${parm/?/pat[/str]}):
possible bashism in /usr/bin/abuild line 1806 (${parm/?/pat[/str]}):
possible bashism in /usr/bin/abuild line 2029 (export foo=bar should be
foo=bar; export foo):
possible bashism in /usr/bin/abuild line 2111 (${parm/?/pat[/str]}):
I am almost positive that I could replace the ${var//} syntax with
subshells + sed and manage to bring this thing in to POSIX compliance,
or at least very close to it. However, I am equally almost positive
that such a change wouldn't be accepted upstream.
And even if I did, I don't trust that future patches and updates to
abuild wouldn't break it simply because Alpine's developers and
contributors might simply forget to test POSIX compliance. That would
unintentionally break it here over again.
Let me remind everyone that Alpine is *upstream*, not *downstream*.
They enforce the rules, and we play by them. We aren't the ones who
tell them to use POSIX, they're the ones that tell us to use a bash-like.
Best,
--arw
--
A. Wilcox (awilfox)
Project Lead, Adélie Linux
http://adelielinux.org