From: Laurent Vivier <laurent@vivier.eu>
To: Unai Martinez-Corral <unai.martinezcorral@ehu.eus>,
qemu-devel@nongnu.org
Cc: riku.voipio@iki.fi, eblake@redhat.com
Subject: Re: [Qemu-devel] [PATCH v4 7/10] qemu-binfmt-conf.sh: generalize CPU to positional TARGETS
Date: Mon, 11 Mar 2019 12:14:16 +0100 [thread overview]
Message-ID: <1ab60a5e-bb20-5b13-6ddf-ebb8e28b3a08@vivier.eu> (raw)
In-Reply-To: <20190311103029.GF16@765644dd90e5>
On 11/03/2019 11:30, Unai Martinez-Corral wrote:
> This breaks brackward compatibility.
>
> Option '--systemd CPU' allows to register binfmt interpreters for a
> single target architecture or for 'ALL' (of them). This patch
> generalizes the approach to support it in any mode (default, '--debian'
> or '--systemd'). To do so, option 'systemd' is changed to be boolean
> (no args). Then, all the positional arguments are considered to be a
> list of target architectures.
>
> If no positional arguments are provided, all of the architectures in
> qemu_target_list are registered. Conversely, argument value 'NONE'
> allows to make a 'dry run' of the script. I.e., checks are executed
> according to the mode, but no interpreter is registered.
>
> Support QEMU_TARGETS environment variable, consistently with 'path',
> 'suffix', 'persistent' and 'credential', The supported formats are
> the same as for positional arguments, which have priority. If both
> the variable and the list of positional arguments are empty, defaults
> to qemu_target_list.
>
> Signed-off-by: Unai Martinez-Corral <unai.martinezcorral@ehu.eus>
> ---
> scripts/qemu-binfmt-conf.sh | 80 +++++++++++++++++++++----------------
> 1 file changed, 45 insertions(+), 35 deletions(-)
>
> diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
> index 13e619794c..fde78517ff 100755
> --- a/scripts/qemu-binfmt-conf.sh
> +++ b/scripts/qemu-binfmt-conf.sh
> @@ -6,6 +6,27 @@ mips mipsel mipsn32 mipsn32el mips64 mips64el \
> sh4 sh4eb s390x aarch64 aarch64_be hppa riscv32 riscv64 xtensa xtensaeb \
> microblaze microblazeel or1k x86_64"
>
> +# check if given TARGETS is/are in the supported target list
> +qemu_check_target_list() {
> + if [ $# -eq 0 ] ; then
> + checked_target_list="$qemu_target_list"
> + return
> + fi
> + for target ; do
> + for cpu in $qemu_target_list ; do
> + if [ "x$cpu" = "x$target" ] ; then
> + checked_target_list="$checked_target_list $target"
> + break
> + fi
> + done
> + if [ "$unknown_target" = "true" ] ; then
if [ "x$cpu" != "x$target" ] ; then
> + echo "ERROR: unknown CPU \"$target\"" 1>&2
> + usage
> + exit 1
> + fi
> + done
> +}
> +
> i386_magic='\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00'
> i386_mask='\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff'
> i386_family=i386
> @@ -167,21 +188,25 @@ qemu_get_family() {
>
> usage() {
> cat <<EOF
> +Usage: qemu-binfmt-conf.sh [options] [TARGETS]
>
> -Usage: qemu-binfmt-conf.sh [options]
> -
> -Configure binfmt_misc to use qemu interpreter
> +Configure binfmt_misc to use qemu interpreter for the given TARGETS.
>
> 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 'NONE', no interpreter is configured.
> -h|--help display this usage
> -Q|--path PATH: QEMU_PATH set path to qemu interpreter(s)
> -F|--suffix SUFFIX: QEMU_SUFFIX add a suffix to the default interpreter name
> -d|--debian: don't write into /proc, generate update-binfmts templates
> --s|--systemd CPU: don't write into /proc, generate file for
> - systemd-binfmt.service for the given CPU; if CPU is "ALL",
> - generate a file for all known cpus.
> +-s|--systemd: don't write into /proc, generate file(s) for
> + systemd-binfmt.service; environment variable HOST_ARCH
why HOST_ARCH appears here?
> + allows to override 'uname' to generate configuration files
> + for a different architecture than the current one.
> +
> -e|--exportdir PATH: DEBIANDIR define where to write configuration files
> SYSTEMDDIR
> -c|--credential: QEMU_CREDENTIAL (yes) credential and security tokens are calculated according
> @@ -197,14 +222,7 @@ To remove interpreter, use :
>
> sudo update-binfmts --package qemu-CPU --remove qemu-CPU $QEMU_PATH
>
> -With systemd, binfmt files are loaded by systemd-binfmt.service
> -
> -The environment variable HOST_ARCH allows to override 'uname' to generate configuration files for a
> -different architecture than the current one.
> -
> -where CPU is one of:
> -
> - $qemu_target_list
> +QEMU target list: $qemu_target_list
>
> EOF
> }
> @@ -288,9 +306,15 @@ qemu_set_binfmts() {
> # probe cpu type
> host_family=$(qemu_get_family)
>
> - # register the interpreter for each cpu except for the native one
> + # reduce the list of target interpreters to those given in the CLI
> + [ $# -eq 0 ] && targets="${QEMU_TARGETS:-}" || targets="$@"
> + if [ "x$targets" = "xNONE" ] ; then
> + return
> + fi
> + qemu_check_target_list $targets
>
> - for cpu in ${qemu_target_list} ; do
> + # register the interpreter for each target except for the native one
> + for cpu in $checked_target_list ; do
> magic=$(eval echo \$${cpu}_magic)
> mask=$(eval echo \$${cpu}_mask)
> family=$(eval echo \$${cpu}_family)
> @@ -318,12 +342,13 @@ BINFMT_SET=qemu_register_interpreter
> SYSTEMDDIR="/etc/binfmt.d"
> DEBIANDIR="/usr/share/binfmts"
>
> +QEMU_TARGETS="${QEMU_TARGETS:-}"
> QEMU_PATH="${QEMU_PATH:-/usr/local/bin}"
> QEMU_SUFFIX="${QEMU_SUFFIX:-}"
> QEMU_CREDENTIAL="${QEMU_CREDENTIAL:-no}"
> QEMU_PERSISTENT="${QEMU_PERSISTENT:-no}"
>
> -options=$(getopt -o ds:Q:S:e:hcp -l debian,systemd:,path:,suffix:,exportdir:,help,credential,persistent -- "$@")
> +options=$(getopt -o dsQ:S:e:hcp -l debian,systemd,path:,suffix:,exportdir:,help,credential,persistent -- "$@")
> eval set -- "$options"
>
> while true ; do
> @@ -337,23 +362,6 @@ while true ; do
> CHECK=qemu_check_systemd
> BINFMT_SET=qemu_generate_systemd
> EXPORTDIR=${EXPORTDIR:-$SYSTEMDDIR}
> - shift
> - # check given cpu is in the supported CPU list
> - if [ "$1" != "ALL" ] ; then
> - for cpu in ${qemu_target_list} ; do
> - if [ "$cpu" = "$1" ] ; then
> - break
> - fi
> - done
> -
> - if [ "$cpu" = "$1" ] ; then
> - qemu_target_list="$1"
> - else
> - echo "ERROR: unknown CPU \"$1\"" 1>&2
> - usage
> - exit 1
> - fi
> - fi
> ;;
> -Q|--path)
> shift
> @@ -384,5 +392,7 @@ while true ; do
> shift
> done
>
> +shift
> +
> $CHECK
> -qemu_set_binfmts
> +qemu_set_binfmts "$@"
> --
> 2.21.0
>
next prev parent reply other threads:[~2019-03-11 11:26 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-11 10:14 [Qemu-devel] [PATCH v4 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
2019-03-11 10:22 ` [Qemu-devel] [PATCH v4 1/10] qemu-binfmt-conf.sh: enforce safe style consistency Unai Martinez-Corral
2019-03-11 10:25 ` [Qemu-devel] [PATCH v4 2/10] qemu-binfmt-conf.sh: make opts -p and -c boolean Unai Martinez-Corral
2019-03-11 10:26 ` [Qemu-devel] [PATCH v4 3/10] qemu-binfmt-conf.sh: add QEMU_CREDENTIAL and QEMU_PERSISTENT Unai Martinez-Corral
2019-03-11 10:40 ` Laurent Vivier
2019-03-11 10:27 ` [Qemu-devel] [PATCH v4 4/10] qemu-binfmt-conf.sh: use the same presentation format as for qemu-* Unai Martinez-Corral
2019-03-11 11:22 ` Laurent Vivier
2019-03-11 10:28 ` [Qemu-devel] [PATCH v4 5/10] qemu-binfmt-conf.sh: remove 'qemu' prefix from cli options Unai Martinez-Corral
2019-03-11 10:29 ` [Qemu-devel] [PATCH v4 6/10] qemu-binfmt-conf.sh: honour QEMU_PATH and/or QEMU_SUFFIX Unai Martinez-Corral
2019-03-11 11:23 ` Laurent Vivier
2019-03-11 10:30 ` [Qemu-devel] [PATCH v4 7/10] qemu-binfmt-conf.sh: generalize CPU to positional TARGETS Unai Martinez-Corral
2019-03-11 11:14 ` Laurent Vivier [this message]
2019-03-11 13:29 ` Unai Martinez Corral
2019-03-11 13:36 ` Laurent Vivier
2019-03-11 19:23 ` Unai Martinez Corral
2019-03-11 19:26 ` Laurent Vivier
2019-03-11 10:31 ` [Qemu-devel] [PATCH v4 8/10] qemu-binfmt-conf.sh: add option --clear Unai Martinez-Corral
2019-03-11 11:04 ` Laurent Vivier
2019-03-11 13:19 ` Unai Martinez Corral
2019-03-11 13:30 ` Laurent Vivier
2019-03-11 10:31 ` [Qemu-devel] [PATCH v4 9/10] qemu-binfmt-conf.sh: update usage() Unai Martinez-Corral
2019-03-11 10:32 ` [Qemu-devel] [PATCH v4 10/10] qemu-binfmt-conf.sh: add --test|--dry-run Unai Martinez-Corral
2019-03-11 10:45 ` Laurent Vivier
2019-03-11 13:04 ` Unai Martinez Corral
2019-03-11 11:00 ` [Qemu-devel] [PATCH v4 0/10] qemu-binfmt-conf.sh no-reply
2019-03-11 11:30 ` no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1ab60a5e-bb20-5b13-6ddf-ebb8e28b3a08@vivier.eu \
--to=laurent@vivier.eu \
--cc=eblake@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=riku.voipio@iki.fi \
--cc=unai.martinezcorral@ehu.eus \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).