about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEthan Brierley <ethanboxx@gmail.com>2023-08-22 09:09:12 +0100
committerEthan Brierley <ethan.brierley@truelayer.com>2023-08-22 11:06:43 +0100
commit0e070aa548e32f6ba8dd4cc28e9c71d9ccfb7ff3 (patch)
tree7abbceb01100d42072a6a31f129c643e017162d1
parent32aa40538e473f58e504a09331c8a23a939ae88a (diff)
downloadrust-0e070aa548e32f6ba8dd4cc28e9c71d9ccfb7ff3.tar.gz
rust-0e070aa548e32f6ba8dd4cc28e9c71d9ccfb7ff3.zip
Always use `os-release` rather than `/lib` to detect `NixOS`
[Two users over on zulip](https://rust-lang.zulipchat.com/#narrow/stream/122651-general/topic/Bootstrapping.20on.20NixOS) bumped into issues where NixOS wasn't being properly detected.

I believe this was caused by the presence of `/lib` on their machines. `/lib` is not standard on NixOS but can still be created by users or scripts.

We are already checking `/etc/os-release`. The presence of `ID=nixos` in it's output should be trustworthy and we shouldn't then go on to also check for `/lib`.
-rw-r--r--src/bootstrap/bootstrap.py9
-rw-r--r--src/bootstrap/download.rs2
2 files changed, 3 insertions, 8 deletions
diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py
index f44a05a6b28..c5c70f2e18a 100644
--- a/src/bootstrap/bootstrap.py
+++ b/src/bootstrap/bootstrap.py
@@ -644,7 +644,7 @@ class RustBuild(object):
                 return False
 
             # If the user has asked binaries to be patched for Nix, then
-            # don't check for NixOS or `/lib`.
+            # don't check for NixOS.
             if self.get_toml("patch-binaries-for-nix", "build") == "true":
                 return True
 
@@ -652,14 +652,9 @@ class RustBuild(object):
             # The latter one does not exist on NixOS when using tmpfs as root.
             try:
                 with open("/etc/os-release", "r") as f:
-                    if not any(ln.strip() in ("ID=nixos", "ID='nixos'", 'ID="nixos"') for ln in f):
-                        return False
+                    return any(ln.strip() in ("ID=nixos", "ID='nixos'", 'ID="nixos"') for ln in f)
             except FileNotFoundError:
                 return False
-            if os.path.exists("/lib"):
-                return False
-
-            return True
 
         answer = self._should_fix_bins_and_dylibs = get_answer()
         if answer:
diff --git a/src/bootstrap/download.rs b/src/bootstrap/download.rs
index a4135b06e9d..52162bf42ea 100644
--- a/src/bootstrap/download.rs
+++ b/src/bootstrap/download.rs
@@ -105,7 +105,7 @@ impl Config {
                     matches!(l.trim(), "ID=nixos" | "ID='nixos'" | "ID=\"nixos\"")
                 }),
             };
-            is_nixos && !Path::new("/lib").exists()
+            is_nixos
         });
         if val {
             eprintln!("info: You seem to be using Nix.");