* [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh
@ 2019-03-11 20:15 Unai Martinez-Corral
2019-03-11 20:17 ` [Qemu-devel] [PATCH v5 1/9] qemu-binfmt-conf.sh: enforce safe style consistency Unai Martinez-Corral
` (9 more replies)
0 siblings, 10 replies; 11+ messages in thread
From: Unai Martinez-Corral @ 2019-03-11 20:15 UTC (permalink / raw)
To: qemu-devel; +Cc: laurent, riku.voipio, eblake
Hi,
This series reworks qemu-binfmt-conf.sh:
* Argument <CPU> from option '--systemd' is generalized to <TARGETS>, and it is
accepted for any mode (default, debian or systemd). It can be a single target
arch or a list of them.
* Option '--clear' is added, which allows to remove an already registered
target interpreter or a list of them. The implementation is functional but
partial. Please, see the corresponding commit.
* Option '--test' is added, which allows to execute the CHECK according
to the provided arguments, but no interpreter is configured.
* Support to set options through environment variables: QEMU_TARGETS,
QEMU_PATH, QEMU_SUFFIX, QEMU_PERSISTENT, QEMU_CREDENTIAL, QEMU_CLEAR and
QEMU_TEST.
The following changes are not backward compatible:
* Option '--persistent' no longer requires/accepts an argument.
* Option '--credential' no longer requires/accepts an argument.
* Option '--systemd' no longer requires/accepts an argument.
* Option '--qemu-path' is renamed to '--path'.
* Option '--qemu-suffix' is renamed to '--suffix'.
The functionality of all of them is untouched. Changes are related to syntax only.
The main differences compared to v4 are:
* Remove all the ':' in the first column of usage().
* Define BINFMT_CLEAR in the options case switch.
* Move comment about HOST_ARCH to the original location.
* Fix short option for 'clear'. Was 'c', which conflicted with 'credential'. It is now 'r'.
* Patches v4 4/10 and v4 9/10 are merged into v5 4/10.
* Patch v4 10/10 is now v5 9/10.
Based on:
* [PATCH v4 0/10] qemu-binfmt-conf.sh
* [PATCH v3 0/10] qemu-binfmt-conf.sh
* [PATCH v2] qemu-binfmt-conf.sh: add CPUS, add --reset, make -p and -c boolean (no arg)
* [PATCH] qemu-binfmt-conf.sh: add CPUS, add --reset, make -p and -c boolean (no arg)
Regards
Unai Martinez-Corral (9):
qemu-binfmt-conf.sh: enforce safe style consistency
qemu-binfmt-conf.sh: make opts -p and -c boolean
qemu-binfmt-conf.sh: add QEMU_CREDENTIAL and QEMU_PERSISTENT
qemu-binfmt-conf.sh: use the same presentation format as for qemu-*
qemu-binfmt-conf.sh: remove 'qemu' prefix from cli options
qemu-binfmt-conf.sh: honour QEMU_PATH and/or QEMU_SUFFIX
qemu-binfmt-conf.sh: generalize <CPU> to positional [TARGETS]
qemu-binfmt-conf.sh: add option --clear
qemu-binfmt-conf.sh: add --test
scripts/qemu-binfmt-conf.sh | 213
1 file changed, 78 insertions(+), 135 deletions(-)
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v5 1/9] qemu-binfmt-conf.sh: enforce safe style consistency
2019-03-11 20:15 [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
@ 2019-03-11 20:17 ` Unai Martinez-Corral
2019-03-11 20:18 ` [Qemu-devel] [PATCH v5 2/9] qemu-binfmt-conf.sh: make opts -p and -c boolean Unai Martinez-Corral
` (8 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Unai Martinez-Corral @ 2019-03-11 20:17 UTC (permalink / raw)
To: qemu-devel; +Cc: laurent, riku.voipio, eblake
Spaces are added before '; then', for consistency.
All the tests are prefixed with 'x', in order to avoid risky comparisons
(i.e. a user deliberately trying to provoke a syntax error).
Signed-off-by: Unai Martinez-Corral <unai.martinezcorral@ehu.eus>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
scripts/qemu-binfmt-conf.sh | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index b5a16742a1..0009385be2 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -219,12 +219,12 @@ qemu_check_access() {
qemu_check_bintfmt_misc() {
# load the binfmt_misc module
- if [ ! -d /proc/sys/fs/binfmt_misc ]; then
+ if [ ! -d /proc/sys/fs/binfmt_misc ] ; then
if ! /sbin/modprobe binfmt_misc ; then
exit 1
fi
fi
- if [ ! -f /proc/sys/fs/binfmt_misc/register ]; then
+ if [ ! -f /proc/sys/fs/binfmt_misc/register ] ; then
if ! mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc ; then
exit 1
fi
@@ -255,10 +255,10 @@ qemu_check_systemd() {
qemu_generate_register() {
flags=""
- if [ "$CREDENTIAL" = "yes" ] ; then
+ if [ "x$CREDENTIAL" = "xyes" ] ; then
flags="OC"
fi
- if [ "$PERSISTENT" = "yes" ] ; then
+ if [ "x$PERSISTENT" = "xyes" ] ; then
flags="${flags}F"
fi
@@ -296,18 +296,18 @@ qemu_set_binfmts() {
mask=$(eval echo \$${cpu}_mask)
family=$(eval echo \$${cpu}_family)
- if [ "$magic" = "" ] || [ "$mask" = "" ] || [ "$family" = "" ] ; then
+ if [ "x$magic" = "x" ] || [ "x$mask" = "x" ] || [ "x$family" = "x" ] ; then
echo "INTERNAL ERROR: unknown cpu $cpu" 1>&2
continue
fi
qemu="$QEMU_PATH/qemu-$cpu"
- if [ "$cpu" = "i486" ] ; then
+ if [ "x$cpu" = "xi486" ] ; then
qemu="$QEMU_PATH/qemu-i386"
fi
qemu="$qemu$QEMU_SUFFIX"
- if [ "$host_family" != "$family" ] ; then
+ if [ "x$host_family" != "x$family" ] ; then
$BINFMT_SET
fi
done
--
2.21.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v5 2/9] qemu-binfmt-conf.sh: make opts -p and -c boolean
2019-03-11 20:15 [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
2019-03-11 20:17 ` [Qemu-devel] [PATCH v5 1/9] qemu-binfmt-conf.sh: enforce safe style consistency Unai Martinez-Corral
@ 2019-03-11 20:18 ` Unai Martinez-Corral
2019-03-11 20:19 ` [Qemu-devel] [PATCH v5 3/9] qemu-binfmt-conf.sh: add QEMU_CREDENTIAL and QEMU_PERSISTENT Unai Martinez-Corral
` (7 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Unai Martinez-Corral @ 2019-03-11 20:18 UTC (permalink / raw)
To: qemu-devel; +Cc: laurent, riku.voipio, eblake
This patch breaks backward compatibility.
Both '--persistent' and '--credential' default to 'no'. Hence, '-p no'
or '-c no' are reduntant. Overall, accepting an argument might be
misleading because options are, indeed, boolean. This patch makes both
options boolean in getopt, so if any of them is provided the corresponding
variable is set to true.
Signed-off-by: Unai Martinez-Corral <unai.martinezcorral@ehu.eus>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
scripts/qemu-binfmt-conf.sh | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index 0009385be2..ca15ff8092 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -168,8 +168,8 @@ qemu_get_family() {
usage() {
cat <<EOF
Usage: qemu-binfmt-conf.sh [--qemu-path PATH][--debian][--systemd CPU]
- [--help][--credential yes|no][--exportdir PATH]
- [--persistent yes|no][--qemu-suffix SUFFIX]
+ [--help][--credential][--exportdir PATH]
+ [--persistent][--qemu-suffix SUFFIX]
Configure binfmt_misc to use qemu interpreter
@@ -184,9 +184,9 @@ Usage: qemu-binfmt-conf.sh [--qemu-path PATH][--debian][--systemd CPU]
file for all known cpus
--exportdir: define where to write configuration files
(default: $SYSTEMDDIR or $DEBIANDIR)
- --credential: if yes, credential and security tokens are
+ --credential: if present, credential and security tokens are
calculated according to the binary to interpret
- --persistent: if yes, the interpreter is loaded when binfmt is
+ --persistent: if present, the interpreter is loaded when binfmt is
configured and remains in memory. All future uses
are cloned from the open file.
@@ -324,7 +324,7 @@ CREDENTIAL=no
PERSISTENT=no
QEMU_SUFFIX=""
-options=$(getopt -o ds:Q:S:e:hc:p: -l debian,systemd:,qemu-path:,qemu-suffix:,exportdir:,help,credential:,persistent: -- "$@")
+options=$(getopt -o ds:Q:S:e:hcp -l debian,systemd:,qemu-path:,qemu-suffix:,exportdir:,help,credential,persistent -- "$@")
eval set -- "$options"
while true ; do
@@ -373,12 +373,10 @@ while true ; do
exit 1
;;
-c|--credential)
- shift
- CREDENTIAL="$1"
+ CREDENTIAL="yes"
;;
-p|--persistent)
- shift
- PERSISTENT="$1"
+ PERSISTENT="yes"
;;
*)
break
--
2.21.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v5 3/9] qemu-binfmt-conf.sh: add QEMU_CREDENTIAL and QEMU_PERSISTENT
2019-03-11 20:15 [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
2019-03-11 20:17 ` [Qemu-devel] [PATCH v5 1/9] qemu-binfmt-conf.sh: enforce safe style consistency Unai Martinez-Corral
2019-03-11 20:18 ` [Qemu-devel] [PATCH v5 2/9] qemu-binfmt-conf.sh: make opts -p and -c boolean Unai Martinez-Corral
@ 2019-03-11 20:19 ` Unai Martinez-Corral
2019-03-11 20:20 ` [Qemu-devel] [PATCH v5 4/9] qemu-binfmt-conf.sh: use the same presentation format as for qemu-* Unai Martinez-Corral
` (6 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Unai Martinez-Corral @ 2019-03-11 20:19 UTC (permalink / raw)
To: qemu-devel; +Cc: laurent, riku.voipio, eblake
Allow to set options '--persistent' and/or '--credential' through
environment variables. If not defined, defaults are used ('no').
Anyway, command-line arguments have priority over environment variables.
Signed-off-by: Unai Martinez-Corral <unai.martinezcorral@ehu.eus>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
scripts/qemu-binfmt-conf.sh | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index ca15ff8092..ad9ae731a0 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -186,9 +186,11 @@ Usage: qemu-binfmt-conf.sh [--qemu-path PATH][--debian][--systemd CPU]
(default: $SYSTEMDDIR or $DEBIANDIR)
--credential: if present, credential and security tokens are
calculated according to the binary to interpret
+ ($QEMU_CREDENTIAL=yes)
--persistent: if present, the interpreter is loaded when binfmt is
configured and remains in memory. All future uses
are cloned from the open file.
+ ($QEMU_PERSISTENT=yes)
To import templates with update-binfmts, use :
@@ -255,10 +257,10 @@ qemu_check_systemd() {
qemu_generate_register() {
flags=""
- if [ "x$CREDENTIAL" = "xyes" ] ; then
+ if [ "x$QEMU_CREDENTIAL" = "xyes" ] ; then
flags="OC"
fi
- if [ "x$PERSISTENT" = "xyes" ] ; then
+ if [ "x$QEMU_PERSISTENT" = "xyes" ] ; then
flags="${flags}F"
fi
@@ -281,7 +283,7 @@ package qemu-$cpu
interpreter $qemu
magic $magic
mask $mask
-credential $CREDENTIAL
+credential $QEMU_CREDENTIAL
EOF
}
@@ -320,8 +322,10 @@ SYSTEMDDIR="/etc/binfmt.d"
DEBIANDIR="/usr/share/binfmts"
QEMU_PATH=/usr/local/bin
-CREDENTIAL=no
-PERSISTENT=no
+
+QEMU_PERSISTENT="${QEMU_PERSISTENT:-no}"
+QEMU_CREDENTIAL="${QEMU_CREDENTIAL:-no}"
+
QEMU_SUFFIX=""
options=$(getopt -o ds:Q:S:e:hcp -l debian,systemd:,qemu-path:,qemu-suffix:,exportdir:,help,credential,persistent -- "$@")
@@ -373,10 +377,10 @@ while true ; do
exit 1
;;
-c|--credential)
- CREDENTIAL="yes"
+ QEMU_CREDENTIAL="yes"
;;
-p|--persistent)
- PERSISTENT="yes"
+ QEMU_PERSISTENT="yes"
;;
*)
break
--
2.21.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v5 4/9] qemu-binfmt-conf.sh: use the same presentation format as for qemu-*
2019-03-11 20:15 [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
` (2 preceding siblings ...)
2019-03-11 20:19 ` [Qemu-devel] [PATCH v5 3/9] qemu-binfmt-conf.sh: add QEMU_CREDENTIAL and QEMU_PERSISTENT Unai Martinez-Corral
@ 2019-03-11 20:20 ` Unai Martinez-Corral
2019-03-11 20:20 ` [Qemu-devel] [PATCH v5 5/9] qemu-binfmt-conf.sh: remove 'qemu' prefix from cli options Unai Martinez-Corral
` (5 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Unai Martinez-Corral @ 2019-03-11 20:20 UTC (permalink / raw)
To: qemu-devel; +Cc: laurent, riku.voipio, eblake
Signed-off-by: Unai Martinez-Corral <unai.martinezcorral@ehu.eus>
---
scripts/qemu-binfmt-conf.sh | 63 +++++++++++++++++++------------------
1 file changed, 32 insertions(+), 31 deletions(-)
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index ad9ae731a0..35f61d9a6c 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -167,47 +167,48 @@ qemu_get_family() {
usage() {
cat <<EOF
-Usage: qemu-binfmt-conf.sh [--qemu-path PATH][--debian][--systemd CPU]
- [--help][--credential][--exportdir PATH]
- [--persistent][--qemu-suffix SUFFIX]
+Usage: qemu-binfmt-conf.sh [options]
- Configure binfmt_misc to use qemu interpreter
+Configure binfmt_misc to use qemu interpreter
- --help: display this usage
- --qemu-path: set path to qemu interpreter ($QEMU_PATH)
- --qemu-suffix: add a suffix to the default interpreter name
- --debian: don't write into /proc,
- instead generate update-binfmts templates
- --systemd: don't write into /proc,
- instead generate file for systemd-binfmt.service
- for the given CPU. If CPU is "ALL", generate a
- file for all known cpus
- --exportdir: define where to write configuration files
- (default: $SYSTEMDDIR or $DEBIANDIR)
- --credential: if present, credential and security tokens are
- calculated according to the binary to interpret
- ($QEMU_CREDENTIAL=yes)
- --persistent: if present, the interpreter is loaded when binfmt is
- configured and remains in memory. All future uses
- are cloned from the open file.
- ($QEMU_PERSISTENT=yes)
+Options and associated environment variables:
- To import templates with update-binfmts, use :
+Argument Env-variable Description
+-h|--help display this usage
+-Q|--qemu-path PATH QEMU_PATH set path to qemu interpreter
+-F|--qemu-suffix SUFFIX add a suffix to the default interpreter name
+-p|--persistent QEMU_PERSISTENT (yes) load the interpreter and keep it in memory; all future
+ uses are cloned from the open file.
+-c|--credential QEMU_CREDENTIAL (yes) credential and security tokens are calculated according
+ to the binary to interpret
+-e|--exportdir PATH DEBIANDIR define where to write configuration files
+ SYSTEMDDIR
+-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.
+-d|--debian don't write into /proc, generate update-binfmts templates
- sudo update-binfmts --importdir ${EXPORTDIR:-$DEBIANDIR} --import qemu-CPU
+Defaults:
+QEMU_PATH=$QEMU_PATH
+QEMU_PERSISTENT=$QEMU_PERSISTENT
+QEMU_CREDENTIAL=$QEMU_CREDENTIAL
- To remove interpreter, use :
+To import templates with update-binfmts, use :
- sudo update-binfmts --package qemu-CPU --remove qemu-CPU $QEMU_PATH
+ sudo update-binfmts --importdir ${EXPORTDIR:-$DEBIANDIR} --import qemu-CPU
- With systemd, binfmt files are loaded by systemd-binfmt.service
+To remove interpreter, use :
- The environment variable HOST_ARCH allows to override 'uname' to generate
- configuration files for a different architecture than the current one.
+ sudo update-binfmts --package qemu-CPU --remove qemu-CPU $QEMU_PATH
- where CPU is one of:
+With systemd, binfmt files are loaded by systemd-binfmt.service
- $qemu_target_list
+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
EOF
}
--
2.21.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v5 5/9] qemu-binfmt-conf.sh: remove 'qemu' prefix from cli options
2019-03-11 20:15 [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
` (3 preceding siblings ...)
2019-03-11 20:20 ` [Qemu-devel] [PATCH v5 4/9] qemu-binfmt-conf.sh: use the same presentation format as for qemu-* Unai Martinez-Corral
@ 2019-03-11 20:20 ` Unai Martinez-Corral
2019-03-11 20:21 ` [Qemu-devel] [PATCH v5 6/9] qemu-binfmt-conf.sh: honour QEMU_PATH and/or QEMU_SUFFIX Unai Martinez-Corral
` (4 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Unai Martinez-Corral @ 2019-03-11 20:20 UTC (permalink / raw)
To: qemu-devel; +Cc: laurent, riku.voipio, eblake
This breaks backward compatibility.
Options 'qemu-path' and 'qemu-suffix' have the 'qemu-' prefix, which is
not present in other option names ('debian', 'systemd', 'persistent',
'credential'...). In order to keep consistency, the prefix is removed.
Signed-off-by: Unai Martinez-Corral <unai.martinezcorral@ehu.eus>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
scripts/qemu-binfmt-conf.sh | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index 35f61d9a6c..124866246f 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -167,6 +167,7 @@ qemu_get_family() {
usage() {
cat <<EOF
+
Usage: qemu-binfmt-conf.sh [options]
Configure binfmt_misc to use qemu interpreter
@@ -175,8 +176,8 @@ Options and associated environment variables:
Argument Env-variable Description
-h|--help display this usage
--Q|--qemu-path PATH QEMU_PATH set path to qemu interpreter
--F|--qemu-suffix SUFFIX add a suffix to the default interpreter name
+-Q|--path PATH QEMU_PATH set path to qemu interpreter(s)
+-F|--suffix SUFFIX add a suffix to the default interpreter name
-p|--persistent QEMU_PERSISTENT (yes) load the interpreter and keep it in memory; all future
uses are cloned from the open file.
-c|--credential QEMU_CREDENTIAL (yes) credential and security tokens are calculated according
@@ -329,7 +330,7 @@ QEMU_CREDENTIAL="${QEMU_CREDENTIAL:-no}"
QEMU_SUFFIX=""
-options=$(getopt -o ds:Q:S:e:hcp -l debian,systemd:,qemu-path:,qemu-suffix:,exportdir:,help,credential,persistent -- "$@")
+options=$(getopt -o ds:Q:S:e:hcp -l debian,systemd:,path:,suffix:,exportdir:,help,credential,persistent -- "$@")
eval set -- "$options"
while true ; do
@@ -361,11 +362,11 @@ while true ; do
fi
fi
;;
- -Q|--qemu-path)
+ -Q|--path)
shift
QEMU_PATH="$1"
;;
- -F|--qemu-suffix)
+ -F|--suffix)
shift
QEMU_SUFFIX="$1"
;;
--
2.21.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v5 6/9] qemu-binfmt-conf.sh: honour QEMU_PATH and/or QEMU_SUFFIX
2019-03-11 20:15 [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
` (4 preceding siblings ...)
2019-03-11 20:20 ` [Qemu-devel] [PATCH v5 5/9] qemu-binfmt-conf.sh: remove 'qemu' prefix from cli options Unai Martinez-Corral
@ 2019-03-11 20:21 ` Unai Martinez-Corral
2019-03-11 20:22 ` [Qemu-devel] [PATCH v5 7/9] qemu-binfmt-conf.sh: generalize <CPU> to positional TARGETS Unai Martinez-Corral
` (3 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Unai Martinez-Corral @ 2019-03-11 20:21 UTC (permalink / raw)
To: qemu-devel; +Cc: laurent, riku.voipio, eblake
Allow to set 'path' or 'suffix' through environment variables,
consistently with 'persistent' and 'credential'.
Signed-off-by: Unai Martinez-Corral <unai.martinezcorral@ehu.eus>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
scripts/qemu-binfmt-conf.sh | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index 124866246f..5616ac60ce 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -177,7 +177,7 @@ Options and associated environment variables:
Argument Env-variable Description
-h|--help display this usage
-Q|--path PATH QEMU_PATH set path to qemu interpreter(s)
--F|--suffix SUFFIX add a suffix to the default interpreter name
+-F|--suffix SUFFIX QEMU_SUFFIX add a suffix to the default interpreter name
-p|--persistent QEMU_PERSISTENT (yes) load the interpreter and keep it in memory; all future
uses are cloned from the open file.
-c|--credential QEMU_CREDENTIAL (yes) credential and security tokens are calculated according
@@ -191,6 +191,7 @@ Argument Env-variable Description
Defaults:
QEMU_PATH=$QEMU_PATH
+QEMU_SUFFIX=$QEMU_SUFFIX
QEMU_PERSISTENT=$QEMU_PERSISTENT
QEMU_CREDENTIAL=$QEMU_CREDENTIAL
@@ -323,13 +324,11 @@ BINFMT_SET=qemu_register_interpreter
SYSTEMDDIR="/etc/binfmt.d"
DEBIANDIR="/usr/share/binfmts"
-QEMU_PATH=/usr/local/bin
-
+QEMU_PATH="${QEMU_PATH:-/usr/local/bin}"
+QEMU_SUFFIX="${QEMU_SUFFIX:-}"
QEMU_PERSISTENT="${QEMU_PERSISTENT:-no}"
QEMU_CREDENTIAL="${QEMU_CREDENTIAL:-no}"
-QEMU_SUFFIX=""
-
options=$(getopt -o ds:Q:S:e:hcp -l debian,systemd:,path:,suffix:,exportdir:,help,credential,persistent -- "$@")
eval set -- "$options"
--
2.21.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v5 7/9] qemu-binfmt-conf.sh: generalize <CPU> to positional TARGETS
2019-03-11 20:15 [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
` (5 preceding siblings ...)
2019-03-11 20:21 ` [Qemu-devel] [PATCH v5 6/9] qemu-binfmt-conf.sh: honour QEMU_PATH and/or QEMU_SUFFIX Unai Martinez-Corral
@ 2019-03-11 20:22 ` Unai Martinez-Corral
2019-03-11 20:23 ` [Qemu-devel] [PATCH v5 8/9] qemu-binfmt-conf.sh: add option --clear Unai Martinez-Corral
` (2 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Unai Martinez-Corral @ 2019-03-11 20:22 UTC (permalink / raw)
To: qemu-devel; +Cc: laurent, riku.voipio, eblake
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, 46 insertions(+), 34 deletions(-)
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index 5616ac60ce..2be9867727 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -6,6 +6,28 @@ 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
+ unset checked_target_list
+ 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 [ "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,14 +189,16 @@ 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
@@ -184,12 +208,12 @@ Argument Env-variable Description
to the binary to interpret
-e|--exportdir PATH DEBIANDIR define where to write configuration files
SYSTEMDDIR
--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;
-d|--debian don't write into /proc, generate update-binfmts templates
Defaults:
+QEMU_TARGETS=$QEMU_TARGETS
QEMU_PATH=$QEMU_PATH
QEMU_SUFFIX=$QEMU_SUFFIX
QEMU_PERSISTENT=$QEMU_PERSISTENT
@@ -203,14 +227,10 @@ 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.
-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
}
@@ -294,9 +314,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)
@@ -324,12 +350,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_PERSISTENT="${QEMU_PERSISTENT:-no}"
QEMU_CREDENTIAL="${QEMU_CREDENTIAL:-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
@@ -343,23 +370,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
@@ -390,5 +400,7 @@ while true ; do
shift
done
+shift
+
$CHECK
-qemu_set_binfmts
+qemu_set_binfmts "$@"
--
2.21.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v5 8/9] qemu-binfmt-conf.sh: add option --clear
2019-03-11 20:15 [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
` (6 preceding siblings ...)
2019-03-11 20:22 ` [Qemu-devel] [PATCH v5 7/9] qemu-binfmt-conf.sh: generalize <CPU> to positional TARGETS Unai Martinez-Corral
@ 2019-03-11 20:23 ` Unai Martinez-Corral
2019-03-11 20:24 ` [Qemu-devel] [PATCH v5 9/9] qemu-binfmt-conf.sh: add --test Unai Martinez-Corral
2019-03-11 20:45 ` [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
9 siblings, 0 replies; 11+ messages in thread
From: Unai Martinez-Corral @ 2019-03-11 20:23 UTC (permalink / raw)
To: qemu-devel; +Cc: laurent, riku.voipio, eblake
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.martinezcorral@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 > {}' \;
+}
+
CHECK=qemu_check_bintfmt_misc
BINFMT_SET=qemu_register_interpreter
+BINFMT_CLEAR=qemu_clear_interpreter
SYSTEMDDIR="/etc/binfmt.d"
DEBIANDIR="/usr/share/binfmts"
@@ -355,20 +378,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)
@@ -403,4 +432,10 @@ done
shift
$CHECK
+
+if [ "x$QEMU_CLEAR" = "xyes" ] ; then
+ $BINFMT_CLEAR "$@"
+ exit
+fi
+
qemu_set_binfmts "$@"
--
2.21.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v5 9/9] qemu-binfmt-conf.sh: add --test
2019-03-11 20:15 [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
` (7 preceding siblings ...)
2019-03-11 20:23 ` [Qemu-devel] [PATCH v5 8/9] qemu-binfmt-conf.sh: add option --clear Unai Martinez-Corral
@ 2019-03-11 20:24 ` Unai Martinez-Corral
2019-03-11 20:45 ` [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
9 siblings, 0 replies; 11+ messages in thread
From: Unai Martinez-Corral @ 2019-03-11 20:24 UTC (permalink / raw)
To: qemu-devel; +Cc: laurent, riku.voipio, eblake
Signed-off-by: Unai Martinez-Corral <unai.martinezcorral@ehu.eus>
---
scripts/qemu-binfmt-conf.sh | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index 382bdaabfe..b750f60ef5 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -197,8 +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/clear all known targets;
- if 'NONE', no interpreter is configured.
+ if empty, configure/clear all known targets.
-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
@@ -208,6 +207,8 @@ TARGETS QEMU_TARGETS A single arch name or a list of them (see
to the binary to interpret
-r|--clear QEMU_CLEAR (yes) remove registered interpreters for target TARGETS;
then exit.
+-t|--test QEMU_TEST (yes) test the setup with the provided arguments, but do not
+ configure any of the interpreters.
-e|--exportdir PATH DEBIANDIR define where to write configuration files
SYSTEMDDIR
-s|--systemd don't write into /proc, generate file(s) for
@@ -221,6 +222,7 @@ QEMU_SUFFIX=$QEMU_SUFFIX
QEMU_PERSISTENT=$QEMU_PERSISTENT
QEMU_CREDENTIAL=$QEMU_CREDENTIAL
QEMU_CLEAR=$QEMU_CLEAR
+QEMU_TEST=$QEMU_TEST
To import templates with update-binfmts, use :
@@ -319,9 +321,6 @@ qemu_set_binfmts() {
# 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
# register the interpreter for each target except for the native one
@@ -379,12 +378,16 @@ QEMU_SUFFIX="${QEMU_SUFFIX:-}"
QEMU_PERSISTENT="${QEMU_PERSISTENT:-no}"
QEMU_CREDENTIAL="${QEMU_CREDENTIAL:-no}"
QEMU_CLEAR="${QEMU_CLEAR:-no}"
+QEMU_TEST="${QEMU_TEST:-no}"
-options=$(getopt -o rdsQ:S:e:hcp -l clear,debian,systemd,path:,suffix:,exportdir:,help,credential,persistent -- "$@")
+options=$(getopt -o trdsQ:S:e:hcp -l test,clear,debian,systemd,path:,suffix:,exportdir:,help,credential,persistent -- "$@")
eval set -- "$options"
while true ; do
case "$1" in
+ -t|--test)
+ QEMU_TEST="yes"
+ ;;
-r|--clear)
QEMU_CLEAR="yes"
;;
@@ -438,4 +441,8 @@ if [ "x$QEMU_CLEAR" = "xyes" ] ; then
exit
fi
+if [ "x$QEMU_TEST" = "xyes" ] ; then
+ BINFMT_SET=:
+fi
+
qemu_set_binfmts "$@"
--
2.21.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh
2019-03-11 20:15 [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
` (8 preceding siblings ...)
2019-03-11 20:24 ` [Qemu-devel] [PATCH v5 9/9] qemu-binfmt-conf.sh: add --test Unai Martinez-Corral
@ 2019-03-11 20:45 ` Unai Martinez-Corral
9 siblings, 0 replies; 11+ messages in thread
From: Unai Martinez-Corral @ 2019-03-11 20:45 UTC (permalink / raw)
To: qemu-devel; +Cc: laurent, riku.voipio, eblake
Unfortunately the subject of the first message in the v5 of this series
is wrong. I submitted '[PATCH v5 0/10] qemu-binfmt-conf.sh', but it
should have been '[PATCH v5 0/9] qemu-binfmt-conf.sh'.
All of the 9 patches have been properly submitted, but the patchset is
not detected as complete.
Do I need to resend all of them again?
I'm sorry for the inconvenience.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2019-03-11 20:46 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-11 20:15 [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
2019-03-11 20:17 ` [Qemu-devel] [PATCH v5 1/9] qemu-binfmt-conf.sh: enforce safe style consistency Unai Martinez-Corral
2019-03-11 20:18 ` [Qemu-devel] [PATCH v5 2/9] qemu-binfmt-conf.sh: make opts -p and -c boolean Unai Martinez-Corral
2019-03-11 20:19 ` [Qemu-devel] [PATCH v5 3/9] qemu-binfmt-conf.sh: add QEMU_CREDENTIAL and QEMU_PERSISTENT Unai Martinez-Corral
2019-03-11 20:20 ` [Qemu-devel] [PATCH v5 4/9] qemu-binfmt-conf.sh: use the same presentation format as for qemu-* Unai Martinez-Corral
2019-03-11 20:20 ` [Qemu-devel] [PATCH v5 5/9] qemu-binfmt-conf.sh: remove 'qemu' prefix from cli options Unai Martinez-Corral
2019-03-11 20:21 ` [Qemu-devel] [PATCH v5 6/9] qemu-binfmt-conf.sh: honour QEMU_PATH and/or QEMU_SUFFIX Unai Martinez-Corral
2019-03-11 20:22 ` [Qemu-devel] [PATCH v5 7/9] qemu-binfmt-conf.sh: generalize <CPU> to positional TARGETS Unai Martinez-Corral
2019-03-11 20:23 ` [Qemu-devel] [PATCH v5 8/9] qemu-binfmt-conf.sh: add option --clear Unai Martinez-Corral
2019-03-11 20:24 ` [Qemu-devel] [PATCH v5 9/9] qemu-binfmt-conf.sh: add --test Unai Martinez-Corral
2019-03-11 20:45 ` [Qemu-devel] [PATCH v5 0/10] qemu-binfmt-conf.sh Unai Martinez-Corral
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.