6. Патчі для пакетів
Іноді розробникам пакету Ubuntu треба змінити вихідний код апстріму, щоб змусити його працювати в Ubuntu належним чином. Приклади включають патчі для апстрімів, які ще не потрапили у версію релізу, або зміни до систем білдів апстріму, необхідні лише для їхнього складання на Ubuntu. Ми змінюватимемо вихідний код апстріму безпосередньо, але такий метод робить більш складним подальше видалення патчів, коли апстрім вже застосував їх, також ускладнюючи вилучення змін для їх відправлення в проект апстріму. Натомість, ми будемо зберігати ці зміни як окремі патчі у формі diff файлів.
Існують різні способи роботи з патчами для пакетів Debian. На щастя, ми зупинимося на одній системі Quilt, яка зараз використовується більшістю пакетів.
Давайте візьмемо як приклад пакет kamoso у Trusty:
Патчі зберігаються в debian/patches. Цей пакет має один патч kubuntu_01_fix_qmax_on_armel.diff для виправлення помилки компіляції на платформі ARM. Цьому патчу надано ім'я, що описує, що він робить, номер патча по порядку (щоб уникнути плутанини, якщо два патчі мають однакове ім'я) і, в даному випадку, команда Kubuntu додала свій власний префікс, щоб показати, що патч походить від них, а не від Debian.
Порядок застосування патчів зберігається у debian/patches/series.
6.1. Патчі за допомогою Quilt¶
Перед роботою із Quilt потрібно вказати цій системі, де шукати патчі. Додайте в
І джерело файлу для застосування нового експорту:
За замовчуванням всі патчі застосовуються вже з UDD витягів або пакетів, що завантажуються. Ви можете перевірити це за допомогою:
Якщо ви хочете видалити патч, потрібно виконати pop:
А щоб застосувати патч, використовуйте push :
6.2. Додавання нового патчу¶
Щоб додати новий патч, потрібно вказати Quilt створити новий патч, повідомити йому, які файли цей патч повинен змінити, відредагувати файли, а потім оновити патч:
Крок quilt add важливий: якщо ви забудете його зробити файли не потраплять у патч.
Тепер зміни будуть в debian/patches/kubuntu_02_program_description.diff , а файл series буде додано інформацію про новий патч. Ви повинні додати новий файл до вихідних файлів для пакета:
Quilt містить свої мета-дані в директорії .pc/, тому зараз вам потрібно додати пакет і її. Це має бути покращено у майбутньому.
6.3. Заголовки патчів¶
Опис того, що робить патч. Має формат, аналогічний полю Description в debian/control : перший рядок містить короткий опис, що починається з малої літери, інші рядки містять більш довгий опис з пробілом як відступ.
Звідки прийшов цей патч (наприклад, upstream), якщо заголовок Author відсутній.
Посилання на інформацію про помилку на Launchpad, переважно, в короткій формі (на зразок https://bugs.launchpad.net/bugs/XXXXXXX). Якщо також є звіти про помилки в апстримі або системах відстеження помилок Debian, додайте заголовки Bug або Bug-Debian.
Чи був патч передано в апстрім. Значення: “yes”, “no” або “not-needed”.
Дата останньої ревізії (у формі "РРРР-ММ-ДД").
6.4. Оновлення до нових версій з апстріму¶
Щоб виконати оновлення до останньої версії, ви можете використовувати bzr merge-upstream :
Під час запуску цієї команди відбудеться відкат усіх патчів, оскільки вони можуть стати застарілими. Можливо, потрібно їх оновити для відповідності новому джерелу апстріму, або потрібно видалити їх разом. Для полегшення перевіркипроблем застосовуйте патчі по одному.
Якщо для патча вказано it can be reverse-applied , то патч вже був застосований апстрімом, так що ми можемо видалити цей патч:
Непоганою думкою буде виконати refresh, це оновить патч щодо змін вихідного коду в апстрімі:
Потім виконайте фіксацію, як завжди:
6.5. Створення пакета з Quilt¶
Сучасні пакети використовують Quilt за промовчанням, це вбудовано у формат вихідних файлів пакета. Перевірте, чи в debian/source/format вказано 3.0 (quilt) .
Для більш старих пакетів, які використовують формат 1.0, необхідно використовувати Quilt явно, зазвичай, за допомогою включення make-фала в debian/rules .
6.6. Конфігурація Quilt¶
Ви можете скористатися файлом
/.quiltrc для налаштування quilt. Ось кілька опцій, які можуть бути корисними при використанні quilt з пакетами Debian:
6.7. Інші системи керування патчами¶
Інші системи патчингу, що використовуються в пакетах, включають dpatch і cdbs simple-patchsys, принцип роботи яких схожий на Quilt - патчі зберігаються в debian/patches, але для їх застосування, скасування або створення потрібні інші команди. Ви можете дізнатися, яка система патчингу використовується в пакеті за допомогою команди what-patch (в пакеті ubuntu-dev-tools). Ви можете використовувати edit-patch , показаний у попередніх розділах, як надійний спосіб роботи з усіма системами.
У старіших пакетах зміни будуть включені безпосередньо до джерел і зберігатимуться у вихідному файлі diff.gz. Це робить складнішим процес оновлення до нових версій апстріму або відмінності між патчами - краще уникати.
Не змінюйте систему патчів, не обговоривши це з командою Ubuntu, яка супроводжує Debian або має відношення до справи.Якщо існуючої системи немає патчів, можете додати Quilt.