This patch must be applied to fakeroot 2.8 or SVN in order to enable correct handling of relative chroots, for rpm and yum. Index: src/libfakechroot.c =================================================================== --- src/libfakechroot.c (revision 311) +++ src/libfakechroot.c (working copy) @@ -1147,7 +1147,7 @@ { char *ptr, *ld_library_path, *tmp, *fakechroot_path; int status, len; - char dir[FAKECHROOT_MAXPATH], cwd[FAKECHROOT_MAXPATH], full_path[FAKECHROOT_MAXPATH]; + char dir[FAKECHROOT_MAXPATH], cwd[FAKECHROOT_MAXPATH]; #if !defined(HAVE_SETENV) char *envbuf; #endif @@ -1162,7 +1162,9 @@ return -1; } if (*path != '/') { - if (getcwd(cwd, FAKECHROOT_MAXPATH) == NULL) { + if (next_getcwd == NULL) fakechroot_init(); + + if (next_getcwd(cwd, FAKECHROOT_MAXPATH) == NULL) { errno = ENAMETOOLONG; return -1; } @@ -1171,24 +1173,22 @@ return -1; } if (strcmp(cwd, "/") == 0) { - snprintf(full_path, FAKECHROOT_MAXPATH, "/%s", path); + snprintf(dir, FAKECHROOT_MAXPATH, "/%s", path); } else { - snprintf(full_path, FAKECHROOT_MAXPATH, "%s/%s", cwd, path); + snprintf(dir, FAKECHROOT_MAXPATH, "%s/%s", cwd, path); } } else { - snprintf(full_path, FAKECHROOT_MAXPATH, "%s", path); - } + fakechroot_path = getenv("FAKECHROOT_BASE"); - fakechroot_path = getenv("FAKECHROOT_BASE"); - - if (fakechroot_path != NULL) { - snprintf(dir, FAKECHROOT_MAXPATH, "%s%s", fakechroot_path, full_path); + if (fakechroot_path != NULL) { + snprintf(dir, FAKECHROOT_MAXPATH, "%s%s", fakechroot_path, path); + } + else { + snprintf(dir, FAKECHROOT_MAXPATH, "%s", path); + } } - else { - snprintf(dir, FAKECHROOT_MAXPATH, "%s", full_path); - } #if defined(HAVE___XSTAT) && defined(_STAT_VER) if ((status = next___xstat(_STAT_VER, dir, &sb)) != 0) {