pbuilder B90-linitian hook: Bad substitution

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
lemak
Beiträge: 1213
Registriert: 09.11.2007 13:25:57
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

pbuilder B90-linitian hook: Bad substitution

Beitrag von lemak » 20.11.2010 22:16:06

Hallo,

pbuilder meldet mir:
I: user script /var/cache/pbuilder/build//19498/tmp/hooks/B90lintian starting
/tmp/hooks/B90lintian: 9: Bad substitution
Hier der code dieses Hook-Scripts.

Code: Alles auswählen

$ cat /usr/share/doc/pbuilder/examples/B90lintian 
#!/bin/sh

set -e

install_packages() {
    apt-get -y "${APTGETOPT[@]}" install "$@"
}

install_packages lintian

echo "+++ lintian output +++"

su -c "lintian -I --show-overrides /tmp/buildd/*.changes" - pbuilder
# use this version if you don't want lintian to fail the build
#su -c "lintian -I --show-overrides /tmp/buildd/*.changes; :" - pbuilder

echo "+++ end of lintian output +++"
Mit der BASH läuft es durch. Kann das an die DASH angepasst werden und sollte das als Bug gemeldet werden?

thx i

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: pbuilder B90-linitian hook: Bad substitution

Beitrag von rendegast » 21.11.2010 13:09:54

${APTGETOPT[@]}, ein Array,
ein bash-Konstrukt, in Verbindung mit '#!/bin/sh' (POSIX) ein Fehler.

Der Entwickler sollte auf seinem Rechner /bin/sh mit dash verbinden,
und hier '#!/bin/bash' verwenden (<-> andere Hook-Skripte, dort wird wohl irgendwo APTGETOPT gesetzt).

/usr/share/doc/pbuilder/examples/, meistens '#!bin/bash',
darunter die mit solchen Array-Formen "${bla[@]}".
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

lemak
Beiträge: 1213
Registriert: 09.11.2007 13:25:57
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: pbuilder B90-linitian hook: Bad substitution

Beitrag von lemak » 21.11.2010 13:35:12

rendegast hat geschrieben:${APTGETOPT[@]}, ein Array,
ein bash-Konstrukt, in Verbindung mit '#!/bin/sh' (POSIX) ein Fehler.
Gut, also es gibt im POSIX keine Arrays?
rendegast hat geschrieben:Der Entwickler sollte auf seinem Rechner /bin/sh mit dash verbinden,
hier eventuell '#!/bin/bash' verwenden
Ist es:

Code: Alles auswählen

# pbuilder --login
...
root@E611:/# ls -la /bin/sh
lrwxrwxrwx 1 root root 4 Nov 21 12:17 /bin/sh -> dash
...
Mit #!/bin/dash direkt im hook, bekomme ich den Fehler auch. Also da geht nur die BASH.
rendegast hat geschrieben:(<-> andere Hook-Skripte, dort wird wohl irgendwo APTGETOPT gesetzt).
Nein, das packt pbuilder selbst ins Environment. Aber warum gerade als Array? APTGETOPT="--force-yes --next-opt" würde es ja imo genause tun...
man pbuilderrc hat geschrieben: APTGETOPT=('--force-yes')
Extra flags to give to apt-get. Default is --force-yes, which will skip key verification of packages to be installed. Unset if you want to enable key verification.
Zuletzt geändert von lemak am 21.11.2010 13:40:52, insgesamt 1-mal geändert.

lemak
Beiträge: 1213
Registriert: 09.11.2007 13:25:57
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: pbuilder B90-linitian hook: Bad substitution

Beitrag von lemak » 21.11.2010 13:37:29

rendegast hat geschrieben: /usr/share/doc/pbuilder/examples/, meistens '#!bin/bash',
darunter die mit solchen Array-Formen "${bla[@]}".
Stimmt, nur dieses nicht...

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: pbuilder B90-linitian hook: Bad substitution

Beitrag von rendegast » 21.11.2010 14:14:26

rendegast hat geschrieben: /usr/share/doc/pbuilder/examples/, meistens '#!bin/bash',
darunter die mit solchen Array-Formen "${bla[@]}".
Stimmt, nur dieses nicht...
Stimmt, sorry, es müßte heißen "darunter fast alle mit solchen Array-Formen "${bla[@]}"."

Ist also ein zu korrigierender Bug,
http://bugs.debian.org/pbuilder: "B90lintian needs bashism"
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

lemak
Beiträge: 1213
Registriert: 09.11.2007 13:25:57
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: pbuilder B90-linitian hook: Bad substitution

Beitrag von lemak » 21.11.2010 14:25:01

rendegast hat geschrieben: Ist also ein zu korrigierender Bug,
http://bugs.debian.org/pbuilder: "B90lintian needs bashism"
Hast du den schon erstellt? Ich würde sonst fordern, das man den Default ändert, weg vom Array. ;-) In der pbuilderrc kann ja der alte default definieren werden, um zu alten hooks kompatibel zu bleiben.

i

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: pbuilder B90-linitian hook: Bad substitution

Beitrag von rendegast » 21.11.2010 18:19:40

Vorhin beruhte meine Verwechsung darauf, daß es hier um testing geht,
in stable lenny sieht das Skript anders aus und enthält keine bash-Spezifika:

Code: Alles auswählen

#!/bin/bash
# example file to be used with --hookdir
#
# run lintian on generated deb files
apt-get install -y --force-yes lintian
lintian /tmp/buildd/*.deb
Hast du den schon erstellt? Ich würde sonst fordern, das man den Default ändert, weg vom Array.
Das ist müßig,
Arrays sind schick, hier fehlt nur der bashism, analog der korrekten Skripte,
ein ärgerlicher Flüchtigkeitsfehler.
Hoffentlich würde das trotz des squeeze-freeze noch gefixt?
Zusätzlich braucht das pbuilder-Paket dann noch ein depend auf eine Array-fähige Shell.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten