Description of problem: Libguestfs "make" fails with when building inside a docker with "supermin: error: rename: Directory not empty: supermin.d.ibactpan" Version-Release number of selected component (if applicable): libguestfs-1.38.6 supermin-5.1.20 How reproducible: Happens 100% on my MacOS setup Happens 10% on my Ubuntu setup Steps to Reproduce: 1. MacOS High Sierra 2. Docker version 18.09.0, build 4d60db4 Actual results: "supermin: error: rename: Directory not empty: supermin.d.ibactpan" Expected results: Build succeeds Additional info: After debugging supermin (building it from source and changing some lines) the actual problem is not here: if debug >= 1 then printf "supermin: renaming %s to %s\n%!" new_outputdir outputdir; rename new_outputdir outputdir; But actually in the previous rename: let old_outputdir = try let old_outputdir = outputdir ^ "." ^ string_random8 () in rename outputdir old_outputdir; Some old_outputdir with Unix_error _ -> None in It fails with Unix_error: supermin: error: rename: Invalid cross-device link: supermin.d But it is not propagated. According to docker with OverlayFS: https://docs.docker.com/storage/storagedriver/overlayfs-driver/ Renaming directories: Calling rename(2) for a directory is allowed only when both the source and the destination path are on the top layer. Otherwise, it returns EXDEV error (“cross-device link not permitted”). Your application needs to be designed to handle EXDEV and fall back to a “copy and unlink” strategy. Should we handle this to support building libguestfs inside a docker?
Created attachment 1524382 [details] 0001-Use-external-command-mv-to-rename-old-output-directo.patch Yes we should handle EXDEV as it suggests. Could you see if the attached patch fixes it? I only compile tested it, and I'm just guessing that 'mv' works on Docker.
That was fast. Yes, it works perfectly!
Thanks for testing, it's upstream in git now and will appear in supermin >= 5.1.21.