dunglas / frankenphp

🧟 The modern PHP app server
https://frankenphp.dev
MIT License
6.7k stars 220 forks source link

Build Error [Linux PopOs] #850

Closed djamez closed 3 months ago

djamez commented 3 months ago

What happened?

Attempting to build a static Laravel application in Linux PopOS (Ubuntu 22.04 compatible) using the Shell script complains of Extension [hash] not exist!.

EMBED=/data/src/laravel/project ./build-static.sh

Notice from the phpinfo() output that Hash is enabled.

System Info:

OS: Pop!_OS 22.04 LTS x86_64 
Host: 20M9000XUS ThinkPad P52 
Kernel: 6.8.0-76060800daily20240311-generic 
Uptime: 19 days, 7 hours, 7 mins 
Packages: 4055 (dpkg), 1 (pkg), 83 (flatpak), 15 (snap)
Shell: bash 5.1.16 
Resolution: 1920x1080, 1920x1080 
DE: GNOME 
WM: Mutter 
WM Theme: Pop 
Theme: Nordic-Polar-Hitz [GTK2/3] 
Icons: breeze [GTK2/3] 
Terminal: konsole 
Terminal Font: JetBrains Mono 12 
CPU: Intel i7-8850H (12) @ 4.300GHz 
GPU: NVIDIA Quadro P2000 Mobile 
GPU: Intel CoffeeLake-H GT2 [UHD Graphics 630] 
Memory: 34193MiB / 47797MiB 

Please advise how to resolve this issue.

Build Type

Official static build

Worker Mode

No

Operating System

GNU/Linux

CPU Architecture

x86_64

PHP configuration

System  Linux hitz-pad 6.8.0-76060800daily20240311-generic #202403110203~1714077665~22.04~4c8e9a0 SMP PREEMPT_DYNAMIC Thu A x86_64
Build Date  May 13 2024 15:38:09
Build System    Linux
Server API  Built-in HTTP server
Virtual Directory Support   disabled
Configuration File (php.ini) Path   /etc/php/8.3/cli
Loaded Configuration File   /etc/php/8.3/cli/php.ini
Scan this dir for additional .ini files     /etc/php/8.3/cli/conf.d
Additional .ini files parsed    /etc/php/8.3/cli/conf.d/10-mysqlnd.ini, /etc/php/8.3/cli/conf.d/10-opcache.ini, /etc/php/8.3/cli/conf.d/10-pdo.ini, /etc/php/8.3/cli/conf.d/15-xml.ini, /etc/php/8.3/cli/conf.d/20-calendar.ini, /etc/php/8.3/cli/conf.d/20-ctype.ini, /etc/php/8.3/cli/conf.d/20-curl.ini, /etc/php/8.3/cli/conf.d/20-dom.ini, /etc/php/8.3/cli/conf.d/20-exif.ini, /etc/php/8.3/cli/conf.d/20-ffi.ini, /etc/php/8.3/cli/conf.d/20-fileinfo.ini, /etc/php/8.3/cli/conf.d/20-ftp.ini, /etc/php/8.3/cli/conf.d/20-gd.ini, /etc/php/8.3/cli/conf.d/20-gettext.ini, /etc/php/8.3/cli/conf.d/20-iconv.ini, /etc/php/8.3/cli/conf.d/20-mbstring.ini, /etc/php/8.3/cli/conf.d/20-mysqli.ini, /etc/php/8.3/cli/conf.d/20-pdo_mysql.ini, /etc/php/8.3/cli/conf.d/20-pdo_pgsql.ini, /etc/php/8.3/cli/conf.d/20-pdo_sqlite.ini, /etc/php/8.3/cli/conf.d/20-pgsql.ini, /etc/php/8.3/cli/conf.d/20-phar.ini, /etc/php/8.3/cli/conf.d/20-posix.ini, /etc/php/8.3/cli/conf.d/20-readline.ini, /etc/php/8.3/cli/conf.d/20-shmop.ini, /etc/php/8.3/cli/conf.d/20-simplexml.ini, /etc/php/8.3/cli/conf.d/20-soap.ini, /etc/php/8.3/cli/conf.d/20-sockets.ini, /etc/php/8.3/cli/conf.d/20-sqlite3.ini, /etc/php/8.3/cli/conf.d/20-sysvmsg.ini, /etc/php/8.3/cli/conf.d/20-sysvsem.ini, /etc/php/8.3/cli/conf.d/20-sysvshm.ini, /etc/php/8.3/cli/conf.d/20-tokenizer.ini, /etc/php/8.3/cli/conf.d/20-xmlreader.ini, /etc/php/8.3/cli/conf.d/20-xmlwriter.ini, /etc/php/8.3/cli/conf.d/20-xsl.ini, /etc/php/8.3/cli/conf.d/20-zip.ini
PHP API     20230831
PHP Extension   20230831
Zend Extension  420230831
Zend Extension Build    API420230831,NTS
PHP Extension Build     API20230831,NTS
Debug Build     no
Thread Safety   disabled
Zend Signal Handling    enabled
Zend Memory Manager     enabled
Zend Multibyte Support  provided by mbstring
Zend Max Execution Timers   disabled
IPv6 Support    enabled
DTrace Support  disabled
Registered PHP Streams  https, ftps, compress.zlib, php, file, glob, data, http, ftp, phar, zip
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, tls, tlsv1.0, tlsv1.1, tlsv1.2, tlsv1.3
Registered Stream Filters   zlib.*, string.rot13, string.toupper, string.tolower, convert.*, consumed, dechunk, convert.iconv.*

