diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 70ee012..f5edaf8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ jobs: - uses: actions/checkout@v3 - name: native ubuntu install swoole run: | - sudo sh .github/workflows/init.sh + sudo sh init.sh sudo bash install.sh --install-php 1 - name: show info run: | @@ -34,7 +34,7 @@ jobs: - alpine:3.18 - rockylinux:9.3 - fedora:41 - # - archlinux:latest + - archlinux:latest - php:8.3-zts-alpine3.20 - php:8.2-zts-alpine3.20 - php:8.1-zts-alpine3.20 @@ -50,7 +50,7 @@ jobs: image: ${{ matrix.container_image }} options: -v ${{ github.workspace }}:/work -w /work run: | - sh .github/workflows/init.sh + sh init.sh bash install.sh --install-php 1 macos: diff --git a/.github/workflows/init.sh b/.github/workflows/init.sh deleted file mode 100644 index dbde4cc..0000000 --- a/.github/workflows/init.sh +++ /dev/null @@ -1,19 +0,0 @@ -OS_RELEASE=$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '\n' | tr -d '\"') -case "$OS_RELEASE" in -'rocky' | 'almalinux' | 'alinux' | 'anolis' | 'fedora') # | 'amzn' | 'ol' | 'openEuler' | 'rhel' | 'centos' # 未测试 - yum update -y - yum install -y which - ;; -'ubuntu') - sed -i.bak "s@security.ubuntu.com@azure.archive.ubuntu.com@g" /etc/apt/sources.list - sed -i.bak "s@archive.ubuntu.com@azure.archive.ubuntu.com@g" /etc/apt/sources.list - ;; -'alpine') - apk update - apk add bash - ;; -'arch') - pacman -Syyu --noconfirm - pacman -Sy --noconfirm which - ;; -esac diff --git a/README.md b/README.md index 15e8399..8a3a0f7 100644 --- a/README.md +++ b/README.md @@ -31,21 +31,34 @@ curl -fsSL https://gitee.com/jingjingxyk/swoole-install/raw/main/install.sh | b ``` +## rhel 系 、alpine、archlinux 解决 `which` command no found + +```bash + +curl -fsSL https://github.com/swoole/installers/blob/main/init.sh?raw=true | bash + +# mirror + +curl -fsSL https://gitee.com/jingjingxyk/swoole-install/raw/main/init.sh | bash + +``` + ## 支持的操作系统 -| 操作系统 | 支持情况 | -|-------------------------------------------------|------| -| [debian](https://www.debian.org/) | ✅ | -| [ubuntu](https://ubuntu.com/) | ✅ | -| [rockylinux](https://rockylinux.org/) | ✅ | -| [almalinux](https://almalinux.org/) | ✅ | -| [alinux](https://www.aliyun.com/product/alinux) | ✅ | -| [anolis](https://openanolis.cn/anolisos) | ✅ | -| [fedora ](https://fedoraproject.org/) | ✅ | -| [alpine](https://www.alpinelinux.org/) | ✅ | -| [kali](https://www.kali.org/) | ✅ | -| [macos](https://www.apple.com/) | ✅ | -| wsl | | -| FreeBSD 13 | | -| [OpenEuler](https://www.openeuler.org/) | ✅ | -| Huawei Cloud EulerOS | ✅ | +| 操作系统 | 支持情况 | +|--------------------------------------------------------------|------| +| [debian](https://www.debian.org/) | ✅ | +| [ubuntu](https://ubuntu.com/) | ✅ | +| [rockylinux](https://rockylinux.org/) | ✅ | +| [almalinux](https://almalinux.org/) | ✅ | +| [Alibaba cloud liunx](https://www.aliyun.com/product/alinux) | ✅ | +| [anolis](https://openanolis.cn/anolisos) | ✅ | +| [fedora ](https://fedoraproject.org/) | ✅ | +| [alpine](https://www.alpinelinux.org/) | ✅ | +| [kali](https://www.kali.org/) | ✅ | +| [macos](https://www.apple.com/) | ✅ | +| wsl | | +| FreeBSD 13 | | +| [OpenEuler](https://www.openeuler.org/) | ✅ | +| Huawei Cloud EulerOS | ✅ | +| [archlinux](https://archlinux.org/) | ✅ | diff --git a/docs/FAQ.md b/docs/FAQ.md index f055111..51aebb3 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -29,7 +29,7 @@ php --ini | grep ".ini files" PHP_INI_SCAN_DIR=$(php --ini | grep "Scan for additional .ini files in:" | awk -F 'in:' '{ print $2 }' | xargs) if [ -n "${PHP_INI_SCAN_DIR}" ] && [ -d "${PHP_INI_SCAN_DIR}" ]; then - SUDO='' + local SUDO='' if [ ! -w "${PHP_INI_SCAN_DIR}" ] ; then SUDO='sudo' fi diff --git a/init.sh b/init.sh new file mode 100644 index 0000000..b7ee4da --- /dev/null +++ b/init.sh @@ -0,0 +1,24 @@ +OS=$(uname -s) +if [ "${OS}" == 'Linux' ]; then + OS_RELEASE=$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '\n' | tr -d '\"') + case "$OS_RELEASE" in + 'rocky' | 'almalinux' | 'alinux' | 'anolis' | 'fedora' | 'openEuler' | 'hce') # | 'amzn' | 'ol' | 'rhel' | 'centos' # 未测试 + yum update -y + yum install -y which + ;; + 'ubuntu') + if [ "$GITHUB_ACTIONS" = "true" ]; then + sed -i.bak "s@security.ubuntu.com@azure.archive.ubuntu.com@g" /etc/apt/sources.list + sed -i.bak "s@archive.ubuntu.com@azure.archive.ubuntu.com@g" /etc/apt/sources.list + fi + ;; + 'alpine') + apk update + apk add bash + ;; + 'arch') + pacman -Syyu --noconfirm + pacman -Sy --noconfirm which + ;; + esac +fi diff --git a/install.sh b/install.sh index c4d6d2c..6582dbd 100644 --- a/install.sh +++ b/install.sh @@ -17,13 +17,19 @@ fi CPU_LOGICAL_PROCESSORS=4 MIRROR='' # swoole 源码镜像源 ENABLE_TEST=0 -VERSION_LATEST=0 # 保持源码最新,每次执行都需要下载源码 -X_SWOOLE_VERSION='' # 指定 swoole 版本 -SWOOLE_VERSION='master' # 默认 swoole 版本 -SWOOLE_DEBUG=0 # 启用 swoole debug 编译参数 -INSTALL_PHP=0 # 0 未知,待检测 、1 系统已安装PHP、2 系统未安装PHP -FORCE_INSTALL_PHP=0 # 0 未设置、3 要求安装PHP -PHP_CONFIG='' # php-config 位置 +VERSION_LATEST=0 # 保持源码最新,每次执行都需要下载源码 +SWOOLE_SRC='https://github.com/swoole/swoole-src.git' # swoole 源码地址 +X_SWOOLE_VERSION='' # 指定 swoole 版本 +SWOOLE_VERSION='master' # 默认 swoole 版本 +SWOOLE_DEBUG=0 # 启用 swoole debug 编译参数 +INSTALL_PHP=0 # 0 未知,待检测 、1 系统已安装PHP、2 系统未安装PHP +FORCE_INSTALL_PHP=0 # 0 未设置、3 要求安装PHP 、 4 执行安装 =》 安装以后状态 1 成功安装PHP , 2 未成功安装PHP + +PHP_SRC='https://github.com/php/php-src.git' # php 源码地址 +PHP='' # php 位置 +PHPIZE='' # phpize 位置 +PHP_CONFIG='' # php-config 位置 +PHP_INI_SCAN_DIR='' # php 扫描配置目录 while [ $# -gt 0 ]; do case "$1" in @@ -57,33 +63,144 @@ while [ $# -gt 0 ]; do shift $(($# > 0 ? 1 : 0)) done -check_environment() { - PHP=$(which php) - PHPIZE=$(which phpize) - PHP_CONFIG=$(which php-config) +case "$MIRROR" in +china) + SWOOLE_SRC="https://gitee.com/swoole/swoole.git" + PHP_SRC="https://gitee.com/mirrors/php-src.git" + ;; +*) ;; + +esac + +check_php() { + PHP="$(which php)" + PHPIZE="$(which phpize)" + PHP_CONFIG=""$(which php-config)"" if test -x "${PHP}" -a -x "${PHPIZE}" -a -x "${PHP_CONFIG}"; then ${PHP} -v ${PHPIZE} --help ${PHP_CONFIG} --help - + PHP_INI_SCAN_DIR=$(php --ini | grep "Scan for additional .ini files in:" | awk -F 'in:' '{ print $2 }' | xargs) INSTALL_PHP=1 + if test ${FORCE_INSTALL_PHP} -eq 4; then + FORCE_INSTALL_PHP=1 + fi else INSTALL_PHP=2 - # shellcheck disable=SC2016 - test -x "${PHP}" || echo 'no found php IN $PATH ' - # shellcheck disable=SC2016 - test -x "${PHPIZE}" || echo 'no found phpize IN $PATH ' - # shellcheck disable=SC2016 - test -x "${PHP_CONFIG}" || echo 'no found php-config IN $PATH ' - if test ${FORCE_INSTALL_PHP} -ne 3; then - # 未发现 php ,也未要求安装 PHP + if test ${FORCE_INSTALL_PHP} -eq 4; then + FORCE_INSTALL_PHP=2 + fi + fi +} + +install_system_php() { + case "$OS" in + Darwin | darwin) + export HOMEBREW_NO_ANALYTICS=1 + export HOMEBREW_NO_AUTO_UPDATE=1 + export HOMEBREW_INSTALL_FROM_API=1 + brew install php + ;; + Linux) + OS_RELEASE="$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '\n' | tr -d '\"')" + case "$OS_RELEASE" in + 'rocky' | 'almalinux' | 'alinux' | 'anolis' | 'fedora' | 'openEuler' | 'hce') # | 'amzn' | 'ol' | 'rhel' | 'centos' # 未测试 + yum update -y + yum install -y php-cli php-devel php-curl php-intl + { yum install -y php-pear; } || { echo $?; } + { yum install -y php-json; } || { echo $?; } + yum install -y php-mbstring php-tokenizer php-xml + yum install -y php-pdo php-mysqlnd + ;; + 'debian' | 'ubuntu' | 'kali') # 'raspbian' | 'deeping'| 'uos' | 'kylin' + export DEBIAN_FRONTEND=noninteractive + export TZ="Etc/UTC" + ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ >/etc/timezone + apt update -y + apt install -y php-cli php-pear php-dev php-curl php-intl + apt install -y php-mbstring php-tokenizer php-xml + apt install -y php-mysqlnd php-pgsql php-sqlite3 php-redis php-mongodb + ;; + 'alpine') + apk update + apk add php82-cli php82-dev + apk add php82-iconv php82-mbstring php82-phar php82-openssl + apk add php82-posix php82-tokenizer php82-intl + apk add php82-dom php82-xmlwriter php82-xml php82-simplexml + apk add php82-pdo php82-sockets php82-curl php82-mysqlnd php82-pgsql php82-sqlite3 + apk add php82-redis php82-mongodb + + php82 -v + php82 --ini + php82 --ini | grep ".ini files" + + ln -sf /usr/bin/php82 /usr/bin/php + ln -sf /usr/bin/phpize82 /usr/bin/phpize + ln -sf /usr/bin/php-config82 /usr/bin/php-config + + ;; + 'arch') + pacman -Sy --noconfirm php php-sqlite + ;; + esac + ;; + FreeBSD) + if [ ! -f /etc/os-release ]; then + echo 'support minimal version FreeBSD 13' exit 0 fi + env ASSUME_ALWAYS_YES=YES + pkg install php83-8.3.6 php83-curl php83-pdo php83-sockets php83-phar + pkg install php83-iconv php83-gmp php83-intl php83-mbstring + pkg install php83-pgsql php83-readline php83-sqlite3 php83-sodium + pkg install php83-tokenizer php83-zip php83-xml php83-mysqli php83-xml php83-simplexml + + ;; + *) + case "$(uname -r)" in + *microsoft* | *Microsoft*) + # WSL + ;; + esac + ;; + esac + check_php + +} + +configure_environment() { + check_php + # 系统未安装PHP + if test ${INSTALL_PHP} -eq 2; then + # 要求安装PHP + if test ${FORCE_INSTALL_PHP} -eq 3; then + FORCE_INSTALL_PHP=4 + install_system_php + if test ${FORCE_INSTALL_PHP} -eq 1; then + echo 'INSTALL PHP SUCCESS ' + else + echo 'no found php phpize php-config in $PATH' + echo 'please reinstall PHP or link php phpize php-config' + exit 0 + fi + else + # shellcheck disable=SC2016 + test -x "${PHP}" || echo 'no found php IN $PATH ' + # shellcheck disable=SC2016 + test -x "${PHPIZE}" || echo 'no found phpize IN $PATH ' + # shellcheck disable=SC2016 + test -x "${PHP_CONFIG}" || echo 'no found php-config IN $PATH ' + if test ${FORCE_INSTALL_PHP} -ne 3; then + # 未发现 php ,也未要求安装 PHP + exit 0 + fi + fi fi + } -install_swoole_dependencies() { +install_swoole_dependent_library() { case "$OS" in Darwin | darwin) export HOMEBREW_NO_ANALYTICS=1 @@ -94,7 +211,7 @@ install_swoole_dependencies() { brew install c-ares libpq unixodbc brotli curl pcre2 ;; Linux) - OS_RELEASE=$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '\n' | tr -d '\"') + OS_RELEASE="$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '\n' | tr -d '\"')" case "$OS_RELEASE" in 'rocky' | 'almalinux' | 'alinux' | 'anolis' | 'fedora' | 'openEuler' | 'hce') # | 'amzn' | 'ol' | 'rhel' | 'centos' # 未测试 yum update -y @@ -150,85 +267,78 @@ install_swoole_dependencies() { esac } -install_php() { - case "$OS" in - Darwin | darwin) - export HOMEBREW_NO_ANALYTICS=1 - export HOMEBREW_NO_AUTO_UPDATE=1 - export HOMEBREW_INSTALL_FROM_API=1 - brew install php - ;; - Linux) - OS_RELEASE=$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '\n' | tr -d '\"') - case "$OS_RELEASE" in - 'rocky' | 'almalinux' | 'alinux' | 'anolis' | 'fedora' | 'openEuler' | 'hce') # | 'amzn' | 'ol' | 'rhel' | 'centos' # 未测试 - yum update -y - yum install -y php-cli php-devel php-curl php-intl - { yum install -y php-pear; } || { echo $?; } - { yum install -y php-json; } || { echo $?; } - yum install -y php-mbstring php-tokenizer php-xml - yum install -y php-pdo php-mysqlnd - ;; - 'debian' | 'ubuntu' | 'kali') # 'raspbian' | 'deeping'| 'uos' | 'kylin' - export DEBIAN_FRONTEND=noninteractive - export TZ="Etc/UTC" - ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ >/etc/timezone - apt update -y - apt install -y php-cli php-pear php-dev php-curl php-intl - apt install -y php-mbstring php-tokenizer php-xml - apt install -y php-mysqlnd php-pgsql php-sqlite3 php-redis php-mongodb - ;; - 'alpine') - apk update - apk add php82-cli php82-dev - apk add php82-iconv php82-mbstring php82-phar php82-openssl - apk add php82-posix php82-tokenizer php82-intl - apk add php82-dom php82-xmlwriter php82-xml php82-simplexml - apk add php82-pdo php82-sockets php82-curl php82-mysqlnd php82-pgsql php82-sqlite3 - apk add php82-redis php82-mongodb - - php82 -v - php82 --ini - php82 --ini | grep ".ini files" +install_swoole_dependent_ext() { + # swoole 依赖 openssl 、curl、 sockets、 pdo 扩展 + local EXTENSION_OPENSSL_EXISTS=0 + local EXTENSION_CURL_EXISTS=0 + local EXTENSION_SOCKETS_EXISTS=0 + local EXTENSION_MYSQLND_EXISTS=0 + local EXTENSION_PDO_EXISTS=0 + + php --ri openssl >/dev/null && EXTENSION_OPENSSL_EXISTS=1 + php --ri curl >/dev/null && EXTENSION_CURL_EXISTS=1 + php --ri sockets >/dev/null && EXTENSION_SOCKETS_EXISTS=1 + php --ri mysqlnd >/dev/null && EXTENSION_MYSQLND_EXISTS=1 + php --ri pdo >/dev/null && EXTENSION_PDO_EXISTS=1 + + # shellcheck disable=SC2046 + if test -f /.dockerenv -a -x "$(which docker-php-source)" -a -x "$(which docker-php-ext-configure)" -a -x "$(which docker-php-ext-enable)"; then + # php offical 容器中 启用被 swoole 依赖的扩展 + # 准备编译环境 + docker-php-source extract + + test ${EXTENSION_OPENSSL_EXISTS} -eq 0 && docker-php-ext-configure openssl && docker-php-ext-install openssl && docker-php-ext-enable openssl + test ${EXTENSION_CURL_EXISTS} -eq 0 && docker-php-ext-configure curl && docker-php-ext-install curl && docker-php-ext-enable curl + test ${EXTENSION_SOCKETS_EXISTS} -eq 0 && docker-php-ext-configure sockets && docker-php-ext-install sockets && docker-php-ext-enable sockets + test ${EXTENSION_MYSQLND_EXISTS} -eq 0 && docker-php-ext-configure mysqlnd && docker-php-ext-install mysqlnd && docker-php-ext-enable mysqlnd + test ${EXTENSION_PDO_EXISTS} -eq 0 && docker-php-ext-configure pdo && docker-php-ext-install pdo && docker-php-ext-enable pdo + + docker-php-source delete + else + if [ "$OS" == 'Linux' ]; then + # arch 系统下 php 的 socket 扩展 需要源码编译启用 + # shellcheck disable=SC2155 + local OS_RELEASE="$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '\n' | tr -d '\"')" + if [ "${OS_RELEASE}" == 'arch' ]; then + mkdir -p /tmp/build + # shellcheck disable=SC2155 + local PHP_TMP_VERSION="$(php-config --version)" + local PHP_TMP_DIR=/tmp/build/php-src-${PHP_TMP_VERSION} + git clone -b "php-${PHP_TMP_VERSION}" --depth=1 ${PHP_SRC} ${PHP_TMP_DIR} + # shellcheck disable=SC2164 + cd ${PHP_TMP_DIR}/ext/sockets + phpize + ./configure --with-php-config="${PHP_CONFIG}" + make install + + if [ -n "${PHP_INI_SCAN_DIR}" ] && [ -d "${PHP_INI_SCAN_DIR}" ]; then + + local SOCKETS_INI_FILE=${PHP_INI_SCAN_DIR}/10-sockets.ini + tee ${SOCKETS_INI_FILE} </dev/null && EXTENSION_SOCKETS_EXISTS=1 + fi + fi - ;; - 'arch') - pacman -Sy --noconfirm php php-sqlite - ;; - esac - ;; - FreeBSD) - if [ ! -f /etc/os-release ]; then - echo 'support minimal version FreeBSD 13' + local MESSAGES=' please manual enable extension : ' + local SUM=0 + test ${EXTENSION_OPENSSL_EXISTS} -eq 0 && MESSAGES="${MESSAGES} openssl" && ((SUM++)) + test ${EXTENSION_CURL_EXISTS} -eq 0 && MESSAGES="${MESSAGES} curl" && ((SUM++)) + test ${EXTENSION_SOCKETS_EXISTS} -eq 0 && MESSAGES="${MESSAGES} sockets" && ((SUM++)) + test ${EXTENSION_MYSQLND_EXISTS} -eq 0 && MESSAGES="${MESSAGES} mysqlnd " && ((SUM++)) + test ${EXTENSION_PDO_EXISTS} -eq 0 && MESSAGES="${MESSAGES} pdo " && ((SUM++)) + if test $SUM -gt 0; then + echo $MESSAGES exit 0 fi - env ASSUME_ALWAYS_YES=YES - pkg install php83-8.3.6 php83-curl php83-pdo php83-sockets php83-phar - pkg install php83-iconv php83-gmp php83-intl php83-mbstring - pkg install php83-pgsql php83-readline php83-sqlite3 php83-sodium - pkg install php83-tokenizer php83-zip php83-xml php83-mysqli php83-xml php83-simplexml - - ;; - *) - case "$(uname -r)" in - *microsoft* | *Microsoft*) - # WSL - ;; - esac - ;; - esac + fi - which php - which phpize - which php-config - php-config --help - PHP=$(which php) - PHPIZE=$(which phpize) - PHP_CONFIG=$(which php-config) } install_swoole() { @@ -275,26 +385,20 @@ install_swoole() { # 保持源码最新 test $VERSION_LATEST -eq 1 && test -d swoole-src && rm -rf swoole-src - - case "$MIRROR" in - china) - test -d swoole-src || git clone -b $SWOOLE_VERSION --single-branch --depth=1 https://gitee.com/swoole/swoole.git swoole-src - ;; - *) - test -d swoole-src || git clone -b $SWOOLE_VERSION --single-branch --depth=1 https://github.com/swoole/swoole-src.git - ;; - esac - if [ $? -ne 0 ]; then - echo $? - exit 3 + # 执行下载 swoole 源码 + if test ! -d swoole-src; then + git clone -b $SWOOLE_VERSION --single-branch --depth=1 ${SWOOLE_SRC} swoole-src + if [ $? -ne 0 ]; then + echo $? + exit 3 + fi + echo $SWOOLE_VERSION >swoole-src/x-swoole-version fi - echo $SWOOLE_VERSION >swoole-src/x-swoole-version - - SWOOLE_ODBC_OPTIONS="" - SWOOLE_IO_URING='' - SWOOLE_DEBUG_OPTIONS='' - SWOOLE_THREAD_OPTION='' + local SWOOLE_ODBC_OPTIONS="" + local SWOOLE_IO_URING='' + local SWOOLE_DEBUG_OPTIONS='' + local SWOOLE_THREAD_OPTION='' if [ $SWOOLE_DEBUG -eq 1 ]; then SWOOLE_DEBUG_OPTIONS=' --enable-debug --enable-debug-log --enable-trace-log ' @@ -327,7 +431,7 @@ install_swoole() { ;; Linux) CPU_LOGICAL_PROCESSORS=$(grep "processor" /proc/cpuinfo | sort -u | wc -l) - OS_RELEASE=$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '\n' | tr -d '\"') + OS_RELEASE="$(awk -F= '/^ID=/{print $2}' /etc/os-release | tr -d '\n' | tr -d '\"')" case "$OS_RELEASE" in 'rocky' | 'almalinux' | 'alinux' | 'anolis' | 'fedora' | 'openEuler' | 'hce') # | 'amzn' | 'ol' | 'rhel' | 'centos' # 未测试 SWOOLE_ODBC_OPTIONS="" # 缺少 unixODBC-devel @@ -354,6 +458,7 @@ install_swoole() { esac + # shellcheck disable=SC2164 cd /tmp/build/swoole-src test -f ext-src/.libs/php_swoole.o && make clean @@ -394,8 +499,10 @@ install_swoole() { fi if test $ENABLE_TEST -eq 1; then + # shellcheck disable=SC2164 cd /tmp/build/swoole-src/tests/include/lib/ composer install + # shellcheck disable=SC2164 cd /tmp/build/swoole-src/ make test fi @@ -408,26 +515,20 @@ install_swoole() { # 创建 swoole.ini - PHP_INI_SCAN_DIR=$(php --ini | grep "Scan for additional .ini files in:" | awk -F 'in:' '{ print $2 }' | xargs) - if [ $? -ne 0 ]; then - echo $? - exit 3 - fi - if [ -n "${PHP_INI_SCAN_DIR}" ] && [ -d "${PHP_INI_SCAN_DIR}" ]; then - SUDO='' + local SUDO='' if [ ! -w "${PHP_INI_SCAN_DIR}" ]; then SUDO='sudo' fi - SWOOLE_INIT_FILE=${PHP_INI_SCAN_DIR}/90-swoole.ini + local SWOOLE_INI_FILE=${PHP_INI_SCAN_DIR}/90-swoole.ini # shellcheck disable=SC2046 # 解决 php official 容器中 扩展加载顺序问题 if test -f /.dockerenv -a -x "$(which docker-php-source)" -a -x "$(which docker-php-ext-enable)"; then - test -f ${SWOOLE_INIT_FILE} && rm -f ${SWOOLE_INIT_FILE} - SWOOLE_INIT_FILE=${PHP_INI_SCAN_DIR}/docker-php-ext-90-swoole.ini + test -f ${SWOOLE_INI_FILE} && rm -f ${SWOOLE_INI_FILE} + SWOOLE_INI_FILE=${PHP_INI_SCAN_DIR}/docker-php-ext-swoole-90.ini fi - ${SUDO} tee ${SWOOLE_INIT_FILE} </dev/null && EXTENSION_OPENSSL_EXISTS=1 - php --ri curl >/dev/null && EXTENSION_CURL_EXISTS=1 - php --ri sockets >/dev/null && EXTENSION_SOCKETS_EXISTS=1 - php --ri mysqlnd >/dev/null && EXTENSION_MYSQLND_EXISTS=1 - php --ri pdo >/dev/null && EXTENSION_PDO_EXISTS=1 - - # shellcheck disable=SC2046 - if test -f /.dockerenv -a -x "$(which docker-php-source)" -a -x "$(which docker-php-ext-configure)" -a -x "$(which docker-php-ext-enable)"; then - # php 容器中 启用被 swoole 依赖的扩展 - # 准备编译环境 - install_swoole_dependencies - docker-php-source extract - - test ${EXTENSION_OPENSSL_EXISTS} -eq 0 && docker-php-ext-configure openssl && docker-php-ext-install openssl && docker-php-ext-enable openssl - test ${EXTENSION_CURL_EXISTS} -eq 0 && docker-php-ext-configure curl && docker-php-ext-install curl && docker-php-ext-enable curl - test ${EXTENSION_SOCKETS_EXISTS} -eq 0 && docker-php-ext-configure sockets && docker-php-ext-install sockets && docker-php-ext-enable sockets - test ${EXTENSION_MYSQLND_EXISTS} -eq 0 && docker-php-ext-configure mysqlnd && docker-php-ext-install mysqlnd && docker-php-ext-enable mysqlnd - test ${EXTENSION_PDO_EXISTS} -eq 0 && docker-php-ext-configure pdo && docker-php-ext-install pdo && docker-php-ext-enable pdo - - docker-php-source delete - else - local MESSAGES=' please manual enable extension : ' - local SUM=0 - test ${EXTENSION_OPENSSL_EXISTS} -eq 0 && MESSAGES="${MESSAGES} openssl" && ((SUM++)) - test ${EXTENSION_CURL_EXISTS} -eq 0 && MESSAGES="${MESSAGES} curl" && ((SUM++)) - test ${EXTENSION_SOCKETS_EXISTS} -eq 0 && MESSAGES="${MESSAGES} sockets" && ((SUM++)) - test ${EXTENSION_MYSQLND_EXISTS} -eq 0 && MESSAGES="${MESSAGES} mysqlnd " && ((SUM++)) - test ${EXTENSION_PDO_EXISTS} -eq 0 && MESSAGES="${MESSAGES} pdo " && ((SUM++)) - - if test $SUM -gt 0; then - echo $MESSAGES - exit 0 - fi - fi + install_swoole_dependent_library + install_swoole_dependent_ext + install_swoole fi - install_swoole_dependencies - install_swoole - } # 安装 入口 diff --git a/tools/scripts/linux/archilinux-init.sh b/tools/scripts/linux/archilinux-init.sh index 912dae3..bec4263 100644 --- a/tools/scripts/linux/archilinux-init.sh +++ b/tools/scripts/linux/archilinux-init.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -exu +set -x __DIR__=$( cd "$(dirname "$0")" pwd @@ -45,7 +45,7 @@ esac pacman -Syyu --noconfirm -pacman -Sy --noconfirm git curl wget openssl xz zip unzip ca-certificates +pacman -Sy --noconfirm git curl wget openssl xz zip unzip ca-certificates which # 搜索包 pacman -Ss php