Использование quilt для подготовки заплат

В прошлом я уже описывал несколько заплаток, которые накладываю на Zabbix для решения различных проблем:

Кроме этих описанных заплаток имеется ещё несколько специфичных заплаток, которые следаны для интеграции Zabbix со сторонними системами и нигде не описаны, т.к. вряд-ли кого-то заинтересуют.

Кроме того, накладывать заплатки приходится не только на сам Zabbix, но и на связанные с ним библиотеки:

Правки приходится делать в разных пакетах, не только связанных непосредственно с Zabbix, из-за чего я даже завёл репозиторий для доработанных пакетов. В заметке Создание своего репозитория Debian при помощи aptly можно найти ещё несколько примеров доработанных пакетов, доработке некоторых из которых были посвящены отдельные заметки.

Количество специфичных заплаток для Zabbix, с которыми приходится работать, со временем только увеличивается. Если aptly помогает упорядочить работу с большим количеством нестандартных пакетов, то quilt помогает упорядочить работу с большим количеством заплаток одного и того же пакета.

quilt формирует из заплаток стек, позволяя легко вносить обновления в любую из заплаток стека. Для обновления заплатки, погребённой под более поздними, можно отменить изменения, вносимые в исходный код заплатками, лежащими сверху, внести изменения в исходный код, обновить текущую заплатку, а потом снова наложить на код все вышестоящие заплатки.

Ниже кратко описаны основные команды quilt, которые могут пригодиться для управления заплатками.

Создаём новую заплатку:

$ quilt new permit-edit-maintenances

Добавляем в заплатку файлу, которые собираемся менять:

$ quilt add frontends/php/maintenance.php
$ quilt add frontends/php/include/classes/api/services/CMaintenance.php

Посмотреть список файлов, содержимое которых будет отслеживаться в заплате, можно при помощи команды:

$ quilt files

Чтобы изменения в файлах не отслеживались в заплате, можно воспользоваться такой командой:

$ quilt remove config.guess config.sub database/mysql/create.sql database/postgresql/create.sql database/sqlite3/create.sql

Редактируем файлы:

$ vim frontends/php/maintenance.php
$ vim frontends/php/include/classes/api/services/CMaintenance.php

Посмотреть получившуюся заплатку можно при помощи следующей команды:

$ quilt diff

Сохранить получившуюся заплатку в каталог debian/patches можно при помощи следующей команды:

$ quilt refresh

Список всех заплаток можно посмотреть при помощи команды:

$ quilt series

Текущая редактируемая заплата в выведенном списке будет подсвечена.

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

$ quilt pop

Для применения текущей заплаты и для перехода к следующей по списку можно воспользоваться командой:

$ quilt push

Импорт заплатки из внешнего источинка осуществяется следующим образом:

$ quilt import zabbix3_4_12_permit_edit_maintenances.patch

Сразу после импорта заплатку нужно применить:

$ quilt push

Не стоит продолжать импорт заплаток без применения, т.к. применяться они будут в обратном порядке - послденяя импортированная будет первой применённой. Это сбивает с толку и может вызывать проблемы, если заплатки зависят друг от друга.

Написать автору