Re: [PATCH] os-posix: Allow 'chroot' via '-run-with' and deprecate the old '-chroot' option

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 30 Jun 2023 17:01:12 +0200
Thomas Huth <thuth@xxxxxxxxxx> 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@xxxxxxxxxx>

Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx>

> ---
>  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
>  




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux