PHP 7.4 설치(소스 컴파일 / Source Compile)

Share

Last Updated on 9월 27, 2021 by Jade(정현호)


안녕하세요 
이번 포스팅은 PHP 버전간 Benchmark 내용을 우연치 않게 보던 중에 생각보다 버전간의 성능 개선 효과의 내용을 보게 되어 PHP 7.2->7.4 로 변경을 하게 되면서 PHP 7.4 버전을 Source Compile 로 설치하는 내용의 글 입니다. 



Ref
PHP Benchmarks 7.4 vs 7.3 vs 7.2 vs 7.1 vs 7.0 (php-fpm)
https://kinsta.com/blog/php-benchmarks/


설치 환경 정보
  - CentOS 7.8
  - PHP 7.4.11
Source Compile 로 설치 하였습니다.



사전 필요 패키지 설치

설치시 필요한 패키지는 아래의 목록으로 설치 하였습니다.

[root]# yum -y install curl-devel libpng \
libpng-devel libjpeg libjpeg-devel
 libwebp \
libwebp-devel libXpm libXpm-devel openssl \
openssl-devel 
autoconf curl zlib zlib-devel \
freetype freetype-devel gd gd-devel \

libjpeg libjpeg-devel libmcrypt libmcrypt-devel \
libtool-ltdl-devel 
libzip libzip-devel \
oniguruma-devel cmake gcc-c++ gcc \

libxml2-devel libxml2 libcurl libcurl-devel \
bzip2-devel sqlite-devel


Problem encountered

PHP 7.4 컴파일 설치 시 발생 되는 몇가지 이슈가 있습니다.

1. php 7.4 에서 변경된 configure 옵션에 따른 수정 진행


2. 설치에 필요한 패키지나 라이브러리의 요구 버전이 yum 으로 다운받을 수 있는 버전보다 높아서 해당 패키지 또한 컴파일 해서 설치를 해야하는 상황




configure

7.2 버전의 컴파일에서 사용하던 configure 구문을 그대로 사용 하였을 때 몇가지의 unrecognized options warning 이 발생하였습니다.


configure: WARNING: unrecognized options: --with-gd, --with-gd, --with-jpeg-dir, --with-libxml-dir, --with-png-dir, --with-freetype-dir,


그래서 아래와 같이 수정/변경 하였습니다.

--enable-zip  ==> --with-zip
--with-gd ==> --enable-gd
--with-jpeg-dir ==> -with-jpeg
--with-libxml-dir ==> --with-libxml
--with-png-dir ==> --with-png
--with-freetype-dir ==> --with-freetype

--with-png <==옵션 없음 제외



Package Missing 및 Package Compile 간 문제

error-1

checking for gdlib >= 2.1.0... no configure: error: Package requirements (gdlib >= 2.1.0) were not met: Requested 'gdlib >= 2.1.0' but version of gd-devel is 2.0.34

[root]]# yum list | grep gd-devel
gd-devel.x86_64 2.0.35-26.el7 @base

yum repository 에서 받을 수 있는 버전이 설치에 필요한 요구 버전보다 낮았습니다.

소스컴파일로 패키지를 설치 하였습니다.

[root]]# wget https://github.com/libgd/libgd/releases/download/gd-2.3.0/libgd-2.3.0.tar.gz
[root]]# tar zxvf libgd-2.3.0.tar.gz
[root]]# cd libgd-2.3.0
[root]]# ./configure --prefix=/usr/local/libgd-2.3.0
[root]]# make ; make install



error-2
checking for sqlite3 > 3.7.4... no
configure: error: Package requirements (sqlite3 > 3.7.4) were not met:

No package 'sqlite3' found

패키지를 설치 하여 해결 하였습니다.
[root]# yum -y install sqlite-devel


error-3
configure: error: Package requirements (oniguruma) were not met:

No package 'oniguruma' found

패키지 설치로 해결 하였습니다.

[root]# yum -y install oniguruma-devel


error-4
checking for libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0... no

configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:

No package 'libzip' found

No package 'libzip' found
No package 'libzip' found


yum 으로 설되는 libzip libzip-devel 패키지의 버전이 요구 버전 보다 낮아서 libzip 을 compile 설치 하였습니다.


