[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] os-posix: Allow 'chroot' via '-run-with' and deprecate the o
From: |
Claudio Imbrenda |
Subject: |
Re: [PATCH] os-posix: Allow 'chroot' via '-run-with' and deprecate the old '-chroot' option |
Date: |
Fri, 30 Jun 2023 17:18:41 +0200 |
On Fri, 30 Jun 2023 17:01:12 +0200
Thomas Huth <thuth@redhat.com> wrote:
> We recently introduced "-run-with" for options that influence the
> runtime behavior of QEMU. This option has the big advantage that it
> can group related options (so that it is easier for the users to spot
> them) and that the options become introspectable via QMP this way.
> So let's start moving more switches into this option group, starting
> with "-chroot" now.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
> ---
> docs/about/deprecated.rst | 5 +++++
> os-posix.c | 35 ++++++++++++++++++++++++++++++++++-
> util/async-teardown.c | 21 ---------------------
> qemu-options.hx | 18 +++++++++++++-----
> 4 files changed, 52 insertions(+), 27 deletions(-)
>
> diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst
> index 0743459862..1cf53b86ce 100644
> --- a/docs/about/deprecated.rst
> +++ b/docs/about/deprecated.rst
> @@ -116,6 +116,11 @@ Use "whpx" (on Windows) or "hvf" (on macOS) instead.
>
> Use ``-run-with async-teardown=on`` instead.
>
> +``-chroot`` (since 8.1)
> +'''''''''''''''''''''''
> +
> +Use ``-run-with chroot=dir`` instead.
> +
> ``-singlestep`` (since 8.1)
> '''''''''''''''''''''''''''
>
> diff --git a/os-posix.c b/os-posix.c
> index 90ea71725f..0ae1fb2347 100644
> --- a/os-posix.c
> +++ b/os-posix.c
> @@ -38,6 +38,7 @@
> #include "qemu/cutils.h"
> #include "qemu/config-file.h"
> #include "qemu/option.h"
> +#include "qemu/module.h"
>
> #ifdef CONFIG_LINUX
> #include <sys/prctl.h>
> @@ -148,6 +149,7 @@ int os_parse_cmd_args(int index, const char *optarg)
> }
> break;
> case QEMU_OPTION_chroot:
> + warn_report("option is deprecated, use '-run-with chroot=...'
> instead");
> chroot_dir = optarg;
> break;
> case QEMU_OPTION_daemonize:
> @@ -158,18 +160,25 @@ int os_parse_cmd_args(int index, const char *optarg)
> case QEMU_OPTION_asyncteardown:
> init_async_teardown();
> break;
> +#endif
> case QEMU_OPTION_run_with: {
> + const char *str;
> QemuOpts *opts = qemu_opts_parse_noisily(qemu_find_opts("run-with"),
> optarg, false);
> if (!opts) {
> exit(1);
> }
> +#if defined(CONFIG_LINUX)
> if (qemu_opt_get_bool(opts, "async-teardown", false)) {
> init_async_teardown();
> }
> +#endif
> + str = qemu_opt_get(opts, "chroot");
> + if (str) {
> + chroot_dir = str;
> + }
> break;
> }
> -#endif
> default:
> return -1;
> }
> @@ -348,3 +357,27 @@ int os_mlock(void)
> return -ENOSYS;
> #endif
> }
> +
> +static QemuOptsList qemu_run_with_opts = {
> + .name = "run-with",
> + .head = QTAILQ_HEAD_INITIALIZER(qemu_run_with_opts.head),
> + .desc = {
> +#if defined(CONFIG_LINUX)
> + {
> + .name = "async-teardown",
> + .type = QEMU_OPT_BOOL,
> + },
> +#endif
> + {
> + .name = "chroot",
> + .type = QEMU_OPT_STRING,
> + },
> + { /* end of list */ }
> + },
> +};
> +
> +static void register_teardown(void)
> +{
> + qemu_add_opts(&qemu_run_with_opts);
> +}
> +opts_init(register_teardown);
> diff --git a/util/async-teardown.c b/util/async-teardown.c
> index 3ab19c8740..62cdeb0f20 100644
> --- a/util/async-teardown.c
> +++ b/util/async-teardown.c
> @@ -12,9 +12,6 @@
> */
>
> #include "qemu/osdep.h"
> -#include "qemu/config-file.h"
> -#include "qemu/option.h"
> -#include "qemu/module.h"
> #include <dirent.h>
> #include <sys/prctl.h>
> #include <sched.h>
> @@ -147,21 +144,3 @@ void init_async_teardown(void)
> clone(async_teardown_fn, new_stack_for_clone(), CLONE_VM, NULL);
> sigprocmask(SIG_SETMASK, &old_signals, NULL);
> }
> -
> -static QemuOptsList qemu_run_with_opts = {
> - .name = "run-with",
> - .head = QTAILQ_HEAD_INITIALIZER(qemu_run_with_opts.head),
> - .desc = {
> - {
> - .name = "async-teardown",
> - .type = QEMU_OPT_BOOL,
> - },
> - { /* end of list */ }
> - },
> -};
> -
> -static void register_teardown(void)
> -{
> - qemu_add_opts(&qemu_run_with_opts);
> -}
> -opts_init(register_teardown);
> diff --git a/qemu-options.hx b/qemu-options.hx
> index b57489d7ca..f49d4c0e3c 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -4670,11 +4670,12 @@ ERST
>
> #ifndef _WIN32
> DEF("chroot", HAS_ARG, QEMU_OPTION_chroot, \
> - "-chroot dir chroot to dir just before starting the VM\n",
> + "-chroot dir chroot to dir just before starting the VM
> (deprecated)\n",
> QEMU_ARCH_ALL)
> #endif
> SRST
> ``-chroot dir``
> + Deprecated, use '-run-with chroot=...' instead.
> Immediately before starting guest execution, chroot to the specified
> directory. Especially useful in combination with -runas.
> ERST
> @@ -4861,13 +4862,16 @@ SRST
> This option is deprecated and should no longer be used. The new option
> ``-run-with async-teardown=on`` is a replacement.
> ERST
> +#endif
> +#ifdef CONFIG_POSIX
> DEF("run-with", HAS_ARG, QEMU_OPTION_run_with,
> - "-run-with async-teardown[=on|off]\n"
> - " misc QEMU process lifecycle options\n"
> - " async-teardown=on enables asynchronous teardown\n",
> + "-run-with [async-teardown=on|off][,chroot=dir]\n"
> + " Set miscellaneous QEMU process lifecycle options:\n"
> + " async-teardown=on enables asynchronous teardown (Linux
> only)\n"
> + " chroot=dir chroot to dir just before starting the VM\n",
> QEMU_ARCH_ALL)
> SRST
> -``-run-with``
> +``-run-with [async-teardown=on|off][,chroot=dir]``
> Set QEMU process lifecycle options.
>
> ``async-teardown=on`` enables asynchronous teardown. A new process called
> @@ -4880,6 +4884,10 @@ SRST
> performed correctly. This only works if the cleanup process is not
> forcefully killed with SIGKILL before the main QEMU process has
> terminated completely.
> +
> + ``chroot=dir`` can be used for doing a chroot to the specified directory
> + immediately before starting the guest execution. This is especially
> useful
> + in combination with -runas.
> ERST
> #endif
>