* [PATCH v8 8/9] qemu-binfmt-conf.sh: add option --clear
@ 2020-03-07 17:42 Unai Martinez-Corral
0 siblings, 0 replies; 2+ messages in thread
From: Unai Martinez-Corral @ 2020-03-07 17:42 UTC (permalink / raw)
To: qemu-devel; +Cc: alex.bennee, riku.voipio, laurent
This is a partial implementation.
Allows to remove a single or a list of already registered binfmt
interpreters. Valid values are those in qemu_target_list.
If TARGETS is empty, all the existing 'qemu-*' interpreters are
removed.
This is partial because 'debian' and 'systemd' configurations are not
supported. The script will exit with error 'option clear not
implemented for this mode yet'.
Removal is done by printing '-1' as explained at:
https://www.kernel.org/doc/Documentation/admin-guide/binfmt-misc.rst
Signed-off-by: Unai Martinez-Corral <unai.martinezcorral@ehu.eus>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
scripts/qemu-binfmt-conf.sh | 36 ++++++++++++++++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index d5d3484b58..9685456747 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -201,7 +201,7 @@ Options and associated environment variables:
Argument Env-variable Description
TARGETS QEMU_TARGETS A single arch name or a list of them (see all names below);
- if empty, configure all known targets;
+ if empty, configure/clear all known targets;
if 'NONE', no interpreter is configured.
-h|--help display this usage
-Q|--path PATH QEMU_PATH set path to qemu interpreter(s)
@@ -210,6 +210,8 @@ TARGETS QEMU_TARGETS A single arch name or a list of them (see
uses are cloned from the open file.
-c|--credential QEMU_CREDENTIAL (yes) credential and security tokens are calculated according
to the binary to interpret
+-r|--clear QEMU_CLEAR (yes) remove registered interpreters for target TARGETS;
+ then exit.
-e|--exportdir PATH define where to write configuration files
(default: $SYSTEMDDIR or $DEBIANDIR)
-s|--systemd don't write into /proc, generate file(s) for
@@ -222,6 +224,7 @@ QEMU_PATH=$QEMU_PATH
QEMU_SUFFIX=$QEMU_SUFFIX
QEMU_PERSISTENT=$QEMU_PERSISTENT
QEMU_CREDENTIAL=$QEMU_CREDENTIAL
+QEMU_CLEAR=$QEMU_CLEAR
To import templates with update-binfmts, use :
@@ -348,8 +351,22 @@ qemu_set_binfmts() {
done
}
+qemu_clear_notimplemented() {
+ echo "ERROR: option clear not implemented for this mode yet" 1>&2
+ usage
+ exit 1
+}
+
+qemu_clear_interpreter() {
+ p="/proc/sys/fs/binfmt_misc/$1"
+ if [ -f "$p" ] ; then
+ printf %s -1 > "$p"
+ fi
+}
+
CHECK=qemu_check_bintfmt_misc
BINFMT_SET=qemu_register_interpreter
+BINFMT_CLEAR=qemu_clear_interpreter
SYSTEMDDIR="/etc/binfmt.d"
DEBIANDIR="/usr/share/binfmts"
@@ -359,20 +376,26 @@ QEMU_PATH="${QEMU_PATH:-/usr/local/bin}"
QEMU_SUFFIX="${QEMU_SUFFIX:-}"
QEMU_PERSISTENT="${QEMU_PERSISTENT:-no}"
QEMU_CREDENTIAL="${QEMU_CREDENTIAL:-no}"
+QEMU_CLEAR="${QEMU_CLEAR:-no}"
-options=$(getopt -o dsQ:S:e:hcp -l debian,systemd,path:,suffix:,exportdir:,help,credential,persistent -- "$@")
+options=$(getopt -o rdsQ:S:e:hcp -l clear,debian,systemd,path:,suffix:,exportdir:,help,credential,persistent -- "$@")
eval set -- "$options"
while true ; do
case "$1" in
+ -r|--clear)
+ QEMU_CLEAR="yes"
+ ;;
-d|--debian)
CHECK=qemu_check_debian
BINFMT_SET=qemu_generate_debian
+ BINFMT_CLEAR=qemu_clear_notimplemented
EXPORTDIR=${EXPORTDIR:-$DEBIANDIR}
;;
-s|--systemd)
CHECK=qemu_check_systemd
BINFMT_SET=qemu_generate_systemd
+ BINFMT_CLEAR=qemu_clear_notimplemented
EXPORTDIR=${EXPORTDIR:-$SYSTEMDDIR}
;;
-Q|--path)
@@ -407,4 +430,13 @@ done
shift
$CHECK
+
+if [ "x$QEMU_CLEAR" = "xyes" ] ; then
+ qemu_check_target_list "$@"
+ for t in $checked_target_list ; do
+ $BINFMT_CLEAR "qemu-$t"
+ done
+ exit
+fi
+
qemu_set_binfmts "$@"
--
2.25.1
^ permalink raw reply related [flat|nested] 2+ messages in thread* [PATCH v8 0/9] qemu-binfmt-conf.sh
@ 2020-03-07 17:04 unai.martinezcorral
2020-03-07 18:55 ` [PATCH v8 8/9] qemu-binfmt-conf.sh: add option --clear Unai Martinez-Corral
0 siblings, 1 reply; 2+ messages in thread
From: unai.martinezcorral @ 2020-03-07 17:04 UTC (permalink / raw)
To: qemu-devel; +Cc: riku.voipio, laurent
Hi,
This series reworks qemu-binfmt-conf.sh:
* Argument <CPU> from option '--systemd' is generalized to <TARGETS>, and it is
accepted for any mode (default, debian or systemd). It can be a single target
arch or a list of them.
* Option '-r|--clear' is added, which allows to remove an already registered
target interpreter or a list of them. The implementation is functional but
partial. Please, see the corresponding commit.
* Option '-t|--test' is added, which allows to execute the CHECK according
to the provided arguments, but no interpreter is configured.
* Support to set options through environment variables: QEMU_TARGETS, QEMU_PATH,
QEMU_SUFFIX, QEMU_PERSISTENT, QEMU_CREDENTIAL, QEMU_CLEAR and QEMU_TEST.
The following changes are not backward compatible:
* Option '--persistent' no longer requires/accepts an argument.
* Option '--credential' no longer requires/accepts an argument.
* Option '--systemd' no longer requires/accepts an argument.
* Option '--qemu-path' is renamed to '--path'.
* Option '--qemu-suffix' is renamed to '--suffix'.
The functionality of all of them is untouched. Changes are related to syntax only.
v8:
* Fix typos and address review comments
v7:
* Check that a interpreter exists before trying to remove it.
v6:
* Don't need to use "find".
* Put the ";;" at the same position.
* Set BINFMT_CLEAR to ':', to allow --test to work with --clear.
* Do not show DEBIANDIR and SYSTEMDDIR in the Env-variable column.
Based on:
* [PATCH v5 0/10] qemu-binfmt-conf.sh
* should have been [PATCH v5 0/9] qemu-binfmt-conf.sh
* [PATCH v4 0/10] qemu-binfmt-conf.sh
* [PATCH v3 0/10] qemu-binfmt-conf.sh
* [PATCH v2] qemu-binfmt-conf.sh: add CPUS, add --reset, make -p and -c boolean (no arg)
* [PATCH] qemu-binfmt-conf.sh: add CPUS, add --reset, make -p and -c boolean (no arg)
* scripts/qemu-binfmt-conf.sh: allow clearing of entries
Regards
Unai Martinez-Corral (9):
qemu-binfmt-conf.sh: enforce safe style consistency
qemu-binfmt-conf.sh: make opts -p and -c boolean
qemu-binfmt-conf.sh: add QEMU_CREDENTIAL and QEMU_PERSISTENT
qemu-binfmt-conf.sh: use the same presentation format as for qemu-*
qemu-binfmt-conf.sh: remove 'qemu' prefix from cli options
qemu-binfmt-conf.sh: honour QEMU_PATH and/or QEMU_SUFFIX
qemu-binfmt-conf.sh: generalize <CPU> to positional TARGETS
qemu-binfmt-conf.sh: add option --clear
qemu-binfmt-conf.sh: add --test
scripts/qemu-binfmt-conf.sh | 211
1 file changed, 133 insertions(+), 78 deletions(-)
^ permalink raw reply [flat|nested] 2+ messages in thread* [PATCH v8 8/9] qemu-binfmt-conf.sh: add option --clear
2020-03-07 17:04 [PATCH v8 0/9] qemu-binfmt-conf.sh unai.martinezcorral
@ 2020-03-07 18:55 ` Unai Martinez-Corral
0 siblings, 0 replies; 2+ messages in thread
From: Unai Martinez-Corral @ 2020-03-07 18:55 UTC (permalink / raw)
To: qemu-devel; +Cc: alex.bennee, riku.voipio, laurent
This is a partial implementation.
Allows to remove a single or a list of already registered binfmt
interpreters. Valid values are those in qemu_target_list.
If TARGETS is empty, all the existing 'qemu-*' interpreters are
removed.
This is partial because 'debian' and 'systemd' configurations are not
supported. The script will exit with error 'option clear not
implemented for this mode yet'.
Removal is done by printing '-1' as explained at:
https://www.kernel.org/doc/Documentation/admin-guide/binfmt-misc.rst
Signed-off-by: Unai Martinez-Corral <unai.martinezcorral@ehu.eus>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
scripts/qemu-binfmt-conf.sh | 36 ++++++++++++++++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index d5d3484b58..9685456747 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -201,7 +201,7 @@ Options and associated environment variables:
Argument Env-variable Description
TARGETS QEMU_TARGETS A single arch name or a list of them (see all names below);
- if empty, configure all known targets;
+ if empty, configure/clear all known targets;
if 'NONE', no interpreter is configured.
-h|--help display this usage
-Q|--path PATH QEMU_PATH set path to qemu interpreter(s)
@@ -210,6 +210,8 @@ TARGETS QEMU_TARGETS A single arch name or a list of them (see
uses are cloned from the open file.
-c|--credential QEMU_CREDENTIAL (yes) credential and security tokens are calculated according
to the binary to interpret
+-r|--clear QEMU_CLEAR (yes) remove registered interpreters for target TARGETS;
+ then exit.
-e|--exportdir PATH define where to write configuration files
(default: $SYSTEMDDIR or $DEBIANDIR)
-s|--systemd don't write into /proc, generate file(s) for
@@ -222,6 +224,7 @@ QEMU_PATH=$QEMU_PATH
QEMU_SUFFIX=$QEMU_SUFFIX
QEMU_PERSISTENT=$QEMU_PERSISTENT
QEMU_CREDENTIAL=$QEMU_CREDENTIAL
+QEMU_CLEAR=$QEMU_CLEAR
To import templates with update-binfmts, use :
@@ -348,8 +351,22 @@ qemu_set_binfmts() {
done
}
+qemu_clear_notimplemented() {
+ echo "ERROR: option clear not implemented for this mode yet" 1>&2
+ usage
+ exit 1
+}
+
+qemu_clear_interpreter() {
+ p="/proc/sys/fs/binfmt_misc/$1"
+ if [ -f "$p" ] ; then
+ printf %s -1 > "$p"
+ fi
+}
+
CHECK=qemu_check_bintfmt_misc
BINFMT_SET=qemu_register_interpreter
+BINFMT_CLEAR=qemu_clear_interpreter
SYSTEMDDIR="/etc/binfmt.d"
DEBIANDIR="/usr/share/binfmts"
@@ -359,20 +376,26 @@ QEMU_PATH="${QEMU_PATH:-/usr/local/bin}"
QEMU_SUFFIX="${QEMU_SUFFIX:-}"
QEMU_PERSISTENT="${QEMU_PERSISTENT:-no}"
QEMU_CREDENTIAL="${QEMU_CREDENTIAL:-no}"
+QEMU_CLEAR="${QEMU_CLEAR:-no}"
-options=$(getopt -o dsQ:S:e:hcp -l debian,systemd,path:,suffix:,exportdir:,help,credential,persistent -- "$@")
+options=$(getopt -o rdsQ:S:e:hcp -l clear,debian,systemd,path:,suffix:,exportdir:,help,credential,persistent -- "$@")
eval set -- "$options"
while true ; do
case "$1" in
+ -r|--clear)
+ QEMU_CLEAR="yes"
+ ;;
-d|--debian)
CHECK=qemu_check_debian
BINFMT_SET=qemu_generate_debian
+ BINFMT_CLEAR=qemu_clear_notimplemented
EXPORTDIR=${EXPORTDIR:-$DEBIANDIR}
;;
-s|--systemd)
CHECK=qemu_check_systemd
BINFMT_SET=qemu_generate_systemd
+ BINFMT_CLEAR=qemu_clear_notimplemented
EXPORTDIR=${EXPORTDIR:-$SYSTEMDDIR}
;;
-Q|--path)
@@ -407,4 +430,13 @@ done
shift
$CHECK
+
+if [ "x$QEMU_CLEAR" = "xyes" ] ; then
+ qemu_check_target_list "$@"
+ for t in $checked_target_list ; do
+ $BINFMT_CLEAR "qemu-$t"
+ done
+ exit
+fi
+
qemu_set_binfmts "$@"
--
2.25.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-03-07 19:00 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-07 17:42 [PATCH v8 8/9] qemu-binfmt-conf.sh: add option --clear Unai Martinez-Corral
-- strict thread matches above, loose matches on Subject: below --
2020-03-07 17:04 [PATCH v8 0/9] qemu-binfmt-conf.sh unai.martinezcorral
2020-03-07 18:55 ` [PATCH v8 8/9] qemu-binfmt-conf.sh: add option --clear Unai Martinez-Corral
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.