@@ -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 "$@"