PHP: Сборка версии 7.3.7

Вчера на тестовой виртуальной машине заметил, что memory_limit не поднимается выше 32мб. Видимо баг какой-то. Пришлось собрать последнюю актуальную версию, но как водится не все было так гладко как хотелось бы.

Траблы

В этот раз сразу начнем с траблов. При первой попытке сразу пожаловался конфигуратор на отсутствие libzip. Версия в репозитории была старая, потому надо было собрать с исходников последнюю версию. При попытке сборки выяснилось, что в системе старый CMake, а нового в репозитории нет. Руки в крюки и вперед.

Сборка CMake

Берем последнюю версию и собираем. Сборка идет долго, так что после make install можно покурить и кофейку тяпнуть:

$ wget https://github.com/Kitware/CMake/releases/download/v3.15.0/cmake-3.15.0.tar.gz
$ tar xvvf cmake-3.15.0.tar.gz
$ cd cmake-3.15.0
$ ./bootstrap --prefix=/usr
$ make && make install
$ vi /etc/profile.d/cmake.sh

#!/usr/bin/env bash
export CMAKE_ROOT="/usr/share/cmake-3.15/"

$ chmod +x /etc/profile.d/cmake.sh
$ /etc/profile.d/cmake.sh
$ cp -f bin/{cmake,cpack,ctest} /usr/bin
$ cmake --version
cmake version 3.15.0

CMake suite maintained and supported by Kitware (kitware.com/cmake).

Теперь у нас свежий cmake и ничего не должно мешать сборке libzip.

Сборка LibZip

Теперь собираем libzip. Далеко не отлучаемся:

$ wget https://libzip.org/download/libzip-1.5.2.tar.gz
$ tar xvvf libzip-1.5.2.tar.gz
$ cd libzip-1.5.2
$ mkdir build
$ cd build
$ cmake ..
$ make && make install

Если появляется ошибка связанная с GnuTLS, то вместо «cmake ..» попробуйте «cmake .. -DENABLE_GNUTLS=OFF».

Сборка PHP

Теперь приступаем к главному. Сборка длится наверное даже дольше, чем сборка cmake:

$ wget https://www.php.net/distributions/php-7.3.7.tar.gz
$ tar xvvf php-7.3.7.tar.gz
$ cd php-7.3.7
$ ./configure --prefix=/usr/local/php73 --enable-fpm --with-fpm-user=nobody --with-fpm-group=nobody --disable-ipv6 --enable-bcmath --enable-exif --enable-mbstring --enable-shmop --enable-soap --enable-wddx --enable-zip --enable-mysqlnd --with-openssl --with-zlib --with-pcre-regex --with-gd --with-curl --with-pdo-mysql --with-mysqli --with-ldap=yes --with-libdir=lib64  --enable-intl --with-libzip=/usr/local
$ make && make install
$ cp php.ini-production /usr/local/php73/lib/php.ini
$ cp sapi/fpm/php-fpm.service /lib/systemd/system/
$ mv /usr/local/php73/etc/php-fpm.conf.default /usr/local/php73/etc/php-fpm.conf
$ mv /usr/local/php73/etc/php-fpm.d/www.conf.default /usr/local/php73/etc/php-fpm.d/www.conf
$ ln -s /usr/local/php73/bin/php /usr/bin/
$ ln -s /usr/local/php73/bin/php-config /usr/bin/
$ ln -s /usr/local/php73/sbin/php-fpm /usr/sbin/
$ systemctl enable php-fpm
$ systemctl start php-fpm
$ php-fpm -v
PHP 7.3.7 (fpm-fcgi) (built: Jul 25 2019 02:10:41)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies

Остается перенастроить веб-сервер, если надо и прикрутить composer.