Сборка PHP7
Всем хорош NextCloud, но в какой-то момент перешёл на использование PHP7. А под ReadyNAS такого добра не было. То есть нашёлся в стандатных репах Debian 8 (jessie) какой-то php7.0, но NextCloud стремительно и от этого отказался, хочет больше версию. Дилема. Пришлось расчехлить GCC и собрать самостоятельно. Повторить желающие могут, но придётся это делать творчески, так как система у меня уже с множественными наслоениями.
Кратко суть процесса.
1. Собрать Apache2. Предварительно пришлось ещё собрать APR и APR-util, без них Апач не собирался, а версии из репозиториев не совпадали. И с штатным Апачем их поставки никак не выходило. Это значит был Апач 2.4.41.
2. Собрать PHP7.3. Я сперва собрал 7.4.6, но с ним старый NextCloud работать отказался, типа это ему слишком новое и неизведанное. Пришлось взять 7.3.19.
./configure --prefix=/usr/local/php7 --with-config-file-path=/etc/php7 \ --with-apxs2=/root/a2/bin/apxs --with-openssl --with-gd --enable-bcmath --with-gmp \ --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-pdo-mysql \ --with-pgsql --with-pdo-pgsql \ --with-curl --enable-mbstring --enable-inline-optimization --disable-opcache --enable-intl \ --with-libzip=/usr/local --enable-zip --with-zlib \ --with-jpeg-dir --with-png-dir --enable-exif --with-freetype-dir make -j8
Апач был нужен ради apxs, без него PHP7 как модуль Апача не собирается. Ну и на место пршлось PHP руками подкладывать в /usr/lib/apache2/modules/. Кто знает, скажите мне как сделать ровнее. Попробовал было собрать пакет:
checkinstall --pkgname php7.3 --pkgversion 7.3.19 --install=no
но смысла особого не увидел.
Что-то там ещё с libzip было, но не помню.
Сборка PHP 7.4.8:
./configure --prefix=/usr/local/php7 --with-config-file-path=/etc/php7 --with-apxs2=/root/a2/bin/apxs \ --with-openssl --enable-gd --enable-bcmath --with-gmp \ --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-pdo-mysql \ --with-pgsql --with-pdo-pgsql \ --with-curl --enable-mbstring --enable-inline-optimization --disable-opcache --enable-intl --with-zip --with-zlib \ --with-jpeg --enable-exif --with-freetype make -j8
Собралось почти сразу, только несколько параметров автоконфига названия поменяли. Уже обновлённый NextCloud версии 19 заработал, для Piwigo пришлось указать, что на E_DEPRICATED ругаться не надо.
Сборка 8.0.6. Так как Nextcloud что-то совсем перестал работать в свежих версиях и никакие более свежие 7.4.* не решили проблем, пришлось попробовать php8. И — о чудо! — оно завелось!
./configure --prefix=/usr/local/php8 -with-config-file-path=/etc/php8 --with-apxs2=/root/a2/bin/apxs --enable-fpm \ --enable-phpdbg --with-openssl --with-zlib --enable-bcmath --with-curl --enable-exif \ --enable-gd --with-jpeg --with-freetype --enable-intl --enable-mbstring --with-gmp --enable-pcntl \ --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-pdo-mysql \ --with-pdo-pgsql=/usr/sbin/ --with-pgsql=/usr/sbin/ --with-zip
Заодно настроил Nextcloud через nginx и php-fpm.
Update
Стал падать Dokuwiki. Обновление не помогло, хотя там явно поминали фиксы для php7. Ошибка Segmentation Fault и падает без звука. С помощью phpdbg удалось установить, где падает, оказалось на всяких regexp. Вот тут объясняется почему так:
https://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-errorВ результате вылечилось так, в /etc/security/limits.conf:
admin - stack unlimited
в /etc/php7/php.ini:
pcre.backtrack_limit=1000 pcre.recursion_limit=1000 pcre.jit=0
PHP 8.0.20
./configure --prefix=/usr/local/php8 --with-config-file-path=/etc/php8 \ --enable-fpm --with-fpm-systemd --enable-phpdbg --enable-bcmath \ --with-openssl --with-zlib --with-curl --enable-exif --enable-ftp \ --enable-gd --with-jpeg --with-freetype \ --enable-intl --enable-mbstring --with-gmp --enable-pcntl \ --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-pdo-mysql \ --with-pdo-pgsql=/usr/sbin/ --with-pgsql=/usr/sbin/ --with-zip --with-sodium
checkinstall --pkgname php-8 --pkgversion 8.0.20 --install=no --nodoc
PHP 8.1
Ну вот пришла пора и для PHP версии 8.1. Компилим:
./configure --prefix=/usr/local/php8.1 --with-config-file-path=/etc/php8.1 \ --enable-fpm --with-fpm-systemd --enable-phpdbg --enable-bcmath --with-openssl \ --with-zlib --with-curl --enable-exif --enable-ftp --enable-gd --with-jpeg --with-freetype \ --enable-intl --enable-mbstring --with-gmp --enable-pcntl \ --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-pdo-mysql --with-pdo-pgsql=/usr/sbin/ --with-pgsql=/usr/sbin/ \ --with-zip --with-sodium --with-readline
Ставим аналогично предыдущему, сделав на скорую руку пакет.