download/panel/php/update.sh
2025-01-05 17:31:50 +08:00

137 lines
5.8 KiB (Stored with Git LFS)
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:$PATH
: '
Copyright (C) 2022 - now HaoZi Technology Co., Ltd.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
'
source <(curl -f -s --connect-timeout 10 --retry 3 https://dl.cdn.haozi.net/panel/public.sh)
if [ $? -ne 0 ]; then
echo "下载 public.sh 失败,请检查网络或稍后重试。"
echo "Download public.sh failed, please check the network or try again later."
exit 1
fi
channel=${1}
version=${2}
php_path="${setup_path}/server/php/${channel}"
j=$(calculate_j)
# 安装依赖
if [ ${OS} == "rhel" ]; then
dnf makecache
dnf groupinstall "Development Tools" -y
# openEuler 没有 libavif-devel单独安装防止报错
dnf install libavif-devel -y
dnf install autoconf glibc-headers gdbm-devel gd gd-devel perl oniguruma-devel libsodium-devel libxml2-devel sqlite-devel libzip-devel bzip2-devel xz-devel libpng-devel libjpeg-devel libwebp-devel freetype-devel gmp-devel openssl-devel readline-devel libxslt-devel libcurl-devel pkgconfig libedit-devel zlib-devel pcre-devel crontabs libicu libicu-devel c-ares -y
elif [ ${OS} == "debian" ] || [ ${OS} == "ubuntu" ]; then
apt-get update
apt-get install build-essential autoconf libc6-dev libgdbm-dev libgd-tools libgd-dev perl libonig-dev libsodium-dev libxml2-dev libsqlite3-dev libzip-dev libbz2-dev liblzma-dev libpng-dev libjpeg-dev libwebp-dev libavif-dev libfreetype6-dev libgmp-dev libssl-dev libreadline-dev libxslt1-dev libcurl4-openssl-dev pkg-config libedit-dev zlib1g-dev libpcre3-dev cron libicu-dev libc-ares2 libc-ares-dev -y
else
error "不支持的操作系统"
fi
if [ "$?" != "0" ]; then
error "安装依赖软件失败"
fi
# 预检查
systemctl is-active --quiet php-fpm-${channel}
if [ "$?" != "0" ]; then
error "应用运行状态不正常"
fi
# 停止已有服务
systemctl stop php-fpm-${channel}
# 准备安装目录
cd ${php_path}
rm -rf src
# 下载源码
wget --retry-connrefused --retry-on-host-error --retry-on-http-error=429,500,502,503,504 -t 10 -T 120 -O ${php_path}/php-${version}.7z ${download_url}/php/php-${version}.7z
wget --retry-connrefused --retry-on-host-error --retry-on-http-error=429,500,502,503,504 -t 10 -T 120 -O ${php_path}/php-${version}.7z.sha256 ${download_url}/php/php-${version}.7z.sha256
if ! sha256sum --status -c php-${version}.7z.sha256; then
rm -f ${php_path}/php-${version}.7z
rm -f ${php_path}/php-${version}.7z.sha256
error "PHP-${channel} 校验失败"
fi
7z x php-${version}.7z
rm -f php-${version}.7z
rm -f php-${version}.7z.sha256
mv php-* src
chmod -R 700 src
# 配置
cd src
# PHP <= 80 openssl3 补丁
if [ ${channel} -le "80" ]; then
wget --retry-connrefused --retry-on-host-error --retry-on-http-error=429,500,502,503,504 -t 10 -T 120 -O php-${channel}-openssl3.patch ${download_url}/php/php-${channel}-openssl3.patch
wget --retry-connrefused --retry-on-host-error --retry-on-http-error=429,500,502,503,504 -t 10 -T 120 -O php-${channel}-openssl3.patch.sha256 ${download_url}/php/php-${channel}-openssl3.patch.sha256
if ! sha256sum --status -c php-${channel}-openssl3.patch.sha256; then
rm -rf ${php_path}
error "PHP-${channel} openssl3 补丁校验失败"
fi
patch -p1 <php-${channel}-openssl3.patch
fi
# 个别系统可能没有libavif
WITH_AVIF=""
if pkg-config --exists libavif; then
WITH_AVIF="--with-avif"
fi
# EOL 补丁版本中没有附带 configure 文件
if [ ! -f "configure" ]; then
./buildconf --force
fi
# 配置
if [ ${channel} -ge "81" ]; then
./configure --prefix=${php_path} --with-config-file-path=${php_path}/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-fpm-systemd --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-freetype --with-jpeg --with-zlib --enable-xml --disable-rpath --enable-bcmath --enable-shmop --with-curl --enable-mbregex --enable-mbstring --enable-pcntl --enable-ftp --enable-gd --with-openssl --with-mhash --enable-pcntl --enable-sockets --enable-soap --disable-fileinfo --enable-opcache --with-sodium --with-webp ${WITH_AVIF}
else
./configure --prefix=${php_path} --with-config-file-path=${php_path}/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-fpm-systemd --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-freetype --with-jpeg --with-zlib --enable-xml --disable-rpath --enable-bcmath --enable-shmop --with-curl --enable-mbregex --enable-mbstring --enable-pcntl --enable-ftp --enable-gd --with-openssl --with-mhash --enable-pcntl --enable-sockets --enable-soap --disable-fileinfo --enable-opcache --with-sodium --with-webp
fi
# RHEL 8 PHP 8.3+ 修复
# https://github.com/php/php-src/issues/12774
if [ ${OS} == "rhel" ] && [ $(rpm -E %{rhel}) == "8" ] && [ ${channel} -ge "83" ]; then
sed -i 's|^CC = cc|CC = cc -fPIE -pie|g' Makefile
sed -i 's|^BUILD_CC = cc|BUILD_CC = cc -fPIE -pie|g' Makefile
fi
# 编译安装
make "-j${j}"
make install
if [ ! -f "${php_path}/bin/php" ]; then
error "PHP-${channel} 安装失败"
fi
# 启动php
systemctl start php-fpm-${channel}
if [ "$?" != "0" ]; then
error "PHP-${channel} 启动失败"
fi
panel-cli app write php${channel} ${channel} ${version}
echo -e $HR
echo "升级完成"
echo -e $HR