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

Reply via email to