Rocky Linux 9.3 源码编译安装 php8.3.3 以及扩展 redis 、gd和 sodium安装

近期文章:centos7.9 源码编译安装 php8 以及扩展 redis 和 sodium安装

近期新项目,php版本要求最新版本 8.3.3,node版本也要 18+,于是在阿里云购买Rocky Linux 9.3 4c8G的机器配置用来安装,这里记录一下装php的整个过程和遇到的一些问题

查看系统版本

cat /etc/redhat-release
Rocky Linux release 9.3 (Blue Onyx)

更新系统软件包

yum update
#重启
reboot

源码编译安装php8.3.3

预先安装必要的依赖

yum install -y wget gcc gcc-c++ autoconf automake libtool make libxml2 libxml2-devel openssl openssl-devel sqlite-devel libpng libpng-devel libpsl libpsl-devel libicu-devel libcurl-devel

创建 www 用户

useradd www -d /usr/local/data/www -s /sbin/nologin

下载 php-8.3.3包

mkdir /usr/local/data/soft
cd /usr/local/data/soft
wget https://www.php.net/distributions/php-8.3.3.tar.gz
tar zxvf php-8.3.3.tar.gz
cd php-8.3.3

configure预编译

./configure --prefix=/usr/local/data/php-8.3.3 \
--with-config-file-path=/usr/local/data/php-8.3.3/etc \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-mysqlnd-compression-support \
--with-zlib \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-mbregex \
--enable-mbstring \
--enable-intl \
--enable-ftp \
--enable-gd-jis-conv \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--enable-soap \
--with-gettext \
--enable-fileinfo \
--enable-opcache \
--with-pear \
--with-ldap=shared \
--without-gdbm \
--with-curl \
--enable-ctype

预编译报错解决:

报错1:configure: error: Cannot find ldap.h

yum install openldap openldap-devel  -y
重新预编译

报错2:configure: error: Cannot find ldap libraries in /usr/lib

cp -frp /usr/lib64/libldap* /usr/lib/
重新预编译

报错3:Package ‘oniguruma’, required by ‘virtual:world’, not found,完整报错信息如下

checking for oniguruma... no
configure: error: Package requirements (oniguruma) were not met:

Package 'oniguruma', required by 'virtual:world', not found

这里是缺少了 oniguruma-devel 包

yum install oniguruma oniguruma-devel

yum已经安装了oniguruma,但oniguruma-devel包提示没有找到,于是找到了下面快捷安装方式

好多教程都是去下载 rpm包或源码编译安装,不推荐,费时

yum --enablerepo=devel -y install oniguruma-devel 
#或 dnf --enablerepo=devel -y install oniguruma-devel

安装方式当然也是在这里找到的访问 https://pkgs.org/ ,搜索 oniguruma-devel 关键字即可

<code>oniguruma devel<code>包下载

点进去,记得向下滑,有时候还要输入通过图片验证才行

<code>oniguruma devel<code>包下载

再次进到 php源码目录编译就正常了,接下来就可以 make了

make -j 4 && make install

创建 php 软连接

ln -s /usr/local/data/php-8.3.3 /usr/local/data/php

优化 php 默认配置

cp php.ini-production /usr/local/data/php/etc/php.ini
cd /usr/local/data/php/etc/
cp php-fpm.conf.default php-fpm.conf
cd /usr/local/data/php/etc/php-fpm.d
cp www.conf.default www.conf
cd /usr/local/data/php/etc/
#修改php-fpm.conf
sed -i 's#;error_log = log/php-fpm.log#error_log = log/php-fpm.log#g' php-fpm.conf
sed -i 's/;rlimit_files = 1024/rlimit_files = 65535/g' php-fpm.conf
sed -i 's#;log_level = notice#log_level = error#g' php-fpm.conf
sed -i 's#;pid = run/php-fpm.pid#pid = run/php-fpm.pid#g' php-fpm.conf
sed -i 's#;emergency_restart_threshold = 0#emergency_restart_threshold = 60#g' php-fpm.conf
sed -i 's#;emergency_restart_interval = 0#emergency_restart_interval = 60#g' php-fpm.conf
sed -i 's#;process_control_timeout = 0#process_control_timeout = 5#g' php-fpm.conf
#修改www.conf
sed -i 's#pm = dynamic#pm = static#g' php-fpm.d/www.conf
sed -i 's#pm.max_children = 5#pm.max_children = 150#g' php-fpm.d/www.conf
sed -i 's#;pm.status_path = /status#pm.status_path = /PhpStatus#g' php-fpm.d/www.conf
sed -i 's#;slowlog = log/$pool.log.slow#slowlog = var/log/$pool.log.slow#g' php-fpm.d/www.conf
sed -i 's#;request_slowlog_timeout = 0#request_slowlog_timeout = 10#g' php-fpm.d/www.conf
#修改php.ini
sed -i 's/memory_limit = 128M/memory_limit = 512M/g' php.ini
sed -i 's#;date.timezone =#date.timezone = Asia/Shanghai#g' php.ini
sed -i 's#expose_php = On#expose_php = Off#g' php.ini
sed -i 's#disable_functions =#disable_functions = phpinfo#g' php.ini

