#
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"
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;
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
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
int r;
char *i;
char *path = NULL;
+ char *env_no_xattr = NULL;
r = parse_argv(argc, argv);
if (r <= 0)
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);