Установка PHP 8.1.5 на Astra Linux Orel

Россия
Установка PHP 8.1.5 на Astra Linux Orel

28 ноября 2022 заканчивается поддержка PHP 7.4. Самое время задуматься о переходе на новую версию.

В предыдущей статье мы рассматривали установку из исходных кодов PHP версии 7.4.

Сегодня мы рассмотрим установку из исходного кода актуальной версии PHP - 8.1.5

Сборка может занять продолжительное время, поэтому лучше производить её на виртуальной машине с несколькими процессорами и минимум 2Гб оперативной памяти!

Обновление системы

Перед тем как устанавливать любые пакеты обновим систему: 

sudo apt update && sudo apt upgrade

Установим требуемые пакеты: 

sudo apt-get install autoconf build-essential curl libtool libssl-dev libcurl4-openssl-dev libxml2-dev libreadline7 libreadline-dev libzip-dev libzip4 nginx openssl pkg-config zlib1g-dev libsqlite3-dev sqlite3 libonig-dev libpq-dev git autoconf bison re2c libpng-dev libldap2-dev libfreetype6-dev libfreetype6 libjpeg-dev

Конфигурирование и сборка

Загрузим исходный код: 

wget https://github.com/php/php-src/archive/refs/tags/php-8.1.5.tar.gz

Распакуем 

tar -xzvf php-8.1.5.tar.gz

Перейдем в папку с исходным кодом: 

cd php-src-php-8.1.5

Запустим: 

touch configure.sh
chmod +x configure.sh

Создадим файл для конфигурирования: 

mcedit configure.sh

С содержимым: 

./configure --with-config-file-path=/etc/php/php8.1 \
--sysconfdir=/etc/php/php8.1 \
--enable-mysqlnd \
--with-pdo-mysql \
--with-pdo-mysql=mysqlnd \
--with-pdo-pgsql=/usr/bin/pg_config \
--enable-bcmath \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--enable-mbstring \
--enable-phpdbg \
--enable-shmop \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--with-zlib \
--with-curl \
--with-pear \
--with-openssl \
--enable-pcntl \
--enable-gd \
--with-jpeg \
--with-mysqli \
--with-readline \
--with-freetype \
--with-ldap

Запустим:

./buildconf --force

Запустим: 

./configure.sh

Дождемся появления строки: 

Thank you for using PHP.

Запустим: 

make

Дождёмся сообщения: 

Build complete.
Don't forget to run 'make test'.

Тестирование сборки

Вы можете запустить 

make test

Но запускать тест не обязательно. У меня с предупреждением не прошло три теста: 

Bug #81577: (Exceptions in interrupt handlers: cleanup_live_vars) [ext/pcntl/tests/bug81577_3.phpt] (warn: XFAIL section but test passes)
Phar: bug #69958: Segfault in Phar::convertToData on invalid file [ext/phar/tests/bug69958.phpt] (warn: XFAIL section but test passes)
FPM: Buffered worker output decorated log with multiple continuous messages (stdout/stderr mixed) [sapi/fpm/tests/log-bwd-multiple-msgs-stdout-stderr.phpt] (warn: XFAIL section but test passes)

Если у вас после теста появятся ошибки или предупреждения, введите 

Yes

И свой Email для отправки сообщения с ошибками разработчикам!

Установка

Запустим установку: 

sudo make install

Проверим версию: 

php -v
PHP 8.1.5 (cli) (built: May 3 2022 22:16:42) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.5, Copyright (c) Zend Technologies
/usr/local/sbin/php-fpm -v
PHP 8.1.5 (fpm-fcgi) (built: May 3 2022 22:17:11)
Copyright (c) The PHP Group
Zend Engine v4.1.5, Copyright (c) Zend Technologies

Проверим конфигурацию: 

