qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v6 8/9] qemu-binfmt-conf.sh: add option --clear


From: Laurent Vivier
Subject: Re: [Qemu-devel] [PATCH v6 8/9] qemu-binfmt-conf.sh: add option --clear
Date: Tue, 12 Mar 2019 20:50:57 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0

On 12/03/2019 20:03, Unai Martinez-Corral wrote:
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 <address@hidden>
---
  scripts/qemu-binfmt-conf.sh | 33 +++++++++++++++++++++++++++++++--
  1 file changed, 31 insertions(+), 2 deletions(-)

diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index 51c4c67799..c672ec4886 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -197,7 +197,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)
@@ -206,6 +206,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.

please fix the indentation.

  -e|--exportdir PATH                   define where to write configuration 
files
                                        (default: $SYSTEMDDIR or $DEBIANDIR)
  -s|--systemd                          don't write into /proc, generate 
file(s) for
@@ -218,6 +220,7 @@ QEMU_PATH=$QEMU_PATH
  QEMU_SUFFIX=$QEMU_SUFFIX
  QEMU_PERSISTENT=$QEMU_PERSISTENT
  QEMU_CREDENTIAL=$QEMU_CREDENTIAL
+QEMU_CLEAR=$QEMU_CLEAR

please fix the indentation.


  To import templates with update-binfmts, use :

@@ -344,8 +347,19 @@ 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() {
+    printf %s -1 > "/proc/sys/fs/binfmt_misc/$1"
+}
+
  CHECK=qemu_check_bintfmt_misc
  BINFMT_SET=qemu_register_interpreter
+BINFMT_CLEAR=qemu_clear_interpreter

please fix the indentation.


  SYSTEMDDIR="/etc/binfmt.d"
  DEBIANDIR="/usr/share/binfmts"
@@ -355,20 +369,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)

please fix the indentation.

+        QEMU_CLEAR="yes"
+        ;;
      -d|--debian)
          CHECK=qemu_check_debian
          BINFMT_SET=qemu_generate_debian
+        BINFMT_CLEAR=qemu_clear_notimplemented

please fix the indentation.

          EXPORTDIR=${EXPORTDIR:-$DEBIANDIR}
          ;;
      -s|--systemd)
          CHECK=qemu_check_systemd
          BINFMT_SET=qemu_generate_systemd
+        BINFMT_CLEAR=qemu_clear_notimplemented

please fix the indentation.

          EXPORTDIR=${EXPORTDIR:-$SYSTEMDDIR}
          ;;
      -Q|--path)
@@ -403,4 +423,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.21.0


Except the indentation problems, it looks good.

Thanks,
Laurent



reply via email to

[Prev in Thread] Current Thread [Next in Thread]