php8进程管理脚本

cat /etc/init.d/php-fpm

#! /bin/sh

### BEGIN INIT INFO
# Provides:          php-fpm
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php-fpm
# Description:       starts the PHP FastCGI Process Manager daemon
### END INIT INFO

prefix=/usr/local/data/php
exec_prefix=${prefix}

php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm.conf
php_fpm_PID=${prefix}/var/run/php-fpm.pid

php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID"

wait_for_pid () {
    try=0

    while test $try -lt 35 ; do

        case "$1" in
            'created')
            if [ -f "$2" ] ; then
                try=''
                break
            fi
            ;;

            'removed')
            if [ ! -f "$2" ] ; then
                try=''
                break
            fi
            ;;
        esac

        echo -n .
        try=`expr $try + 1`
        sleep 1

    done

}

case "$1" in
    start)
        echo -n "Starting php-fpm "

        $php_fpm_BIN --daemonize $php_opts

        if [ "$?" != 0 ] ; then
            echo " failed"
            exit 1
        fi

        wait_for_pid created $php_fpm_PID

        if [ -n "$try" ] ; then
            echo " failed"
            exit 1
        else
            echo " done"
        fi
    ;;

    stop)
        echo -n "Gracefully shutting down php-fpm "

        if [ ! -r $php_fpm_PID ] ; then
            echo "warning, no pid file found - php-fpm is not running ?"
            exit 1
        fi

        kill -QUIT `cat $php_fpm_PID`

        wait_for_pid removed $php_fpm_PID

        if [ -n "$try" ] ; then
            echo " failed. Use force-quit"
            exit 1
        else
            echo " done"
        fi
    ;;

    status)
        if [ ! -r $php_fpm_PID ] ; then
            echo "php-fpm is stopped"
            exit 0
        fi

        PID=`cat $php_fpm_PID`
        if ps -p $PID | grep -q $PID; then
            echo "php-fpm (pid $PID) is running..."
        else
            echo "php-fpm dead but pid file exists"
        fi
    ;;

    force-quit)
        echo -n "Terminating php-fpm "

        if [ ! -r $php_fpm_PID ] ; then
            echo "warning, no pid file found - php-fpm is not running ?"
            exit 1
        fi

        kill -TERM `cat $php_fpm_PID`

        wait_for_pid removed $php_fpm_PID

        if [ -n "$try" ] ; then
            echo " failed"
            exit 1
        else
            echo " done"
        fi
    ;;

    restart)
        $0 stop
        $0 start
    ;;

    reload)

        echo -n "Reload service php-fpm "

        if [ ! -r $php_fpm_PID ] ; then
            echo "warning, no pid file found - php-fpm is not running ?"
            exit 1
        fi

        kill -USR2 `cat $php_fpm_PID`

        echo " done"
    ;;

    configtest)
        $php_fpm_BIN -t
    ;;

    *)
        echo "Usage: $0 {start|stop|force-quit|restart|reload|status|configtest}"
        exit 1
    ;;

esac
/etc/init.d/php-fpm configtest #测试配置文件是否正确
/etc/init.d/php-fpm start
/etc/init.d/php-fpm restart
/etc/init.d/php-fpm reload
/etc/init.d/php-fpm status

安装 php8.3.3 扩展

安装 redis

wget -nc -q http://pecl.php.net/get/redis-6.0.2.tgz
tar xvf redis-6.0.2.tgz
cd redis-6.0.2
/usr/local/data/php/bin/phpize
./configure  --with-php-config=/usr/local/data/php/bin/php-config
make -j 4 && make install
sed -i '$a extension=redis.so' /usr/local/data/php/etc/php.ini

安装 gd

cd /usr/local/data/soft/php-8.3.3/ext/gd
/usr/local/data/php/bin/phpize
./configure  --with-php-config=/usr/local/data/php/bin/php-config
make -j 4 && make install
sed -i '$a extension=gd.so' /usr/local/data/php/etc/php.ini

安装 sodium

不要去 php源码路径ext/sodium下面装,采用下面方式装

yum install -y libsodium libsodium-devel
wget http://pecl.php.net/get/libsodium-2.0.23.tgz
tar zxvf libsodium-2.0.23.tgz
cd libsodium-2.0.23
/usr/local/data/php/bin/phpize
./configure  --with-php-config=/usr/local/data/php/bin/php-config
make -j 4 && make install
sed -i '$a extension=sodium.so' /usr/local/data/php/etc/php.ini

验证扩展是否配置成功

php --ri redis
php --ri gd
php --ri sodium
或者 
php -m|egrep "redis|gd|sodium"

Comments

No comments yet. Why don’t you start the discussion?

发表评论