mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
sanity: check for working user namespaces
If user namespaces are not available (typically because AppArmor is blocking them), alert the user. We consider network isolation sufficiently important that this is a fatal error, and the user will need to configure AppArmor to allow bitbake to create a user namespace. [ YOCTO #15592 ] (From OE-Core rev: 3577ceca39c7c3be81563de9ccf06a805f61d3ca) Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit b6af956fe6e876957a49d4abf425e8c789bf0459) Signed-off-by: Steve Sakoman <steve@sakoman.com>
This commit is contained in:
committed by
Steve Sakoman
parent
6ae367c861
commit
61ec07c6cf
@@ -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 = ""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user