Сборка из исходного кода. Собираем 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 -vPHP 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-configUsage: /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.inisudo cp /etc/php/php8.3.10/php-fpm.conf.default /etc/php/php8.3.10/php-fpm.confsudo 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 -tnginx: 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.
Добавить комментарий