Понедельник, 26.08.2024 19:04

Создаем пакет с обновлениями. Собираем PHP 8.3 из исходного кода в Debian 12 Bookworm. Часть 5.

Создаем пакет с обновлениями. Собираем PHP 8.3 из исходного кода в Debian 12 Bookworm. Часть 5.

Для программного обеспечения, особенно серверного, очень часто выпускаются срочные обновления (hotfix). При использовании локального репозитория сборка новой версии ложится на наши плечи.

Сегодня мы рассмотрим создание пакета с «обновлениями» для PHP 8.3.10 и добавление его в репозиторий.

В случае с PHP все версии являются фиксированными и при выходе исправлений просто увеличивается номер версии. На момент написания статьи не было выпущено новых версий, поэтому мы просто добавим пустой файл к пакету, чтобы проверить, что всё у нас работает. В реальной ситуации вы просто получаете новую версию исходного кода с github, создаете новый или копируете старый файл конфигурации и производите пересборку проекта.

Создаем папку для новой версии PHP 8.3.10 и собираем её 

При создании обновления для новой версии вам достаточно будет просто создать новую папку и поместить в нее исходный код с новой версией.

Обратите внимание, чтобы иметь возможность сборки обновления для старой версии, как вариант, по мере выхода новых патчей, сборки с новыми параметрами или расширениями, мы просто будем увеличивать цифру в самом конце.

Обратите внимание! Сборку проекта мы производим исключительно от обычного пользователя, а не от root!

Скопируем исходный код PHP 8.3.10 в новую папку

cp -r ~/php-src-php-8.3.10 ~/php-src-php-8.3.10-1

Перейдем в новую папку:

cd ~/php-src-php-8.3.10-1

Запустим конфигурирование и сборку:

./configure.sh
make -j4

Обратите внимание, не смотря на то, что мы устанавливаем «новую» версию, на самом деле мы заменяем содержимое уже установленной версии новым пакетом, поэтому установка будет все так же производится в папку /opt/php-8.3.10!

Установим новую версию:

sudo make install

Создаем deb-пакет

Скопируем файлы из папки с первой версией PHP 8.3.10, чтобы сэкономить время:

sudo mkdir -p /opt/build/php-8.3.10-1/opt
sudo cp -r /opt/php-8.3.10 /opt/build/php-8.3.10-1/opt
sudo cp -r /opt/build/php-8.3.10/DEBIAN /opt/build/php-8.3.10-1/DEBIAN
sudo cp -r /opt/build/php-8.3.10/opt/php-8.3.10/etc /opt/build/php-8.3.10-1/opt/php-8.3.10

Добавим новый файл:

sudo touch /opt/build/php-8.3.10-1/opt/php-8.3.10/bin/php83

Внесем изменения в файл:

sudo mcedit /opt/build/php-8.3.10-1/DEBIAN/control

Изменим строки:

Version: 8.3.10-1
Description: Обновление PHP 8.3.10-1

Обратите внимание, мы меняем только версию пакета и описание! Имя должно оставаться прежним!

Добавим строку в конец файла:

Replaces: php-8.3.10
Conflicts: php-8.3.10
Provides: php-8.3.10

Эти строки гарантируют, что при установке старый пакет с именем php-8.3.10 будет удален, причем буквально, все оригинальные файлы, кроме логов и измененных файлов конфигурации будут удалены, а на их место записаны новые из нашего нового пакета!

Сделаем копию файла сборки:

sudo cp /opt/build/build.sh /opt/build/build-1.sh

Изменим файл:

sudo mcedit /opt/build/build-1.sh

На содержимое:

dpkg-deb --build /opt/build/php-8.3.10-1 /opt/build/php-8.3.10-1.deb
scp -i ~/.ssh/testvm /opt/build/php-8.3.10-1.deb user@192.168.1.38:/home/user

Запустим:

sudo /opt/build/build-1.sh

Тестируем deb-пакет

Перейдем на тестовый сервер и сделаем контрольную точку.

Проверим текущую версию:

apt list --installed | grep php
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

php-8.3.10/unknown,now 8.3.10 amd64 [installed]

Запустим:

su
sudo dpkg -i php-8.3.10-1.deb
(Reading database ... 33827 files and directories currently installed.)
Preparing to unpack php-8.3.10-1.deb ...
Unpacking php-8.3.10 (8.3.10-1) over (8.3.10) ...
Setting up php-8.3.10 (8.3.10-1) ...

