os-posix: Allow 'chroot' via '-run-with' and deprecate the old '-chroot' option
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. Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Reviewed-by: Michael Tokarev <mjt@tls.msk.ru> Reviewed-by: Ján Tomko <jtomko@redhat.com> Message-Id: <20230703074447.17044-1-thuth@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
bc55e2eaa6
commit
9ffcbe2a60
@ -116,6 +116,11 @@ Use "whpx" (on Windows) or "hvf" (on macOS) instead.
|
|||||||
|
|
||||||
Use ``-run-with async-teardown=on`` instead.
|
Use ``-run-with async-teardown=on`` instead.
|
||||||
|
|
||||||
|
``-chroot`` (since 8.1)
|
||||||
|
'''''''''''''''''''''''
|
||||||
|
|
||||||
|
Use ``-run-with chroot=dir`` instead.
|
||||||
|
|
||||||
``-singlestep`` (since 8.1)
|
``-singlestep`` (since 8.1)
|
||||||
'''''''''''''''''''''''''''
|
'''''''''''''''''''''''''''
|
||||||
|
|
||||||
|
35
os-posix.c
35
os-posix.c
@ -38,6 +38,7 @@
|
|||||||
#include "qemu/cutils.h"
|
#include "qemu/cutils.h"
|
||||||
#include "qemu/config-file.h"
|
#include "qemu/config-file.h"
|
||||||
#include "qemu/option.h"
|
#include "qemu/option.h"
|
||||||
|
#include "qemu/module.h"
|
||||||
|
|
||||||
#ifdef CONFIG_LINUX
|
#ifdef CONFIG_LINUX
|
||||||
#include <sys/prctl.h>
|
#include <sys/prctl.h>
|
||||||
@ -148,6 +149,7 @@ int os_parse_cmd_args(int index, const char *optarg)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case QEMU_OPTION_chroot:
|
case QEMU_OPTION_chroot:
|
||||||
|
warn_report("option is deprecated, use '-run-with chroot=...' instead");
|
||||||
chroot_dir = optarg;
|
chroot_dir = optarg;
|
||||||
break;
|
break;
|
||||||
case QEMU_OPTION_daemonize:
|
case QEMU_OPTION_daemonize:
|
||||||
@ -158,18 +160,25 @@ int os_parse_cmd_args(int index, const char *optarg)
|
|||||||
case QEMU_OPTION_asyncteardown:
|
case QEMU_OPTION_asyncteardown:
|
||||||
init_async_teardown();
|
init_async_teardown();
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case QEMU_OPTION_run_with: {
|
case QEMU_OPTION_run_with: {
|
||||||
|
const char *str;
|
||||||
QemuOpts *opts = qemu_opts_parse_noisily(qemu_find_opts("run-with"),
|
QemuOpts *opts = qemu_opts_parse_noisily(qemu_find_opts("run-with"),
|
||||||
optarg, false);
|
optarg, false);
|
||||||
if (!opts) {
|
if (!opts) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
#if defined(CONFIG_LINUX)
|
||||||
if (qemu_opt_get_bool(opts, "async-teardown", false)) {
|
if (qemu_opt_get_bool(opts, "async-teardown", false)) {
|
||||||
init_async_teardown();
|
init_async_teardown();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
str = qemu_opt_get(opts, "chroot");
|
||||||
|
if (str) {
|
||||||
|
chroot_dir = str;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -348,3 +357,27 @@ int os_mlock(void)
|
|||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
#endif
|
#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_runwith(void)
|
||||||
|
{
|
||||||
|
qemu_add_opts(&qemu_run_with_opts);
|
||||||
|
}
|
||||||
|
opts_init(register_runwith);
|
||||||
|
@ -4677,11 +4677,12 @@ ERST
|
|||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
DEF("chroot", HAS_ARG, QEMU_OPTION_chroot, \
|
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)
|
QEMU_ARCH_ALL)
|
||||||
#endif
|
#endif
|
||||||
SRST
|
SRST
|
||||||
``-chroot dir``
|
``-chroot dir``
|
||||||
|
Deprecated, use '-run-with chroot=...' instead.
|
||||||
Immediately before starting guest execution, chroot to the specified
|
Immediately before starting guest execution, chroot to the specified
|
||||||
directory. Especially useful in combination with -runas.
|
directory. Especially useful in combination with -runas.
|
||||||
ERST
|
ERST
|
||||||
@ -4868,13 +4869,16 @@ SRST
|
|||||||
This option is deprecated and should no longer be used. The new option
|
This option is deprecated and should no longer be used. The new option
|
||||||
``-run-with async-teardown=on`` is a replacement.
|
``-run-with async-teardown=on`` is a replacement.
|
||||||
ERST
|
ERST
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_POSIX
|
||||||
DEF("run-with", HAS_ARG, QEMU_OPTION_run_with,
|
DEF("run-with", HAS_ARG, QEMU_OPTION_run_with,
|
||||||
"-run-with async-teardown[=on|off]\n"
|
"-run-with [async-teardown=on|off][,chroot=dir]\n"
|
||||||
" misc QEMU process lifecycle options\n"
|
" Set miscellaneous QEMU process lifecycle options:\n"
|
||||||
" async-teardown=on enables asynchronous teardown\n",
|
" async-teardown=on enables asynchronous teardown (Linux only)\n"
|
||||||
|
" chroot=dir chroot to dir just before starting the VM\n",
|
||||||
QEMU_ARCH_ALL)
|
QEMU_ARCH_ALL)
|
||||||
SRST
|
SRST
|
||||||
``-run-with``
|
``-run-with [async-teardown=on|off][,chroot=dir]``
|
||||||
Set QEMU process lifecycle options.
|
Set QEMU process lifecycle options.
|
||||||
|
|
||||||
``async-teardown=on`` enables asynchronous teardown. A new process called
|
``async-teardown=on`` enables asynchronous teardown. A new process called
|
||||||
@ -4887,6 +4891,10 @@ SRST
|
|||||||
performed correctly. This only works if the cleanup process is not
|
performed correctly. This only works if the cleanup process is not
|
||||||
forcefully killed with SIGKILL before the main QEMU process has
|
forcefully killed with SIGKILL before the main QEMU process has
|
||||||
terminated completely.
|
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
|
ERST
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -12,9 +12,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "qemu/config-file.h"
|
|
||||||
#include "qemu/option.h"
|
|
||||||
#include "qemu/module.h"
|
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <sys/prctl.h>
|
#include <sys/prctl.h>
|
||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
@ -147,21 +144,3 @@ void init_async_teardown(void)
|
|||||||
clone(async_teardown_fn, new_stack_for_clone(), CLONE_VM, NULL);
|
clone(async_teardown_fn, new_stack_for_clone(), CLONE_VM, NULL);
|
||||||
sigprocmask(SIG_SETMASK, &old_signals, 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);
|
|
||||||
|
Loading…
Reference in New Issue
Block a user