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

Last Updated on 1월 11, 2021 by 태랑(정현호)


PHP 버전간 Benchmark 내용을 우연치 않게 보던 중에 생각보다 버전간의 성능 개선 효과의 내용을 보게 되어 PHP 7.2->7.4 로 변경을 하게 되었습니다.



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


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



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


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

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



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

PHP8 출시 소식 및 PHP 8.0 Source Compile

 

답글 남기기