Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.
Sign upInvalid cross-device link (os error 18) when upgrading on a docker OverlayFS #1239
Comments
This comment has been minimized.
This comment has been minimized.
|
Spoke with @nrc and @alexcrichton on IRC and they said this seemed reasonable. I'll put forward an implementation this week. |
This comment has been minimized.
This comment has been minimized.
|
Heyo ! Any news on this one ? I encounter this bug regularly when doing builds on dockerized CI. Let me know if there is any more info I can provide. |
This comment has been minimized.
This comment has been minimized.
|
Looking at the sources, there already exists a wrapper function called |
This comment has been minimized.
This comment has been minimized.
|
For those affected by this bug, see the renaming section of the kernel documentation. @wraithan |
This comment has been minimized.
This comment has been minimized.
|
Heya, thank you to @nrc for taking a look :) (https://internals.rust-lang.org/t/contributing-to-rustup-help-with-code-structure-needed/7193). I'm thinking of trying to tackle this bug, I like writing the replication test first, so would probably focus on this.; to try to inject the fault in the test and see what's what. Let me know if someone else wants to look into that as well, we can combine forces :) |
wraithan commentedAug 21, 2017
std::fs::rename()basically doesn't work on OverlayFS as far as I can tell by looking at other similar reports for various languages and projects hitting cross-device link errors on OverlayFS is boils down to using the rename syscall.I'd like to propose wrapping the
std::fs::rename()calls and if on linux detect os error 18 attempt to do a copy and delete instead. There are periodic other reports of errors like this on various platforms, the wrapper could try to handle the other OS cases too if they have a similar error code (or maybe even the same one if this is standard, I'm not sure).Interestingly there is the bootstrap/update problem where folks who are experiencing may be unable to update their rustup install and not be able get the update that fixes the problem once there is a solution. Those folks will need to be advised to reinstall their rustup.
If the proposed solution to the problem works for the dev team, I'll attempt to provide a PR within a week of getting the go ahead.
This is relevant because some people use a common Docker image for their CI environments that may not be updated frequently enough for beta/nightly and have
rustup update $desired_envin their script. Which is how I found this problem.