From: Lennart Poettering Date: Mon, 14 Mar 2011 22:41:47 +0000 (+0100) Subject: container: skip a few things when we are run in a container such as accessing /proc... X-Git-Tag: v21~80 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=2fc9784656900c4dc3715db506096ddc23fdd87c;hp=1f16b4a6c496288aa62dc2ac973f88ca6c801b5d;ds=sidebyside container: skip a few things when we are run in a container such as accessing /proc/cmdline --- diff --git a/src/condition.c b/src/condition.c index 1d6cf12ad..1dce276c0 100644 --- a/src/condition.c +++ b/src/condition.c @@ -67,6 +67,9 @@ static bool test_kernel_command_line(const char *parameter) { assert(parameter); + if (detect_virtualization(NULL) > 0) + return false; + if ((r = read_one_line_file("/proc/cmdline", &line)) < 0) { log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); return false; diff --git a/src/fsck.c b/src/fsck.c index b5d8764e0..a3c83c3c2 100644 --- a/src/fsck.c +++ b/src/fsck.c @@ -106,6 +106,9 @@ static int parse_proc_cmdline(void) { int r; size_t l; + if (detect_virtualization(NULL) > 0) + return 0; + if ((r = read_one_line_file("/proc/cmdline", &line)) < 0) { log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); return 0; diff --git a/src/locale-setup.c b/src/locale-setup.c index 7684681cc..055c1fa3f 100644 --- a/src/locale-setup.c +++ b/src/locale-setup.c @@ -69,28 +69,29 @@ int locale_setup(void) { zero(variables); - if ((r = parse_env_file("/proc/cmdline", WHITESPACE, + if (detect_virtualization(NULL) <= 0) + if ((r = parse_env_file("/proc/cmdline", WHITESPACE, #ifdef TARGET_FEDORA - "LANG", &variables[VARIABLE_LANG], + "LANG", &variables[VARIABLE_LANG], #endif - "locale.LANG", &variables[VARIABLE_LANG], - "locale.LC_CTYPE", &variables[VARIABLE_LC_CTYPE], - "locale.LC_NUMERIC", &variables[VARIABLE_LC_NUMERIC], - "locale.LC_TIME", &variables[VARIABLE_LC_TIME], - "locale.LC_COLLATE", &variables[VARIABLE_LC_COLLATE], - "locale.LC_MONETARY", &variables[VARIABLE_LC_MONETARY], - "locale.LC_MESSAGES", &variables[VARIABLE_LC_MESSAGES], - "locale.LC_PAPER", &variables[VARIABLE_LC_PAPER], - "locale.LC_NAME", &variables[VARIABLE_LC_NAME], - "locale.LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS], - "locale.LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE], - "locale.LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT], - "locale.LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION], - NULL)) < 0) { - - if (r != -ENOENT) - log_warning("Failed to read /proc/cmdline: %s", strerror(-r)); - } + "locale.LANG", &variables[VARIABLE_LANG], + "locale.LC_CTYPE", &variables[VARIABLE_LC_CTYPE], + "locale.LC_NUMERIC", &variables[VARIABLE_LC_NUMERIC], + "locale.LC_TIME", &variables[VARIABLE_LC_TIME], + "locale.LC_COLLATE", &variables[VARIABLE_LC_COLLATE], + "locale.LC_MONETARY", &variables[VARIABLE_LC_MONETARY], + "locale.LC_MESSAGES", &variables[VARIABLE_LC_MESSAGES], + "locale.LC_PAPER", &variables[VARIABLE_LC_PAPER], + "locale.LC_NAME", &variables[VARIABLE_LC_NAME], + "locale.LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS], + "locale.LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE], + "locale.LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT], + "locale.LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION], + NULL)) < 0) { + + if (r != -ENOENT) + log_warning("Failed to read /proc/cmdline: %s", strerror(-r)); + } /* Hmm, nothing set on the kernel cmd line? Then let's * try /etc/locale.conf */ diff --git a/src/quotacheck.c b/src/quotacheck.c index da2da3b2e..057d8617c 100644 --- a/src/quotacheck.c +++ b/src/quotacheck.c @@ -35,6 +35,9 @@ static int parse_proc_cmdline(void) { int r; size_t l; + if (detect_virtualization(NULL) > 0) + return 0; + if ((r = read_one_line_file("/proc/cmdline", &line)) < 0) { log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); return 0; diff --git a/src/target.c b/src/target.c index e61255c12..b8d4a01b6 100644 --- a/src/target.c +++ b/src/target.c @@ -92,6 +92,9 @@ static int target_add_getty_dependencies(Target *t) { if (!unit_has_name(UNIT(t), SPECIAL_GETTY_TARGET)) return 0; + if (detect_container(NULL) > 0) + return 1; + if (read_one_line_file("/sys/class/tty/console/active", &active) >= 0) { const char *tty; diff --git a/src/vconsole-setup.c b/src/vconsole-setup.c index 5b977126f..29ce7be77 100644 --- a/src/vconsole-setup.c +++ b/src/vconsole-setup.c @@ -176,21 +176,22 @@ int main(int argc, char **argv) { utf8 = is_locale_utf8(); - if ((r = parse_env_file("/proc/cmdline", WHITESPACE, + if (detect_virtualization(NULL) <= 0) + if ((r = parse_env_file("/proc/cmdline", WHITESPACE, #ifdef TARGET_FEDORA - "SYSFONT", &vc_font, - "KEYTABLE", &vc_keymap, + "SYSFONT", &vc_font, + "KEYTABLE", &vc_keymap, #endif - "vconsole.keymap", &vc_keymap, - "vconsole.keymap.toggle", &vc_keymap_toggle, - "vconsole.font", &vc_font, - "vconsole.font.map", &vc_font_map, - "vconsole.font.unimap", &vc_font_unimap, - NULL)) < 0) { + "vconsole.keymap", &vc_keymap, + "vconsole.keymap.toggle", &vc_keymap_toggle, + "vconsole.font", &vc_font, + "vconsole.font.map", &vc_font_map, + "vconsole.font.unimap", &vc_font_unimap, + NULL)) < 0) { - if (r != -ENOENT) - log_warning("Failed to read /proc/cmdline: %s", strerror(-r)); - } + if (r != -ENOENT) + log_warning("Failed to read /proc/cmdline: %s", strerror(-r)); + } /* Hmm, nothing set on the kernel cmd line? Then let's * try /etc/vconsole.conf */