On 11/03/2019 21:23, 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 <unai.martinezcor...@ehu.eus> > --- > scripts/qemu-binfmt-conf.sh | 39 +++++++++++++++++++++++++++++++++++-- > 1 file changed, 37 insertions(+), 2 deletions(-) > > diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh > index 2be9867727..382bdaabfe 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. > -e|--exportdir PATH DEBIANDIR define where to write configuration > files > SYSTEMDDIR > -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 > > To import templates with update-binfmts, use : > > @@ -344,8 +347,28 @@ 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() { > + names='qemu-*' > + if [ $# -ne 0 ] ; then > + qemu_check_target_list $1 > + unset names pre > + for t in $checked_target_list ; do > + names="${names}${pre}qemu-$t" > + pre=' -o -name ' > + done > + fi > + find /proc/sys/fs/binfmt_misc/ -type f -name "$names" -exec sh -c > 'printf %s -1 > {}' \;
You don't need to use "find". put the printf in the loop with the full path /proc/sys/fs/binfmt_mist/qemu-$t. For the ALL case, use the list of the known interpreters, or if you want to remove them all, use the "status" file that does that. Thanks, Laurent