Amazon Linux 2 에 PHP zip extension 설치

오늘 수행한 "야크 털 깍기" 라서 기록해 둡니다.


개요

이유는 모르겠지만 Amazon linux 2 에 있는 PHP 는 zip 모듈이 포함되어 있지 않습니다.


이때문에 laravel installer 나 기타 zip 을 사용하는 PHP 코드가 동작하지 않습니다.

 Click here to expand...

Your requirements could not be resolved to an installable set of packages.

Problem 1
- laravel/installer v2.0.1 requires ext-zip * -> the requested PHP extension zip is missing from your system.
- laravel/installer v2.0.0 requires ext-zip * -> the requested PHP extension zip is missing from your system.
- Installation request for laravel/installer ^2.0 -> satisfiable by laravel/installer[v2.0.0, v2.0.1].



Amazon Linux 2가 나온지 얼마되지 않아서 인지 구글링을 해도 별다른 정보가 없어서 직접 소스를 가져다가 컴파일하기로 했습니다.


먼저 php 개발 환경을 구성하기 위해 다음 패키지를 설치합니다. 

yum install php-devel zlib-devel


설치가 끝났으면  PHP zip module 의 소스를 다운 받고 압축을 해제합니다. 

wget https://pecl.php.net/get/zip-1.15.2.tgz
tar zxvf zip-1.15.2.tgz


libzip 컴파일

zip 모듈은 libzip 0.11 이상을 필요로 하나 배포판에 포함된 건 0.10 이므로 컴파일이 되지 않으므로 libzip 로 소스를 가져다가 컴파일해야 합니다.

wget https://libzip.org/download/libzip-1.4.0.tar.gz
tar zxvf libzip*
cd libzip-1.4.0

이제 libzip을 컴파일하려고 보니 cmake 가 필요해서 설치했는데 libzip 은 CMake 3.0 이상을 필요로 하는데 배포판에 포함된 건 2.8 이라 CMake 부터 설치해야 합니다. 


CMake 설치


배포판에 낮은 버전이 있으므로 제조사에서 사전에 빌드한 바이너리를 다운받아서 설치합니다.

wget https://cmake.org/files/v3.9/cmake-3.9.6-Linux-x86_64.tar.gz


이제 압축을 풀고 심볼릭 링크를 걸어줍니다.

tar zxvf cmake* -C /usr/local
ln -s /usr/local/cmake-3.9.6-Linux-x86_64/ /usr/local/cmake
ln -s /usr/local/cmake/bin/cmake /usr/local/bin/cmake


다시 libzip 컴파일

이제 cmake 를 설치했으니 libzip 을 컴파일합니다. 


다음 명령어를 실행하면 설치가 완료됩니다.

mkdir build
cd build
cmake ..
make
make test
make install


zip module 설치

libzip 설치까지 완료되었으면 이제 zip 모듈을 컴파일할 순서입니다.

  1. zip 모듈 소스 디렉터리로 이동합니다.

    cd zip-1.15.2
  2. PHP extension 컴파일을 위한 스크립트를 생성합니다.

    phpize
  3. configure 로 Makefile 을 생성하고 컴파일합니다.

    ./configure && make && make test
  4. 컴파일한 모듈을 설치합니다.

    make install
  5. moduel 설정 ini 를 생성합니다.

    echo "extension=zip" > /etc/php.d/20-zip.ini
  6. php-fpm 을 재구동합니다.

    systemctl restart php-fpm

모듈 설치가 끝났으면 이제 다시 laravel installer 를 설치하여 정상 동작 여부를 확인합니다.

composer global require "laravel/installer"