From 35297720734704e03be6856454ce3dcf16ca9b62 Mon Sep 17 00:00:00 2001 From: Michael Gooden Date: Thu, 9 Jan 2025 19:46:15 +0200 Subject: [PATCH] Add flag to compile Swoole 6.x without io_uring support (#1044) --- README.md | 1 + install-php-extensions | 45 ++++++++++++++++++++++++++++-------------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index fada061..203388e 100644 --- a/README.md +++ b/README.md @@ -449,6 +449,7 @@ Here's the list of all the supported environment variables: | newrelic | `IPE_NEWRELIC_DAEMON=1` | Install the NewRelic daemon | | newrelic | `IPE_NEWRELIC_KEEPLOG=1` | Keep the log files of NewRelic setup (`/tmp/nrinstall-….tar`) | | newrelic | `NR_INSTALL_KEY` | Your New Relic license key | +| swoole | `IPE_SWOOLE_WITHOUT_IOURING=1` | The io_uring kernel functionality is considered unsafe by security experts (see [here](https://security.googleblog.com/2023/06/learnings-from-kctf-vrps-42-linux.html) and [here](https://i.blackhat.com/BH-US-23/Presentations/US-23-Lin-bad_io_uring.pdf)). By default Swoole 6 and later is configured with io_uring support, use this environment variable to skip configuring io_uring | ## Special requirements diff --git a/install-php-extensions b/install-php-extensions index e70c619..7888fe2 100755 --- a/install-php-extensions +++ b/install-php-extensions @@ -1435,12 +1435,17 @@ buildRequiredPackageLists() { buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile sqlite-dev zstd-dev" fi fi - # iouring support in swoole 6 requires liburing 2.5+: available since Alpine 3.19 - # but with Alpine 3.19 we have a "invalid use of incomplete type 'const struct statx'" error - if test $DISTRO_MAJMIN_VERSION -ge 320; then - buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liburing" - buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liburing-dev" - fi + case "${IPE_SWOOLE_WITHOUT_IOURING:-}" in + 1 | y* | Y*) ;; + *) + # iouring support in swoole 6 requires liburing 2.5+: available since Alpine 3.19 + # but with Alpine 3.19 we have a "invalid use of incomplete type 'const struct statx'" error + if test $DISTRO_MAJMIN_VERSION -ge 320; then + buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent liburing" + buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile liburing-dev" + fi + ;; + esac ;; swoole@debian) buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls libpq5" @@ -4099,21 +4104,31 @@ installRemoteModule() { # we need sqlite3 >= 3.7.7 installRemoteModule_sqlite=no fi - # iouring support in swoole 6 requires liburing 2.5+: available since Alpine 3.19 - # but with Alpine 3.19 we have a "invalid use of incomplete type 'const struct statx'" error - if test $DISTRO_MAJMIN_VERSION -ge 320; then - installRemoteModule_iouring=yes - fi + case "${IPE_SWOOLE_WITHOUT_IOURING:-}" in + 1 | y* | Y*) ;; + *) + # iouring support in swoole 6 requires liburing 2.5+: available since Alpine 3.19 + # but with Alpine 3.19 we have a "invalid use of incomplete type 'const struct statx'" error + if test $DISTRO_MAJMIN_VERSION -ge 320; then + installRemoteModule_iouring=yes + fi + ;; + esac ;; debian) if test $DISTRO_MAJMIN_VERSION -lt 1200; then # we need sqlite3 >= 3.7.7 installRemoteModule_sqlite=no fi - if test $DISTRO_VERSION_NUMBER -ge 13; then - # iouring support in swoole 6 requires liburing 2.5+: available since Debian Trixie (13) - installRemoteModule_iouring=yes - fi + case "${IPE_SWOOLE_WITHOUT_IOURING:-}" in + 1 | y* | Y*) ;; + *) + if test $DISTRO_VERSION_NUMBER -ge 13; then + # iouring support in swoole 6 requires liburing 2.5+: available since Debian Trixie (13) + installRemoteModule_iouring=yes + fi + ;; + esac ;; esac installRemoteModule_zstd=yes