Суббота, 17 июля 2021 18:54

Установка PHP 7.4 на Astra Linux Орел 2.12

Россия
Оцените материал
(0 голосов)

Сегодня мы рассмотрим установку из исходного 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

2021-07-16_16-33-08.png

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

Добавляем расширения на примере 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

2021-07-16_16-56-28.png

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.

Прочитано 932 раз Последнее изменение Воскресенье, 03 октября 2021 17:06