Message ID | 20200309192021.GD65@669c1c222ef4 (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | qemu-binfmt-conf.sh | expand |
Le 09/03/2020 à 20:20, Unai Martinez-Corral a écrit : > Allow to set options '--persistent' and/or '--credential' through > environment variables. If not defined, defaults are used ('no'). > Anyway, command-line arguments have priority over environment variables. If variable are set to 'yes', how do you force the value to no with the command line? Please, refresh my memory, why do we need these variables? Do you have an use case? Thanks, Laurent > Signed-off-by: Unai Martinez-Corral <unai.martinezcorral@ehu.eus> > Reviewed-by: Laurent Vivier <laurent@vivier.eu> > --- > scripts/qemu-binfmt-conf.sh | 18 +++++++++++------- > 1 file changed, 11 insertions(+), 7 deletions(-) > > diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh > index 285ce528d1..0c28db5ca4 100755 > --- a/scripts/qemu-binfmt-conf.sh > +++ b/scripts/qemu-binfmt-conf.sh > @@ -190,9 +190,11 @@ Usage: qemu-binfmt-conf.sh [--qemu-path PATH][--debian][--systemd CPU] > (default: $SYSTEMDDIR or $DEBIANDIR) > --credential: if present, credential and security tokens are > calculated according to the binary to interpret > + (QEMU_CREDENTIAL=yes) > --persistent: if present, the interpreter is loaded when binfmt is > configured and remains in memory. All future uses > are cloned from the open file. > + (QEMU_PERSISTENT=yes) > > To import templates with update-binfmts, use : > > @@ -259,10 +261,10 @@ qemu_check_systemd() { > > qemu_generate_register() { > flags="" > - if [ "x$CREDENTIAL" = "xyes" ]; then > + if [ "x$QEMU_CREDENTIAL" = "xyes" ]; then > flags="OC" > fi > - if [ "x$PERSISTENT" = "xyes" ]; then > + if [ "x$QEMU_PERSISTENT" = "xyes" ]; then > flags="${flags}F" > fi > > @@ -285,7 +287,7 @@ package qemu-$cpu > interpreter $qemu > magic $magic > mask $mask > -credential $CREDENTIAL > +credential $QEMU_CREDENTIAL > EOF > } > > @@ -324,8 +326,10 @@ SYSTEMDDIR="/etc/binfmt.d" > DEBIANDIR="/usr/share/binfmts" > > QEMU_PATH=/usr/local/bin > -CREDENTIAL=no > -PERSISTENT=no > + > +QEMU_PERSISTENT="${QEMU_PERSISTENT:-no}" > +QEMU_CREDENTIAL="${QEMU_CREDENTIAL:-no}" > + > QEMU_SUFFIX="" > > options=$(getopt -o ds:Q:S:e:hcp -l debian,systemd:,qemu-path:,qemu-suffix:,exportdir:,help,credential,persistent -- "$@") > @@ -377,10 +381,10 @@ while true; do > exit 1 > ;; > -c|--credential) > - CREDENTIAL="yes" > + QEMU_CREDENTIAL="yes" > ;; > -p|--persistent) > - PERSISTENT="yes" > + QEMU_PERSISTENT="yes" > ;; > *) > break >
2020/03/10 9:20, Laurent Vivier: > If variable are set to 'yes', how do you force the value to no with the > command line? > I believe you cannot. Do you mean the explanation should be reworded? Or that the feature should be implemented? > Please, refresh my memory, why do we need these variables? > Do you have an use case? > See https://patchew.org/QEMU/20190306031221.GA53@03612eec87fc/20190306044620.GC75@03612eec87fc/ I copy the relevant explanation below: The main use case is to provide defaults when this script is included > in a docker container. There are three actors involved: > > - Developers of QEMU providing some defaults in the script. > - Developer of a docker image including the script from upstream but > changing some defaults by setting envvars inside the container. > - User of the container that might want to override the settings > either by setting the envvars or through the command line. > > If the entrypoint to the docker image is any script that executes > qemu-binfmt-conf.sh at some point, the user cannot provide options > through the command line. Envvars allow to do so, without requiring > the user to customize the docker image.
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh index 285ce528d1..0c28db5ca4 100755 --- a/scripts/qemu-binfmt-conf.sh +++ b/scripts/qemu-binfmt-conf.sh @@ -190,9 +190,11 @@ Usage: qemu-binfmt-conf.sh [--qemu-path PATH][--debian][--systemd CPU] (default: $SYSTEMDDIR or $DEBIANDIR) --credential: if present, credential and security tokens are calculated according to the binary to interpret + (QEMU_CREDENTIAL=yes) --persistent: if present, the interpreter is loaded when binfmt is configured and remains in memory. All future uses are cloned from the open file. + (QEMU_PERSISTENT=yes) To import templates with update-binfmts, use : @@ -259,10 +261,10 @@ qemu_check_systemd() { qemu_generate_register() { flags="" - if [ "x$CREDENTIAL" = "xyes" ]; then + if [ "x$QEMU_CREDENTIAL" = "xyes" ]; then flags="OC" fi - if [ "x$PERSISTENT" = "xyes" ]; then + if [ "x$QEMU_PERSISTENT" = "xyes" ]; then flags="${flags}F" fi @@ -285,7 +287,7 @@ package qemu-$cpu interpreter $qemu magic $magic mask $mask -credential $CREDENTIAL +credential $QEMU_CREDENTIAL EOF } @@ -324,8 +326,10 @@ SYSTEMDDIR="/etc/binfmt.d" DEBIANDIR="/usr/share/binfmts" QEMU_PATH=/usr/local/bin -CREDENTIAL=no -PERSISTENT=no + +QEMU_PERSISTENT="${QEMU_PERSISTENT:-no}" +QEMU_CREDENTIAL="${QEMU_CREDENTIAL:-no}" + QEMU_SUFFIX="" options=$(getopt -o ds:Q:S:e:hcp -l debian,systemd:,qemu-path:,qemu-suffix:,exportdir:,help,credential,persistent -- "$@") @@ -377,10 +381,10 @@ while true; do exit 1 ;; -c|--credential) - CREDENTIAL="yes" + QEMU_CREDENTIAL="yes" ;; -p|--persistent) - PERSISTENT="yes" + QEMU_PERSISTENT="yes" ;; *) break