On 1/20/22 9:31 PM, Quentin Schulz wrote:
Hi Robert,

On 1/20/22 08:09, Robert Yang wrote:
The NIS or icecc can't work when task network is dissable, add BB_TASK_NETWORK
to enable network globally for such exceptions.

Note, enable nscd on the build machine might be a solution, but that isn't
reliable since it depends on whether the network function has been cached or
not.

Signed-off-by: Robert Yang <[email protected]>
---
  meta/classes/icecc.bbclass |  2 ++
  meta/conf/bitbake.conf     |  3 +++
  meta/lib/oe/utils.py       | 15 +++++++++++++++
  3 files changed, 20 insertions(+)

diff --git a/meta/classes/icecc.bbclass b/meta/classes/icecc.bbclass
index 794e9930ad9..c39c86458a4 100644
--- a/meta/classes/icecc.bbclass
+++ b/meta/classes/icecc.bbclass
@@ -41,6 +41,8 @@ ICECC_ENV_EXEC ?= "${STAGING_BINDIR_NATIVE}/icecc-create-env"
  HOSTTOOLS_NONFATAL += "icecc patchelf"
+BB_TASK_NETWORK ? = "1"
+
  # This version can be incremented when changes are made to the environment 
that
  # invalidate the version on the compile nodes. Changing it will cause a new
  # environment to be created.
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index fba99e8f0cd..bf5bcd55519 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -946,3 +946,6 @@ MULTILIB_VARIANTS ??= ""
  # what it would be anyway if the signature generator (e.g. OEEquivHash) 
doesn't
  # support unihashes.
  BB_UNIHASH ?= "${BB_TASKHASH}"
+
+# Enable task network for remote user such as NIS.
+BB_TASK_NETWORK ??= "${@['1', '0'][oe.utils.is_local_uid()]}"
diff --git a/meta/lib/oe/utils.py b/meta/lib/oe/utils.py
index 136650e6f74..c21f034aafc 100644
--- a/meta/lib/oe/utils.py
+++ b/meta/lib/oe/utils.py
@@ -595,3 +595,18 @@ def directory_size(root, blocksize=4096):
          total += sum(roundup(getsize(os.path.join(root, name))) for name in files)
          total += roundup(getsize(root))
      return total
+
+def is_local_uid(uid=''):
+    """
+    Check whether uid is a local one or not.
+    Can't use pwd module since it gets all UIDs, not local ones only.
+    """
+    if not uid:
+        uid = os.getuid()
+    local_uids = set()
+    with open('/etc/passwd', 'r') as f:
+        for line in f.readlines():
+            if not ':' in line:
+                continue
+            local_uids.add(line.split(':')[2])
+    return uid in local_uids


You can return ASAP instead of iterating over all users:

with open('/etc/passwd', 'r') as f:
     for line in f.readlines():
         if not ':' in line:
             continue
         if line.split(':')[2] == uid:
             return True
return False

Yes, you're right, I renamed the func from get_all_local_uids to is_local_uid(), and forgot to change the logical.


Otherwise, since we explicitly add icecc functions to existing tasks, can't you just add [network] = "1" to all  those tasks in icecc.bbclass? e.g. do_configure[network] = "1" ?

The icecc issue is reported by Jose, I'm not sure whether that works for him or 
not.


Also, even if icecc is globally inherited and enabled, recipes can still disable its use on a per-recipe basis in which case I don't think we should have the network enabled?

The network is disabled by default unless set task[network] = "1", and
BB_TASK_NETWORK is for preventing the disable, so you can't disable network
per-recipe basis, otherwise, it won't work for the case like NIS.

Maybe a better name should be FORBIDDEN_DISABLE_TASK_NETWORK.

// Robert


I can't comment on NIS support. >
Cheers,
Quentin
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#160811): 
https://lists.openembedded.org/g/openembedded-core/message/160811
Mute This Topic: https://lists.openembedded.org/mt/88554465/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to