-- ---------

hash
hash support    enabled
Hashing Engines     md2 md4 md5 sha1 sha224 sha256 sha384 sha512/224 sha512/256 sha512 sha3-224 sha3-256 sha3-384 sha3-512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost gost-crypto adler32 crc32 crc32b crc32c fnv132 fnv1a32 fnv164 fnv1a64 joaat murmur3a murmur3c murmur3f xxh32 xxh64 xxh3 xxh128 haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5
MHASH support   Enabled
MHASH API Version   Emulated Support

Relevant log output

Doctor check complete !
+ ./bin/spc download --with-php=8.3 --for-extensions=ctype,dom,fileinfo,filter,hash,iconv,json,libxml,mbstring,openssl,pcre,session,tokenizer --for-libs=bzip2,freetype,libavif,libjpeg,liblz4,libwebp,libzip,brotli --ignore-cache-sources=php-src

In DependencyUtil.php line 169:

  Extension [hash] not exist !  

download [--shallow-clone] [--with-openssl11] [--with-php WITH-PHP] [--clean] [-A|--all] [-U|--custom-url CUSTOM-URL] [-Z|--from-zip FROM-ZIP] [-e|--for-extensions FOR-EXTENSIONS] [-l|--for-libs FOR-LIBS] [--without-suggestions] [--ignore-cache-sources IGNORE-CACHE-SOURCES] [-R|--retry RETRY] [--debug] [--no-motd] [--] <sources>
dunglas commented 3 months ago

This looks similar to #840. Could you try to set the PHP_EXTENSIONS explicitly while we're working on fixing the script, please? cc @crazywhalecc

crazywhalecc commented 3 months ago

@dunglas Core,hash,json,Reflection,SPL,standard should be skipped, is this correct? https://github.com/crazywhalecc/static-php-cli/pull/473

djamez commented 3 months ago

This looks similar to #840. Could you try to set the PHP_EXTENSIONS explicitly while we're working on fixing the script, please? cc @crazywhalecc

Even with PHP_EXTENSIONS:

EMBED=/data/src/laravel/project ./build-static.sh PHP_EXTENSIONS=ctype,curl,dom,fileinfo,filter,hash,mbstring,openssl,pcre,session,pdo,pdo_mysql,pdo_sqlite

...it still fails with the same error. Adding NO_COMPRESS=true does not affect the output either.

crazywhalecc commented 3 months ago

@djamez Remove hash. Hash is an internal extension, it will be enabled whether you use. But the previous spc prohibits passing in any unsupported extensions (including hash).

After https://github.com/crazywhalecc/static-php-cli/pull/473 merged, you can pass hash without any interrupt.

djamez commented 3 months ago

@djamez Remove hash. Hash is an internal extension, it will be enabled whether you use. But the previous spc prohibits passing in any unsupported extensions (including hash).

After crazywhalecc/static-php-cli#473 merged, you can pass hash without any interrupt.

After removing hash (and pcre), the compilation process starts. Progress...

However, towards the tail end of the process, now I have this:

