mirror of
https://github.com/systemd/systemd.git
synced 2025-01-10 05:18:17 +03:00
detect-virt: add new --chroot switch to detect chroot() environments
This commit is contained in:
parent
7f4b3c5ea3
commit
d21be5ff91
@ -139,7 +139,7 @@
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry morerows="5">container</entry>
|
||||
<entry morerows="5">Container</entry>
|
||||
<entry><varname>openvz</varname></entry>
|
||||
<entry>OpenVZ/Virtuozzo</entry>
|
||||
</row>
|
||||
@ -196,6 +196,18 @@
|
||||
hardware virtualization).</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>-r</option></term>
|
||||
<term><option>--chroot</option></term>
|
||||
|
||||
<listitem><para>Detect whether invoked in a
|
||||
<citerefentry><refentrytitle>chroot</refentrytitle><manvolnum>2</manvolnum></citerefentry>
|
||||
environment. In this mode no output is written, but the return
|
||||
value indicates whether the process was invoked in a
|
||||
<function>chroot()</function>
|
||||
environment or not.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>-q</option></term>
|
||||
<term><option>--quiet</option></term>
|
||||
@ -221,7 +233,8 @@
|
||||
<title>See Also</title>
|
||||
<para>
|
||||
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||
<citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>chroot</refentrytitle><manvolnum>2</manvolnum></citerefentry>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
@ -31,7 +31,8 @@ static bool arg_quiet = false;
|
||||
static enum {
|
||||
ANY_VIRTUALIZATION,
|
||||
ONLY_VM,
|
||||
ONLY_CONTAINER
|
||||
ONLY_CONTAINER,
|
||||
ONLY_CHROOT,
|
||||
} arg_mode = ANY_VIRTUALIZATION;
|
||||
|
||||
static void help(void) {
|
||||
@ -41,6 +42,7 @@ static void help(void) {
|
||||
" --version Show package version\n"
|
||||
" -c --container Only detect whether we are run in a container\n"
|
||||
" -v --vm Only detect whether we are run in a VM\n"
|
||||
" -r --chroot Detect whether we are run in a chroot() environment\n"
|
||||
" -q --quiet Don't output anything, just set return value\n"
|
||||
, program_invocation_short_name);
|
||||
}
|
||||
@ -55,7 +57,8 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
{ "version", no_argument, NULL, ARG_VERSION },
|
||||
{ "container", no_argument, NULL, 'c' },
|
||||
{ "vm", optional_argument, NULL, 'v' },
|
||||
{ "vm", no_argument, NULL, 'v' },
|
||||
{ "chroot", no_argument, NULL, 'r' },
|
||||
{ "quiet", no_argument, NULL, 'q' },
|
||||
{}
|
||||
};
|
||||
@ -65,7 +68,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
assert(argc >= 0);
|
||||
assert(argv);
|
||||
|
||||
while ((c = getopt_long(argc, argv, "hqcv", options, NULL)) >= 0)
|
||||
while ((c = getopt_long(argc, argv, "hqcvr", options, NULL)) >= 0)
|
||||
|
||||
switch (c) {
|
||||
|
||||
@ -88,6 +91,10 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
arg_mode = ONLY_VM;
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
arg_mode = ONLY_CHROOT;
|
||||
break;
|
||||
|
||||
case '?':
|
||||
return -EINVAL;
|
||||
|
||||
@ -137,6 +144,15 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
break;
|
||||
|
||||
case ONLY_CHROOT:
|
||||
r = running_in_chroot();
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to check for chroot() environment: %m");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
return r ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
|
||||
case ANY_VIRTUALIZATION:
|
||||
default:
|
||||
r = detect_virtualization();
|
||||
|
Loading…
Reference in New Issue
Block a user