
Установка PHP 7.4 на Astra Linux Орел 2.12
Сегодня мы рассмотрим установку PHP версии 7.4 из исходного кода на дистрибутив Astra Linux Orel.
4.15.3-1-hardened #astra21 SMP Thu Aug 22 10:12:23 UTC 2019 x86_64 GNU/Linux.
Необходимость установки из исходного кода возникает из за того, что у Астры и репозитория https://sury.org различаются имена некоторых пакетов. Таким образом apt считает, что их версии различаются, хотя по факту они одинаковы. Что, в свою очередь, приводит к невозможности установки PHP 7.4.
Устанавливать PHP мы будем на только что установленную версию Астра Орел 2.12. При установке которой были выбраны только две категории:
- «Базовые средства»
- «Средства удаленного доступа SSH».
Пробная установка php 7.4
Для начала попробуем установить из репозиториев https://sury.org
Для начала обновим систему:
sudo apt update && sudo apt upgrade
Добавим репозитории sury.org
sudo apt -y install apt-transport-https ca-certificates lsb-release wget
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg echo "deb https://packages.sury.org/php/ stretch main" | sudo tee /etc/apt/sources.list.d/php.list
Запустим обновление
sudo apt update
Попробуем установить php 7.4
sudo apt -y install php7.4 php7.4-fpm php7.4-gd php7.4-mbstring php7.4-mysql php7.4-zip php7.4-bz2 php7.4-bcmath php7.4-intl php7.4-xml php7.4-ldap
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Некоторые пакеты невозможно установить. Возможно, вы просите невозможного,
или же используете нестабильную версию дистрибутива, где запрошенные вами
пакеты ещё не созданы или были удалены из Incoming.
Следующая информация, возможно, поможет вам:
Пакеты, имеющие неудовлетворённые зависимости:
php7.4 : Зависит: php7.4-common но он не будет установлен
php7.4-bcmath : Зависит: php-common (>= 1:81~) но 1:49 будет установлен
Зависит: php7.4-common (= 7.4.21-1+0~20210702.48+debian9~1.gbp9b7c1f) но он не будет установлен
php7.4-bz2 : Зависит: php-common (>= 1:81~) но 1:49 будет установлен
Зависит: php7.4-common (= 7.4.21-1+0~20210702.48+debian9~1.gbp9b7c1f) но он не будет установлен
php7.4-fpm : Зависит: php7.4-cli но он не будет установлен
Зависит: php7.4-common (= 7.4.21-1+0~20210702.48+debian9~1.gbp9b7c1f) но он не будет установлен
Зависит: php7.4-json но он не будет установлен
Зависит: php7.4-opcache но он не будет установлен
Зависит: libpcre2-8-0 (>= 10.32) но 10.22-3 будет установлен
php7.4-gd : Зависит: php-common (>= 1:81~) но 1:49 будет установлен
Зависит: php7.4-common (= 7.4.21-1+0~20210702.48+debian9~1.gbp9b7c1f) но он не будет установлен
php7.4-intl : Зависит: php-common (>= 1:81~) но 1:49 будет установлен
Зависит: php7.4-common (= 7.4.21-1+0~20210702.48+debian9~1.gbp9b7c1f) но он не будет установлен
php7.4-ldap : Зависит: php-common (>= 1:81~) но 1:49 будет установлен
Зависит: php7.4-common (= 7.4.21-1+0~20210702.48+debian9~1.gbp9b7c1f) но он не будет установлен
php7.4-mbstring : Зависит: php-common (>= 1:81~) но 1:49 будет установлен
Зависит: php7.4-common (= 7.4.21-1+0~20210702.48+debian9~1.gbp9b7c1f) но он не будет установлен
php7.4-mysql : Зависит: php-common (>= 1:81~) но 1:49 будет установлен
Зависит: php7.4-common (= 7.4.21-1+0~20210702.48+debian9~1.gbp9b7c1f) но он не будет установлен
php7.4-xml : Зависит: php-common (>= 1:81~) но 1:49 будет установлен
Зависит: php7.4-common (= 7.4.21-1+0~20210702.48+debian9~1.gbp9b7c1f) но он не будет установлен
php7.4-zip : Зависит: php-common (>= 1:81~) но 1:49 будет установлен
Зависит: php7.4-common (= 7.4.21-1+0~20210702.48+debian9~1.gbp9b7c1f) но он не будет установлен
Зависит: libzip4 (>= 1.3.2) но 1.1.2-1.1 будет установлен
E: Невозможно исправить ошибки, у вас отложены (held) битые пакеты.Как видите, появилось большое количество нарушенных зависимостей.
В интернете можно найти рекомендации отключить репозитории Астры и установить всё из репозиторием Debian. Я не рекомендую так делать, так как это может привести к мешанине пакетов в системе и неявным проблемам во время эксплуатации.
Всё выше сказанное не оставляет нам другого выхода, как установку PHP 7.4 из исходного кода.
Для начала отключим репозиторий sury.org для этого удалим файл репозитория:
sudo rm sudo tee /etc/apt/sources.list.d/php.list
Запустим
sudo apt update
Установка PHP 7.4.21 из исходного кода
Перейдем в домашнюю папку
cd ~
Скачаем исходные коды
wget https://www.php.net/distributions/php-7.4.21.tar.gz
Распакуем архив
tar -xzvf php-7.4.21.tar.gz
Сменим папку:
cd php-7.4.21
Установка пакетов разработчика для сборки PHP 7.4
Установим пакеты необходимы для компиляции и сборки PHP 7.4 из исходных кодов:
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
Запустим конфигурацию перед сборкой
Чтобы упростить себе жизнь создадим файл configure.sh в папке с исходным кодом с содержимым:
./configure --with-config-file-path=/etc/php/php7.4 \
--sysconfdir=/etc/php/php7.4 \
--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 \
--with-readline
Сделаем его исполняемым:
chmod +x configure.sh
Запустим.
Ждем окончания проверки, если всё прошло успешно, в консоли появится надпись:
+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+
Thank you for using PHP.
Мы готовы к началу сборки PHP 7.4
Запустим сборку
make
Дождемся появления надписи:
Build complete.
Don't forget to run 'make test'.
У меня сборка заняла 20 минут на виртуальной машине. На реальном сервере процесс может занять еще меньше времени. Можете запустить тест и отправить отчет, если тесты проваляться. У меня не прошел частично только один:
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)
Запустим установку
sudo make install
Дождемся окончания
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20190902/
Installing PHP CLI binary: /usr/local/bin/
Installing PHP CLI man page: /usr/local/php/man/man1/
Installing PHP FPM binary: /usr/local/sbin/
Installing PHP FPM defconfig: /etc/php/php7.4/
Installing PHP FPM man page: /usr/local/php/man/man8/
Installing PHP FPM status page: /usr/local/php/php/fpm/
Installing phpdbg binary: /usr/local/bin/
Installing phpdbg man page: /usr/local/php/man/man1/
Installing PHP CGI binary: /usr/local/bin/
Installing PHP CGI man page: /usr/local/php/man/man1/
Installing build environment: /usr/local/lib/php/build/
Installing header files: /usr/local/include/php/
Installing helper programs: /usr/local/bin/
program: phpize
program: php-config
Installing man pages: /usr/local/php/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment: /usr/local/lib/php/
[PEAR] Archive_Tar - already installed: 1.4.9
[PEAR] Console_Getopt - already installed: 1.4.3
[PEAR] Structures_Graph- already installed: 1.1.1
[PEAR] XML_Util - already installed: 1.4.5
[PEAR] PEAR - already installed: 1.10.12
Wrote PEAR system config file at: /usr/local/etc/pear.conf
You may want to add: /usr/local/lib/php to your php.ini include_path
/home/meria/php-7.4.21/build/shtool install -c ext/phar/phar.phar /usr/local/bin/phar.phar
ln -s -f phar.phar /usr/local/bin/phar
Installing PDO headers: /usr/local/include/php/ext/pdo/
Проверяем версию php:
php -v
PHP 7.4.21 (cli) (built: Jul 16 2021 12:20:19) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
/usr/local/sbin/php-fpm -v
PHP 7.4.21 (fpm-fcgi) (built: Jul 16 2021 12:20:48)
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
Мы успешно собрали PHP 7.4.21
Проверим нашу конфигурацию:
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 -lrt -lm -ldl -lxml2 -lssl -lcrypto -lsqlite3 -lz -lcurl -lssl -lcrypto -lxml2 -lonig -lsqlite3 -lxml2 -lcrypt -lxml2 -lxml2 -lxml2 -lz -lssl -lcrypto -lcrypt ]
--extension-dir [/usr/local/lib/php/extensions/no-debug-non-zts-20190902]
--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/php7.4]
--ini-dir []
--configure-options [--with-config-file-path=/etc/php/php7.4 --sysconfdir=/etc/php/php7.4 --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 --with-readline]
--version [7.4.21]
--vernum [70421]
Создадим папку для файлов конфигурации
sudo mkdir -p /etc/php/php7.4
Скопируем файлы конфигурации
sudo cp php.ini-development /etc/php/php7.4/php.ini
sudo cp /etc/php/php7.4/php-fpm.conf.default /etc/php/php7.4/php-fpm.conf
sudo cp /etc/php/php7.4/php-fpm.d/www.conf.default /etc/php/php7.4/php-fpm.d/www.conf
PHP 7.4 готов к запуску.
Запускаем php-fpm как сервис
Создадим для сервиса файл:
sudo mcedit /lib/systemd/system/php-7.4-fpm.service
С содержимым:
[Unit]
Description=The PHP 7.4 FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/var/run/php7.4-fpm.pid
ExecStart=/usr/local/sbin/php-fpm --nodaemonize --fpm-config /etc/php/php7.4/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
Включим сервис:
sudo systemctl enable php-7.4-fpm.service
Перезапустим:
sudo systemctl daemon-reload
Запустим сервис:
sudo systemctl start php-7.4-fpm.service
Проверим статус
sudo systemctl status php-7.4-fpm.service
● php-7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php-7.4-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-07-16 19:18:52 +11; 1min 2s ago
Main PID: 42919 (php-fpm)
Tasks: 3 (limit: 9830)
CGroup: /system.slice/php-7.4-fpm.service
├─42919 php-fpm: master process (/etc/php/php7.4/php-fpm.conf)
├─42920 php-fpm: pool www
└─42921 php-fpm: pool www
Сервис запущен и работает.
Проверка работоспособности php-fpm
Установим nginx
sudo apt install -y nginx
Заменим содержимое файла /etc/nginx/sites-available/default
На следующее:
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;
}
}
Проверим конфигурацию 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
Проверим:
http://192.168.1.42:9999
Страница загружается.
Создадим файл
sudo mcedit /var/www/html/test.php
С содержимым:
<?php echo phpinfo(); ?>
Откроем
http://192.168.1.42:9999/test.php
Как видите, всё работает.
Добавляем расширения на примере PHP-GD
Если вы внимательно посмотрите вывод phpinfo() вы поймете, что многие расширения не были установлены, давайте, для примера, добавим PHP-GD.
Перейдем в папку с исходным кодом php 7.4 и изменим скрипт конфигурации, добавив в файл configure.sh новые параметры:
--enable-gd \
--with-jpeg \
У нас получится
./configure --with-config-file-path=/etc/php/php7.4 \
--sysconfdir=/etc/php/php7.4 \
--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-readline
Запустим:
No package 'libpng' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables PNG_CFLAGS
and PNG_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
Как видите, не хватает библиотек, давайте их установим:
sudo apt install libpng-dev libjpeg-dev libwebp-dev libxpm-dev
Запустим configure.sh еще раз:
+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+
Thank you for using PHP.
Запустим сборку с установкой
sudo make install
Так как мы уже собирали PHP на этот раз процесс сборки займет намного меньше времени!
Ожидаем окончания сборки:
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20190902/
Installing PHP CLI binary: /usr/local/bin/
Installing PHP CLI man page: /usr/local/php/man/man1/
Installing PHP FPM binary: /usr/local/sbin/
Installing PHP FPM defconfig: skipping
Installing PHP FPM man page: /usr/local/php/man/man8/
Installing PHP FPM status page: /usr/local/php/php/fpm/
Installing phpdbg binary: /usr/local/bin/
Installing phpdbg man page: /usr/local/php/man/man1/
Installing PHP CGI binary: /usr/local/bin/
Installing PHP CGI man page: /usr/local/php/man/man1/
Installing build environment: /usr/local/lib/php/build/
Installing header files: /usr/local/include/php/
Installing helper programs: /usr/local/bin/
program: phpize
program: php-config
Installing man pages: /usr/local/php/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment: /usr/local/lib/php/
[PEAR] Archive_Tar - already installed: 1.4.9
[PEAR] Console_Getopt - already installed: 1.4.3
[PEAR] Structures_Graph- already installed: 1.1.1
[PEAR] XML_Util - already installed: 1.4.5
[PEAR] PEAR - already installed: 1.10.12
Wrote PEAR system config file at: /usr/local/etc/pear.conf
You may want to add: /usr/local/lib/php to your php.ini include_path
/home/meria/php-7.4.21/build/shtool install -c ext/phar/phar.phar /usr/local/bin/phar.phar
ln -s -f phar.phar /usr/local/bin/phar
Installing PDO headers: /usr/local/include/php/ext/pdo/
Перезапустим php-fpm
sudo service php-7.4-fpm restart
Проверим статус:
systemctl status php-7.4-fpm.service
Сервис запущен.
Обновим нашу тестовую страницу:
http://192.168.1.42:9999/test.php
PHP-GD установлен и поддержка всех форматов изображений активна!
Подобным образом, вы можете добавить нужные вам расширения.
Заключение
Сегодня мы рассмотрели установку PHP 7.4 из исходных текстов на Astra Linux.
Мы провели тестовую установку. Которая показала нам невозможность установки из репозиториев sury.org.
Мы скачали исходный код php 7.4.21.
Установили все необходимые инструменты разработчика для сборки PHP 7.4.21 на нашей системе.
Сконфигурировали и запустили сборку проекта.
Установили PHP и создали файлы конфигурации.
Добавили возможность запуска php-fpm в качестве сервиса.
Установили nginx и настроили его для работы с php-fpm
Проверили работоспособность php с помощью phpinfo()
Добавили расширение php-gd и пересобрали сам PHP 7.4.21.
Добавить комментарий