Сборка из исходного кода. Собираем PHP 8.3 из исходного кода в Debian 12 Bookworm. Часть 1.
В предыдущей статье – мы рассмотрели установку PHP 8.3 после блокировки репозитория deb.sury.org
Каждый раз искать и настраивать зеркало не очень удобно, особенно если у вас множество серверов, которые необходимо обновлять. Да, можно сделать локальное зеркало репозитория, но нет гарантии, что завтра это зеркало будет по тем или иным причинам закрыто.
Чтобы не зависеть от внешних репозиториев можно просто собирать PHP 8.3 из исходного кода, создать на основе этой сборки свой локальный репозиторий и уже из него обновляться.
Сегодня мы рассмотрим сборку 8.3.10 из исходного кода. В будущих статьях на базе собранного проекта мы соберем .deb-пакет и создадим локальный apt-репозиторий.
Сборка из исходного кода
Установка требуемых пакетов
Обновим apt
su
apt update && apt upgrade
Установим требуемые пакеты:
su
apt install sudo
Добавим пользователя в группу sudo, в моем случае пользователь - user
sudo usermod -aG sudo user
Выйдем из сеанса
exit
Перезайдем, теперь если мы введем:
sudo mc
То успешно запустим mc от пользователя root!
Обновим пакеты
sudo apt install --yes build-essential curl libtool libssl-dev libcurl4-openssl-dev libxml2-dev libreadline8 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 unzip mc sudo
Я рекомендую выполнять сборку под обычным пользователем, поэтому если вы находитесь под root перейдите к обычному пользователю!
Загрузим исходный код
cd ~
wget https://github.com/php/php-src/archive/refs/tags/php-8.3.10.zip
Распакуем:
unzip php-8.3.10.zip
Перейдем в папку с исходным кодом:
cd php-src-php-8.3.10
Создадим скрипт для конфигурирования PHP
touch configure.sh && chmod +x configure.sh
Откроем файл для редактирования
mcedit configure.sh
Скопируем и вставим содержимое:
./buildconf --force
./configure --with-config-file-path=/etc/php/php8.3.10 \
--sysconfdir=/etc/php/php8.3.10 \
--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
Нажмем F2 сохраним и Esc для выхода
Запустим конфигурирования с помощью нашего скрипта:
./configure.sh
Если всё прошло хорошо, то у нас появится сообщение:
Thank you for using PHP.
Запустим сборку:
make
У меня на виртуальной машине, с SSD сбора заняла примерно 10 минут.
Установим:
sudo make install
Проверим версию:
php -v
PHP 8.3.10 (cli) (built: Jul 31 2024 06:05:15) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.10, 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 [ -lreadline -lncurses -lpq -lrt -lldap -llber -lrt -lm -lxml2 -lssl -lcrypto -lsqlite3 -lz -lcurl -lssl -lcrypto -lxml2 -lz -lpng16 -ljpeg -lfreetype -lonig -lsqlite3 -lxml2 -lxml2 -lxml2 -lxml2 -lz -lssl -lcrypto ]
--extension-dir [/usr/local/lib/php/extensions/no-debug-non-zts-20230831]
--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.3.10]
--ini-dir []
--configure-options [--with-config-file-path=/etc/php/php8.3.10 --sysconfdir=/etc/php/php8.3.10 --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.3.10]
--vernum [80310]
Создадим файлы конфигурации для новой версии:
sudo cp php.ini-development /etc/php/php8.3.10/php.ini
sudo cp /etc/php/php8.3.10/php-fpm.conf.default /etc/php/php8.3.10/php-fpm.conf
sudo cp /etc/php/php8.3.10/php-fpm.d/www.conf.default /etc/php/php8.3.10/php-fpm.d/www.conf
Запускаем php-fpm как службу
Создадим файл для запуска php-fpm:
sudo mcedit /lib/systemd/system/php-8.3.10-fpm.service
С содержимым:
[Unit]
Description=The PHP 8.3.10 FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/var/run/php8.3.10-fpm.pid
ExecStart=/usr/local/sbin/php-fpm --nodaemonize --fpm-config /etc/php/php8.3.10/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
Разрешим запуск службы:
sudo systemctl enable php-8.3.10-fpm.service
Перезапустим:
sudo systemctl daemon-reload
Запустим службу:
sudo systemctl start php-8.3.10-fpm.service
Проверим статус:
sudo systemctl status php-8.3.10-fpm.service
● php-8.3.10-fpm.service - The PHP 8.3.10 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php-8.3.10-fpm.service; enabled; preset: enabled)
Active: active (running) since Wed 2024-07-31 06:14:09 CDT; 27s ago
Main PID: 134420 (php-fpm)
Tasks: 3 (limit: 4643)
Memory: 8.1M
CPU: 17ms
CGroup: /system.slice/php-8.3.10-fpm.service
├─134420 "php-fpm: master process (/etc/php/php8.3.10/php-fpm.conf)"
├─134421 "php-fpm: pool www"
└─134422 "php-fpm: pool www"
Jul 31 06:14:09 debian-build systemd[1]: Started php-8.3.10-fpm.service - The PHP 8.3.10 FastCGI Process Manager.
Проверка работоспособности php-fpm
Установим nginx:
sudo apt install --yes nginx
Создадим файл:
sudo mcedit /etc/nginx/sites-available/php83_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;
}
}
Создадим символическую ссылку:
sudo ln -s /etc/nginx/sites-available/php83_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
Проверим:
http://192.168.1.36:9999
Страница загружается.
Создадим файл:
echo "<?php echo phpinfo(); ?>" | sudo tee /var/www/html/test.php
Проверим
http://192.168.1.36:9999/test.php
Всё загружается и работает, но данный способ далек от идеала, так как требует достаточно много времени, даже при использовании скриптов и создает ненужную нагрузку на сеть и процессор.
В одной из следующей статье мы упакуем полученный код в .deb пакет, для более простого распространения PHP 8.3.10 на другие сервера!
Заключение
Сегодня мы рассмотрели сборку PHP 8.3.10 из исходного кода в Debian 12 Bookworm:
Установили требуемые пакеты;
Загрузили исходный код PHP 8.3.10;
Произвели конфигурирование, сборку и установку;
Проверили версию и конфигурацию;
Создали службу для запуска php-fpm;
Проверили работоспособность службы, настроив тестовый сайт с использованием nginx.
Добавить комментарий