문제는 libzip 을 cmake 하기 위해서 또 필요한 cmake 버전이 충족치(낮아서) 않아서 cmake도 컴파일로 설치를 해야 했습니다.
 - libzip 필요 CMake 버전 관련 에러 메세지

    CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
    CMake 3.0.2 or higher is required. You are running version 2.8.12.2

[root]# yum -y install gcc-c++
[root]# wget https://github.com/Kitware/CMake/releases/download/v3.19.0-rc1/cmake-3.19.0-rc1.tar.gz
[root]# tar zxvf cmake-3.19.0-rc1.tar.gz
[root]# cd cmake-3.19.0-rc1/
[root]# ./configure --prefix=/usr/local/cmake-3.19.0-rc1
[root]# make;make install



# libzip 설치

[root]# wget https://libzip.org/download/libzip-1.7.3.tar.gz
[root]# tar zxvf libzip-1.7.3.tar.gz

[root]# cd libzip-1.7.3
[root]# /usr/local/cmake-3.19.0-rc1/bin/cmake -DCMAKE_INSTALL_PREFIX=/usr/local/libzip-1.7.3
[root]# make;make install


설치전 PKG_CONFIG_PATH 환경변수 에 2개의 pkgconfig 내용을 반영 하였습니다.

[root]# export PKG_CONFIG_PATH=/usr/local/libgd-2.3.0/lib/pkgconfig:/usr/local/libzip-1.7.3/lib64/pkgconfig


Configure / Compile

Apache 와 같은 서버 에서 설치 할 경우

[root]# cd /root/pkg/php-7.4.11

[root]# export PKG_CONFIG_PATH=/usr/local/libgd-2.3.0/lib/pkgconfig:/usr/local/libzip-1.7.3/lib64/pkgconfig

[root]# ./configure --prefix=/usr/local/php-7.4.11 \
--with-apxs2=/usr/local/apache2.4.43/bin/apxs\

--with-config-file-path=/etc --enable-mysqlnd \
--with-pdo-mysql=/usr/local/mysql --enable-soap \
--enable-mbstring --with-zip --enable-exif \
--enable-gd --with-external-gd \
--with-webp --with-jpeg \
--with-libxml --enable-gd-jis-conv --with-zlib-dir \
--with-freetype --with-xpm \
--enable-sockets --with-openssl \
--with-zlib --with-gettext \

--enable-sigchild --with-iconv --enable-opcache \
--enable-fpm --with-fpm-user=apache \
--with-fpm-group=apache \

--with-curl --enable-exif --enable-bcmath \
--enable-mbstring=all \
--with-mysqli=/usr/local/mysql/bin/mysql_config

[root]# make; make install




Apache 와 다른 서버 에서 설치 할 경우

[root]# cd /root/pkg/php-7.4.11

export PKG_CONFIG_PATH=/usr/local/libgd-2.3.0/lib/pkgconfig:/usr/local/libzip-1.7.3/lib64/pkgconfig

[root]# ./configure --prefix=/usr/local/php-7.4.11 \

--with-config-file-path=/etc --enable-mysqlnd \
--with-pdo-mysql=/usr/local/mysql --enable-soap \
--enable-mbstring --with-zip --enable-exif \
--enable-gd --with-external-gd \
--with-webp --with-jpeg \
--with-libxml --enable-gd-jis-conv --with-zlib-dir \
--with-freetype --with-xpm \
--enable-sockets --with-openssl \
--with-zlib --with-gettext \

--enable-sigchild --with-iconv --enable-opcache \
--enable-fpm --with-fpm-user=apache \
--with-fpm-group=apache \

--with-curl --enable-exif --enable-bcmath \
--enable-mbstring=all \
--with-mysqli=/usr/local/mysql/bin/mysql_config

[root]# make; make install




Apache 와 다른 서버 에서 설치 할 경우
+ MySQL 이 YUM(RPM) 설치 된 환경


먼저 심볼릭 링크를 생성 후 진행 합니다.
[root]# mkdir -p /usr/local/mysql/bin
[root]# ln -s /usr/bin/mysql_config /usr/local/mysql/bin/mysql_config