В случае, если мы просто обновляем пакет, можно использовать и dpkg!

Проверим:

ls /opt/php-8.3.10/bin/php83
/opt/php-8.3.10/bin/php83

Запустим:

apt list --installed | grep php
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

php-8.3.10-1/now 8.3.10-1 amd64 [installed,local]

Теперь у нас установлена новая версия.

Тестируем установку из локального apt-репозитория

Вернем контрольную точку тестовой виртуальной машины, которую мы сделали и проверим проверим установку из локального apt-хранилища.

Перейдем на сервер сборки.

Скопируем собранный пакет в папку нашего репозитория:

sudo cp /opt/build/php-8.3.10-1.deb /var/www/html/repo/deb

Пересоздадим репозиторий:

sudo /opt/build/make-repo.sh

dpkg-scanpackages: info: Wrote 2 entries to output Packages file.

На этот раз в репозиторий были добавлены два пакета.

На тестовой машине откатим контрольную точку, проверим:

apt list --installed | grep php
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

php-8.3.10/unknown,now 8.3.10 amd64 [installed]

Запустим:

su
apt update
Get:1 http://192.168.1.36/repo  InRelease [2,007 B]
Get:2 http://192.168.1.36/repo  Packages [609 B]
Hit:3 http://deb.debian.org/debian bookworm InRelease
Hit:4 http://security.debian.org/debian-security bookworm-security InRelease
Get:5 http://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
Fetched 58.1 kB in 2s (33.4 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
1 package can be upgraded. Run 'apt list --upgradable' to see it.

Отлично, у нас ест одно обновление:

apt list --upgradable
Listing... Done
php-8.3.10/unknown 8.3.10-1 amd64 [upgradable from: 8.3.10]
N: There is 1 additional version. Please use the '-a' switch to see it

Запустим:

apt upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  php-8.3.10
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 51.3 MB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://192.168.1.36/repo  php-8.3.10 8.3.10-1 [51.3 MB]
Fetched 51.3 MB in 0s (183 MB/s)
Reading changelogs... Done
(Reading database ... 33827 files and directories currently installed.)
Preparing to unpack .../php-8.3.10_8.3.10-1_amd64.deb ...
Unpacking php-8.3.10 (8.3.10-1) over (8.3.10) ...
Setting up php-8.3.10 (8.3.10-1) ...

Проверим:

ls /opt/php-8.3.10/bin/php83
/opt/php-8.3.10/bin/php83

Запустим:

systemctl status php-8.3.10-fpm
● 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; prese>
     Active: active (running) since Wed 2024-08-14 20:42:31 EDT; 2 days ago
   Main PID: 1131 (php-fpm)
      Tasks: 3 (limit: 1020)
     Memory: 8.4M
        CPU: 1.314s
     CGroup: /system.slice/php-8.3.10-fpm.service
             ├─1131 "php-fpm: master process (/opt/php-8.3.10/etc/php-fpm.conf)"
             ├─1134 "php-fpm: pool www"
             └─1135 "php-fpm: pool www"
php -v
PHP 8.3.10 (cli) (built: Aug  8 2024 22:32:36) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.10, Copyright (c) Zend Technologies
apt list --installed | grep php
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

php-8.3.10/unknown,now 8.3.10-1 amd64 [installed]

У нас установлен новый пакет.

Так же мы можем проверить установку на чистый тестовый сервер, для этого откатим виртуальную машину на соответствующую контрольную точку.

Запустим:

su
apt install -y curl sudo
curl -fsSL http://192.168.1.36/php.x | sudo -E bash -

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

apt list --installed | grep php
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

php-8.3.10/unknown,now 8.3.10-1 amd64 [installed]

Как видите, теперь автоматически устанавливается самая последняя версия PHP!

Заключение

Сегодня мы создали deb-пакет с обновлением для PHP 8.3.10 для нашего локального репозитория:

Создали папку с «новым» исходным кодом php-src-php-8.3.10-1;

Сконфигурировали и собрали новую версию;

Внесли изменение в файл DEBIAN/control;

Собрали deb-пакет и протестировали его установку на тестовом сервере;

Пересобрали локальный репозиторий и протестировали установку обновленного пакета.

Категория Debian
Теги Debian PHP php83

Добавить комментарий

Простой текст

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.
Просмотров: 152