代码拉取完成,页面将自动刷新
同步操作将从 src-openEuler/systemd 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From 60d4ac20d8b02dd8f67150aaf55a4e0d019f58d2 Mon Sep 17 00:00:00 2001
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Date: Wed, 5 Jan 2022 19:24:46 +0900
Subject: [PATCH] fstab-generator: skip root directory handling when nfsroot is
requested
Fixes RHBZ#2037233 (https://bugzilla.redhat.com/show_bug.cgi?id=2037233).
(cherry picked from commit 77b8e92de8264c0b656a7d2fb437dd8d598ab597)
(cherry picked from commit 7ca41c509e6549abbfc753e560c822b5e32a63cc)
Conflict:NA
Reference:https://github.com/systemd/systemd/commit/60d4ac20d8b02dd8f67150aaf55a4e0d019f58d2
---
src/fstab-generator/fstab-generator.c | 59 ++++++++++++++++++++++++++-
1 file changed, 57 insertions(+), 2 deletions(-)
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index 1dee728233..0f3892789f 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -10,6 +10,7 @@
#include "fs-util.h"
#include "fstab-util.h"
#include "generator.h"
+#include "in-addr-util.h"
#include "log.h"
#include "main-func.h"
#include "mkdir.h"
@@ -691,6 +692,57 @@ static int parse_fstab(bool initrd) {
return r;
}
+static int sysroot_is_nfsroot(void) {
+ union in_addr_union u;
+ const char *sep, *a;
+ int r;
+
+ assert(arg_root_what);
+
+ /* From dracut.cmdline(7).
+ *
+ * root=[<server-ip>:]<root-dir>[:<nfs-options>]
+ * root=nfs:[<server-ip>:]<root-dir>[:<nfs-options>],
+ * root=nfs4:[<server-ip>:]<root-dir>[:<nfs-options>],
+ * root={dhcp|dhcp6}
+ *
+ * mount nfs share from <server-ip>:/<root-dir>, if no server-ip is given, use dhcp next_server.
+ * If server-ip is an IPv6 address it has to be put in brackets, e.g. [2001:DB8::1]. NFS options
+ * can be appended with the prefix ":" or "," and are separated by ",". */
+
+ if (path_equal(arg_root_what, "/dev/nfs") ||
+ STR_IN_SET(arg_root_what, "dhcp", "dhcp6") ||
+ STARTSWITH_SET(arg_root_what, "nfs:", "nfs4:"))
+ return true;
+
+ /* IPv6 address */
+ if (arg_root_what[0] == '[') {
+ sep = strchr(arg_root_what + 1, ']');
+ if (!sep)
+ return -EINVAL;
+
+ a = strndupa(arg_root_what + 1, sep - arg_root_what - 1);
+
+ r = in_addr_from_string(AF_INET6, a, &u);
+ if (r < 0)
+ return r;
+
+ return true;
+ }
+
+ /* IPv4 address */
+ sep = strchr(arg_root_what, ':');
+ if (sep) {
+ a = strndupa(arg_root_what, sep - arg_root_what);
+
+ if (in_addr_from_string(AF_INET, a, &u) >= 0)
+ return true;
+ }
+
+ /* root directory without address */
+ return path_is_absolute(arg_root_what) && !path_startswith(arg_root_what, "/dev");
+}
+
static int add_sysroot_mount(void) {
_cleanup_free_ char *what = NULL;
const char *opts, *fstype;
@@ -708,9 +760,12 @@ static int add_sysroot_mount(void) {
return 0;
}
- if (path_equal(arg_root_what, "/dev/nfs")) {
+ r = sysroot_is_nfsroot();
+ if (r < 0)
+ log_debug_errno(r, "Failed to determine if the root directory is on NFS, assuming not: %m");
+ else if (r > 0) {
/* This is handled by the kernel or the initrd */
- log_debug("Skipping root directory handling, as /dev/nfs was requested.");
+ log_debug("Skipping root directory handling, as root on NFS was requested.");
return 0;
}
--
2.33.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。