@@ -475,6 +475,29 @@ def check_wsl(d):
bb.warn("You are running bitbake under WSLv2, this works properly but you should optimize your VHDX file eventually to avoid running out of storage space")
return None
+def check_userns():
+ """
+ Check that user namespaces are functional, as they're used for network isolation.
+ """
+
+ # There is a known failure case with AppAmrmor where the unshare() call
+ # succeeds (at which point the uid is nobody) but writing to the uid_map
+ # fails (so the uid isn't reset back to the user's uid). We can detect this.
+ parentuid = os.getuid()
+ pid = os.fork()
+ if not pid:
+ try:
+ bb.utils.disable_network()
+ except:
+ pass
+ os._exit(parentuid != os.getuid())
+
+ ret = os.waitpid(pid, 0)[1]
+ if ret:
+ bb.fatal("User namespaces are not usable by BitBake, possibly due to AppArmor.\n"
+ "See https://discourse.ubuntu.com/t/ubuntu-24-04-lts-noble-numbat-release-notes/39890#unprivileged-user-namespace-restrictions for more information.")
+
+
# Require at least gcc version 8.0
#
# This can be fixed on CentOS-7 with devtoolset-6+
@@ -641,6 +664,7 @@ def check_sanity_version_change(status, d):
status.addresult(check_git_version(d))
status.addresult(check_perl_modules(d))
status.addresult(check_wsl(d))
+ status.addresult(check_userns())
missing = ""