php-config
Usage: /usr/local/bin/php-config [OPTION]
Options:
--prefix [/usr/local]
--includes [-I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib]
--ldflags [ -L/usr/lib/x86_64-linux-gnu]
--libs [-lcrypt -lresolv -lcrypt -lreadline -ltermcap -lpq -lrt -lldap -llber -lutil -lrt -lm -ldl -lxml2 -lssl -lcrypto -lsqlite3 -lz -lcurl -lssl -lcrypto -lxml2 -lz -lpng16 -ljpeg -lfreetype -lonig -lsqlite3 -lxml2 -lxml2 -lxml2 -lxml2 -lz -lssl -lcrypto -lcrypt ]
--extension-dir [/usr/local/lib/php/extensions/no-debug-non-zts-20210902]
--include-dir [/usr/local/include/php]
--man-dir [/usr/local/php/man]
--php-binary [/usr/local/bin/php]
--php-sapis [ cli fpm phpdbg cgi]
--ini-path [/etc/php/php8.1]
--ini-dir []
--configure-options [--with-config-file-path=/etc/php/php8.1 --sysconfdir=/etc/php/php8.1 --enable-mysqlnd --with-pdo-mysql --with-pdo-mysql=mysqlnd --with-pdo-pgsql=/usr/bin/pg_config --enable-bcmath --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --enable-mbstring --enable-phpdbg --enable-shmop --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-zlib --with-curl --with-pear --with-openssl --enable-pcntl --enable-gd --with-jpeg --with-mysqli --with-readline --with-freetype --with-ldap]
--version [8.1.5]
--vernum [80105]

Создадим папку для файлов конфигурации: 

sudo mkdir -p /etc/php/php8.1

Скопируем файлы конфигурации: 

sudo cp php.ini-development /etc/php/php8.1/php.ini
sudo cp /etc/php/php8.1/php-fpm.conf.default /etc/php/php8.1/php-fpm.conf
sudo cp /etc/php/php8.1/php-fpm.d/www.conf.default /etc/php/php8.1/php-fpm.d/www.conf

PHP 8.1 готов к запуску.

Запускаем php-fpm как сервис

Создадим файл для запуска php-fpm: 

sudo mcedit /lib/systemd/system/php-8.1-fpm.service

С содержимым: 

[Unit]
Description=The PHP 8.1 FastCGI Process Manager
After=network.target

[Service]
Type=simple
PIDFile=/var/run/php8.1-fpm.pid
ExecStart=/usr/local/sbin/php-fpm --nodaemonize --fpm-config /etc/php/php8.1/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

Включим сервис: 

sudo systemctl enable php-8.1-fpm.service

Перезапустим:

sudo systemctl daemon-reload

Запустим сервис: 

sudo systemctl start php-8.1-fpm.service

Проверим статус: 

sudo systemctl status php-8.1-fpm.service
● php-8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php-8.1-fpm.service; enabled; vendor pres
Active: active (running) since Tue 2022-05-03 23:29:05 +11; 19s ago
Main PID: 5465 (php-fpm)
Tasks: 3 (limit: 4915)
CGroup: /system.slice/php-8.1-fpm.service
├─5465 php-fpm: master process (/etc/php/php8.1/php-fpm.conf)
├─5466 php-fpm: pool www
└─5467 php-fpm: pool www

Проверка работоспособности php-fpm

Установим nginx: 

sudo apt install -y nginx

Создадим файл: 

sudo mcedit /etc/nginx/sites-available/php81_test

С содержимым: 

server {
listen 9999 default_server;
listen [::]:9999 default_server;


root /var/www/html;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

server_name _;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
}
}

Создадим символическую ссылку: 

ln -s /etc/nginx/sites-available/php81_test /etc/nginx/sites-enabled

Проверим конфигурацию Nginx: 

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Ошибок нет, так что можно спокойно перезапускать:

sudo service nginx restart

Проверим: 

https://192.168.1.42:9999

Страница загружается.

Создадим файл: 

echo "<?php echo phpinfo(); ?>" | sudo tee /var/www/html/test.php

Откроем:

https://192.168.1.42:9999/test.php

2022-05-03_23-34-13.png

Как видите, всё работает. 

Заключение

Сегодня мы рассмотрели установку PHP 8.1.5 из исходных текстов на Astra Linux Orel.

Установили все необходимые инструменты разработчика для сборки .

Сконфигурировали и запустили сборку проекта.

Установили PHP и создали файлы конфигурации.

Добавили возможность запуска php-fpm в качестве сервиса.

Установили nginx и настроили его для работы с php-fpm

Проверили работоспособность php с помощью phpinfo()

Прочитано 1912 раз Последнее изменение Среда, 04 мая 2022 13:00

Обсудить:

Сообщество ВКонтакте Группа в Telegram Сервер Discord Канал в ЯRUS
Топ-100