[root]# cd /root/pkg/php-7.4.11

export PKG_CONFIG_PATH=/usr/local/libgd-2.3.0/lib/pkgconfig:/usr/local/libzip-1.7.3/lib64/pkgconfig

[root]# ./configure --prefix=/usr/local/php-7.4.11 \
--with-config-file-path=/etc --enable-mysqlnd \
--with-pdo-mysql=/usr/local/mysql --enable-soap \
--enable-mbstring --with-zip --enable-exif \
--enable-gd --with-external-gd \
--with-webp --with-jpeg \
--with-libxml --enable-gd-jis-conv --with-zlib-dir \
--with-freetype --with-xpm \
--enable-sockets --with-openssl --with-zlib --with-gettext \
--enable-sigchild --with-iconv --enable-opcache \
--enable-fpm --with-fpm-user=apache \
--with-fpm-group=apache \
--with-curl --enable-exif --enable-bcmath \
--enable-mbstring=all \
--with-mysqli=/usr/local/mysql/bin/mysql_config

[root]# make; make install


mcrypt 와 imagick 모듈 설치

# mcrypt 설치
[root]# yum -y install autoconf
[root]# cd /root/pkg
[root]# wget https://pecl.php.net/get/mcrypt-1.0.3.tgz
[root]# tar xvzf mcrypt-1.0.3.tgz
[root]# cd mcrypt-1.0.3
[root]# /usr/local/php-7.4.11/bin/phpize
[root]# ./configure --with-php-config=/usr/local/php-7.4.11/bin/php-config
[root]# make -j 3 && make install


# imagick 설치
[root]# yum -y install ImageMagick-devel
[root]# cd /root/pkg/

[root]# wget http://pecl.php.net/get/imagick-3.4.4.tgz
[root]# tar zxvf imagick-3.4.4.tgz
[root]# cd imagick-3.4.4
[root]# /usr/local/php-7.4.11/bin/phpize
[root]# ./configure --with-php-config=/usr/local/php-7.4.11/bin/php-config
[root]# make && make install


#설치된 모듈 확인
[root]# ls -al /usr/local/php-7.4.11/lib/php/extensions/no-debug-non-zts-20190902/



디렉토리 변경 및 후속 작업

신규 설치에 따른 추가 후속 작업 내용이 필요 하시거나 PHP-FPM 의 더 자세한 내용이 필요하실 경우 아래 포스팅을 참조하시면 됩니다.



기존에 PHP 7.2 에서 PHP 7.4 로 신규 설치에 따른 환경 변경 내용입니다.


기존의 사용중인 php.ini 에서 extension_dir 경로 변경
[root]# vi /etc/php.ini

수정
extension_dir=/usr/local/php-7.4.11/lib/php/extensions/no-debug-non-zts-20190902

혹은 (심볼릭 링크 사용시)
extension_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902


# 기존 사용중이던 php-fpm.conf  파일 복사
[root]# cp /usr/local/php/etc/php-fpm.conf  /usr/local/php-7.4.11/etc/


# 복사한 기존 파일에서 경로 등을 체크 
[root]# cd /usr/local/php-7.4.11/etc/

[root]# vi php-fpm.conf


# 기존 사용 중인 php-fpm pool 설정 파일 복사
[root]# cp -rp /usr/local/php/etc/php-fpm.d/*   /usr/local/php-7.4.11/etc/php-fpm.d/


# php-fpm 중지 및 경로 수정 , 서비스 재가동
[root]# systemctl stop php-fpm


필요시 서비스 파일내 경로 수정
[root]# vi /etc/systemd/system/php-fpm.service

ex)
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf



# 심볼릭 링크 수정
[root]# cd /usr/local
[root]# ls -alrt
[root]# rm php
  -> 기존 심볼릭 링크 삭제

[root]#
ln -s /usr/local/php-7.4.11   /usr/local/php


# php-fpm 시작
[root]#
systemctl daemon-reload
[root]# systemctl enable php-fpm
[root]# systemctl start php-fpm




연관된 글
proxy_balancer 를 이용한 PHP-FPM 다중화 구성

PHP8 출시 소식 및 PHP 8.0 Source Compile

     

0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x