....
go: downloading github.com/mattn/go-colorable v0.1.13
go: downloading github.com/bits-and-blooms/bitset v1.13.0
# github.com/dunglas/frankenphp/caddy/frankenphp
/usr/local/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(zend_extensions.o): in function `zend_load_extension':
/frankenphp/dist/static-php-cli/source/php-src/Zend/zend_extensions.c:33: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(filestat.o): in function `php_get_gid_by_name':
/frankenphp/dist/static-php-cli/source/php-src/ext/standard/filestat.c:288: warning: Using 'getgrnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(fopen_wrappers.o): in function `php_fopen_primary_script':
/frankenphp/dist/static-php-cli/source/php-src/main/fopen_wrappers.c:396: warning: Using 'getpwnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(main.o): in function `php_get_current_user':
/frankenphp/dist/static-php-cli/source/php-src/main/main.c:1480: warning: Using 'getpwuid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(network.o): in function `php_network_getaddresses':
/frankenphp/dist/static-php-cli/source/php-src/main/network.c:198: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libxml2.a(nanohttp.c.o): in function `xmlNanoHTTPConnectHost':
nanohttp.c:(.text+0x53b): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(network.o): in function `gethostname_re':
/frankenphp/dist/static-php-cli/source/php-src/main/network.c:1273: warning: Using 'gethostbyname_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(basic_functions.o): in function `zif_getprotobynumber':
/frankenphp/dist/static-php-cli/source/php-src/ext/standard/basic_functions.c:2291: warning: Using 'getprotobynumber' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(basic_functions.o): in function `zif_getprotobyname':
/frankenphp/dist/static-php-cli/source/php-src/ext/standard/basic_functions.c:2269: warning: Using 'getprotobyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(basic_functions.o): in function `zif_getservbyname':
/frankenphp/dist/static-php-cli/source/php-src/ext/standard/basic_functions.c:2212: warning: Using 'getservbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(basic_functions.o): in function `zif_getservbyport':
/frankenphp/dist/static-php-cli/source/php-src/ext/standard/basic_functions.c:2246: warning: Using 'getservbyport' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(main.o): in function `php_request_startup':
/frankenphp/dist/static-php-cli/source/php-src/main/main.c:1770: undefined reference to `sigsetjmp'
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(main.o): in function `php_request_shutdown':
/frankenphp/dist/static-php-cli/source/php-src/main/main.c:1859: undefined reference to `sigsetjmp'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/main/main.c:1864: undefined reference to `sigsetjmp'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/main/main.c:1869: undefined reference to `sigsetjmp'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/main/main.c:1879: undefined reference to `sigsetjmp'
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(main.o):/frankenphp/dist/static-php-cli/source/php-src/main/main.c:1889: more undefined references to `sigsetjmp' follow
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(zend_strtod.o): in function `zend_strtod':
/frankenphp/dist/static-php-cli/source/php-src/Zend/zend_strtod.c:2777: undefined reference to `__flt_rounds'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/Zend/zend_strtod.c:3420: undefined reference to `__flt_rounds'
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(mod_user.o): in function `ps_open_user':
/frankenphp/dist/static-php-cli/source/php-src/ext/session/mod_user.c:93: undefined reference to `sigsetjmp'
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(mod_user.o): in function `ps_close_user':
/frankenphp/dist/static-php-cli/source/php-src/ext/session/mod_user.c:123: undefined reference to `sigsetjmp'
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(dns.o): in function `php_parserr':
/frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:465: undefined reference to `ns_get16'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:466: undefined reference to `ns_get16'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:467: undefined reference to `ns_get32'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:468: undefined reference to `ns_get16'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:509: undefined reference to `ns_get16'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:619: undefined reference to `ns_get32'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:621: undefined reference to `ns_get32'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:623: undefined reference to `ns_get32'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:625: undefined reference to `ns_get32'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:627: undefined reference to `ns_get32'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:634: undefined reference to `ns_get16'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:704: undefined reference to `ns_get16'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:744: undefined reference to `ns_get16'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:746: undefined reference to `ns_get16'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:748: undefined reference to `ns_get16'
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(dns.o):/frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:760: more undefined references to `ns_get16' follow
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(dns.o): in function `zif_dns_check_record':
/frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:423: undefined reference to `res_init'
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(dns.o): in function `zif_dns_get_record':
/frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:955: undefined reference to `res_init'
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(dns.o): in function `zif_dns_get_mx':
/frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:1096: undefined reference to `res_init'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:1120: undefined reference to `ns_get16'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:1122: undefined reference to `ns_get16'
/usr/bin/ld: /frankenphp/dist/static-php-cli/source/php-src/ext/standard/dns.c:1127: undefined reference to `ns_get16'
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(mod_user_class.o): in function `zim_SessionHandler_open':
/frankenphp/dist/static-php-cli/source/php-src/ext/session/mod_user_class.c:50: undefined reference to `sigsetjmp'
/usr/bin/ld: /frankenphp/dist/static-php-cli/buildroot/lib/libphp.a(mod_user_class.o): in function `zim_SessionHandler_close':
/frankenphp/dist/static-php-cli/source/php-src/ext/session/mod_user_class.c:78: undefined reference to `sigsetjmp'
collect2: error: ld returned 1 exit status
crazywhalecc commented 3 months ago

Seems you are linking wrong libc (glibc). static-php-cli and frankenphp need musl-libc to link, but I'm not sure build-static.sh and frankenphp workflow may be linked in a wrong libc. cc @dunglas

dunglas commented 3 months ago

We strongly recommend using the Docker image we provide to run the script. It's not entirely mandatory, but if you don't you need to install musl etc by yourself.