From: Yang Xu <[email protected]>

Build openssl with shared state cache may meet problem under below conditions:
1. sstate cache generated by another user on same machine
2. inappropriate PERL5LIB setting
3. openssl build from scratch but perl using cache

When build openssl from scratch with perl using cache, it will be aborted at 
do_configure stage,
error message is like "Can't locate Text/Template.pm at /home/A/[build 
path]/[perl module path]/Text/Template.pm : Permission Denied".

The simplified environment and scenarios is:
1) User A, his home directory is /home/A, generate one sstate cache under 
/home/A.
2) This sstate cache moved to /home/Public, act as shared sstate cache
3) User B, his home directory is /home/B, using sstate cache in /home/Public 
and build yocto.
4) User B has no permission to access /home/A.

Some information about perl behavior:
1. perl will hardcode buildtime path in @INC in binary (module search 
directories)
2. when "use MODULE", perl will search @INC from begin to end until it found 
MODULE.
3. when perl search module through directories in @INC
     3.1 if [directory]/MODULE.pm is not exist, search in next directory in 
@INC.
     3.2 if [directory]/MODULE.pm has no permission to access, perl will ABORT.

While build openssl from from scratch with perl using cache, @INC directory 
order is:
1.<PERL5LIB>
2.<default module path in ${WORKDIR}/recipe-sysroot-native>
3.<hardcode module path in binary, which include /home/A/XXX/YYY>
4.<module found by FindBin, module Text-Template can be found by it>

Without appropriate PERL5LIB setting, perl can't find Text/Template.pm in
<PERL5LIB>, and it also can't find it in <default module path>.

Then perl search Text/Template.pm in <hardcode module path in binary>,
*if /home/A is not existed, perl will search in <module found by FindBin> and 
found Text/Template.pm finally. (OK case)
*if /home/A is existed but has no permission access, perl will ABORT 
immediately. (NG case)

So this patch does some fixup for NG case:
1) set appropriate PERL5LIB to make perl can found Text/Tempalte.pm at highest 
priority folder <PERL5LIB>.
2) add other perl module directories needed by openssl build in PERL5LIB
3) set PERL5LIB as package environment variable

Signed-off-by: Yang Xu <[email protected]>
---
 meta/recipes-connectivity/openssl/openssl_3.1.0.bb | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/meta/recipes-connectivity/openssl/openssl_3.1.0.bb 
b/meta/recipes-connectivity/openssl/openssl_3.1.0.bb
index b319c66044..613451f265 100644
--- a/meta/recipes-connectivity/openssl/openssl_3.1.0.bb
+++ b/meta/recipes-connectivity/openssl/openssl_3.1.0.bb
@@ -54,6 +54,10 @@ CFLAGS:append:class-nativesdk = " -DOPENSSLDIR=/not/builtin 
-DENGINESDIR=/not/bu
 # The default is to trust upstream choices.
 DEPRECATED_CRYPTO_FLAGS ?= ""
 
+# Set package level PERL5LIB
+PERL5LIB = "${S}/external/perl/Text-Template-1.56/lib/:${S}/crypto/perlasm"
+export PERL5LIB
+
 do_configure () {
        # When we upgrade glibc but not uninative we see obtuse failures in 
openssl. Make
        # the issue really clear that perl isn't functional due to symbol 
mismatch issues.
@@ -138,7 +142,7 @@ do_configure () {
        fi
        # WARNING: do not set compiler/linker flags (-I/-D etc.) in 
EXTRA_OECONF, as they will fully replace the
        # environment variables set by bitbake. Adjust the environment 
variables instead.
-       HASHBANGPERL="/usr/bin/env perl" PERL=perl 
PERL5LIB="${S}/external/perl/Text-Template-1.46/lib/" \
+       HASHBANGPERL="/usr/bin/env perl" PERL=perl \
        perl ${S}/Configure ${EXTRA_OECONF} ${PACKAGECONFIG_CONFARGS} 
${DEPRECATED_CRYPTO_FLAGS} --prefix=$useprefix --openssldir=${libdir}/ssl-3 
--libdir=${libdir} $target
        perl ${B}/configdata.pm --dump
 }
-- 
2.25.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#180264): 
https://lists.openembedded.org/g/openembedded-core/message/180264
Mute This Topic: https://lists.openembedded.org/mt/98403807/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to