From: Harald Hoyer Date: Thu, 27 Feb 2020 12:21:06 +0000 (+0100) Subject: add DRACUT_NO_XATTR global environment variable X-Git-Tag: 050~51 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=93be2bc6ab00d40b304d2a3b1ce02fd8a3f31b31;p=thirdparty%2Fdracut.git add DRACUT_NO_XATTR global environment variable Useful, if you know, that those can't be copied anyway. --- diff --git a/dracut-init.sh b/dracut-init.sh index 0ff9b7e53..a8348b792 100644 --- a/dracut-init.sh +++ b/dracut-init.sh @@ -19,7 +19,7 @@ # export LC_MESSAGES=C -if [[ "$EUID" = "0" ]]; then +if [[ "$EUID" = "0" ]] && ! [[ $DRACUT_NO_XATTR ]]; then export DRACUT_CP="cp --reflink=auto --sparse=auto --preserve=mode,timestamps,xattr,links -dfr" else export DRACUT_CP="cp --reflink=auto --sparse=auto --preserve=mode,timestamps,links -dfr" diff --git a/install/dracut-install.c b/install/dracut-install.c index 419385045..5d48e9d56 100644 --- a/install/dracut-install.c +++ b/install/dracut-install.c @@ -59,6 +59,7 @@ static bool arg_modalias = false; static bool arg_resolvelazy = false; static bool arg_resolvedeps = false; static bool arg_hostonly = false; +static bool no_xattr = false; static char *destrootdir = NULL; static char *sysrootdir = NULL; static size_t sysrootdirlen = 0; @@ -310,7 +311,7 @@ static int cp(const char *src, const char *dst) normal_copy: pid = fork(); if (pid == 0) { - if (geteuid() == 0) + if (geteuid() == 0 && no_xattr == false) execlp("cp", "cp", "--reflink=auto", "--sparse=auto", "--preserve=mode,xattr,timestamps", "-fL", src, dst, NULL); else @@ -322,7 +323,7 @@ static int cp(const char *src, const char *dst) while (waitpid(pid, &ret, 0) < 0) { if (errno != EINTR) { ret = -1; - if (geteuid() == 0) + if (geteuid() == 0 && no_xattr == false) log_error("Failed: cp --reflink=auto --sparse=auto --preserve=mode,xattr,timestamps -fL %s %s", src, dst); else @@ -1898,6 +1899,7 @@ int main(int argc, char **argv) int r; char *i; char *path = NULL; + char *env_no_xattr = NULL; r = parse_argv(argc, argv); if (r <= 0) @@ -1945,6 +1947,10 @@ int main(int argc, char **argv) ldd = "ldd"; log_debug("LDD=%s", ldd); + env_no_xattr = getenv("DRACUT_NO_XATTR"); + if (env_no_xattr != NULL) + no_xattr = true; + pathdirs = strv_split(path, ":"); umask(0022);