Глава 8. Обновление пакета

Содержание

8.1. Новая редакция Debian
8.2. Изучение нового авторского выпуска
8.3. Новый авторский выпуск
8.4. Обновление стиля пакетирования
8.5. Преобразование в UTF-8
8.6. Замечания по обновлению пакетов

Вскоре после выпуска пакета, вам понадобится его обновить.

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

One tricky case can occur when you make a local package, to experiment with the packaging before uploading the normal version to the official archive, e.g., 1.0.1-1. For smoother upgrades, it is a good idea to create a changelog entry with a version string such as 1.0.1-1~rc1. You may unclutter changelog by consolidating such local change entries into a single entry for the official package. See Раздел 2.6, «Имя и версия пакета» for the order of version strings.

When preparing packages of a new upstream release for the Debian archive, you must check the new upstream release first.

Начните с чтения файлов changelog, NEWS и всей остальной документации, которая может поставляться с новой версией.

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

$ diff -urN foo-старая-версия foo-новая-версия

На изменения в некоторых автоматически сгенерированных файлах Autotools, таких как missing, aclocal.m4, config.guess, config.h.in, config.sub, configure, depcomp, install-sh, ltmain.sh и Makefile.in, можно не обращать внимания. Вы можете удалить их перед запуском diff для проверки исходного кода.

Если пакет foo правильно собран в новом формате 3.0 (native) или 3.0 (quilt), то для подготовки пакета новой версии программы достаточно переместить старый каталог debian в новый исходный код. Это можно сделать запуском tar xvzf /путь/к/foo_старая-версия.debian.tar.gz в каталоге с новым исходным кодом [79]. Конечно, потребуется сделать несколько очевидных рутинных операций:

  • Скопируйте авторский исходный код в файл foo_новая-версия.orig.tar.gz.

  • Обновите файл Debian changelog с помощью dch -v новая-версия-1.

    • Добавьте пометку New upstream release.

    • Лаконично опишите изменения в новом авторском выпуске, которые исправляют найденные ошибки, и закройте эти ошибки, добавляя Closes: #номер_ошибки.

    • Лаконично опишите изменения в новом авторском выпуске, сделанные сопровождающим, которые исправляют найденные ошибки, и закройте эти ошибки, добавляя Closes: #номер_ошибки.

  • запустите while dquilt push; do qduilt refresh; done для применения всех заплат при удалении шероховатостей.

Если наложение/слияние произошло с ошибками, изучите ситуацию (сведения есть в файлах .rej).

  • Если применяемая заплата к исходному коду была интегрирована в авторский исходный код, то

    • выполните dquilt delete для её удаления.

  • Если применяемая заплата к исходному коду конфликтует с новыми изменениями в авторском исходном коде, то

    • выполните dquilt push -f для наложения старых заплат с отбрасыванием конфликтующих baz.rej.

    • Исправьте файл baz ручным копированием нужных строки из baz.rej.

    • запустите dquilt refresh для обновления заплаты.

  • Продолжайте, как обычно, командой while dquilt push; do dquilt refresh; done.

Это может быть автоматизировано с помощью команды uupdate(1):

$ apt-get source foo
...
dpkg-source: info: extracting foo in foo-старая-версия
dpkg-source: info: unpacking foo_старая-версия.orig.tar.gz
dpkg-source: info: applying foo_старая-версия-1.debian.tar.gz
$ ls -F
foo-старая-версия/
foo_старая-версия-1.debian.tar.gz
foo_старая-версия-1.dsc
foo_старая-версия.orig.tar.gz
$ wget http://example.org/foo/foo-новая-версия.tar.gz
$ cd foo-старая-версия
$ uupdate -v новая-версия ../foo-новая-версия.tar.gz
$ cd ../foo-новая-версия
$ while dquilt push; do dquilt refresh; done
$ dch
... описание проведённых изменений

Если вы настроили файл debian/watch по описанию из Раздел 5.21, «Файл watch», то можете пропустить команду wget. Просто запустите uscan(1) в каталоге foo-старая-версия вместо команды uupdate. Она автомагически найдёт обновления исходного кода, скачает его и запустит команду uupdate [80].

Вы можете выпустить этот обновлённый исходный код, повторив то, что делали в Раздел 6.1, «Полная (пере)сборка», Глава 7, Проверка пакета на наличие ошибок и Глава 9, Отправка пакета.

При обновлении пакета обновлять стиль пакетирования необязательно. Но сделав это, вы сможете полностью использовать возможности современной системы debhelper и формата исходного кода 3.0 [81].

  • Если по какой-то причине требуется пересоздать удалённые шаблоны файлов, вы можете ещё раз запустить dh_make с параметром --addmissing в том же дереве исходного кода пакета Debian, а затем отредактировать их должным образом.

  • Если в пакете файл debian/rules не переписан с использованием команды dh из пакета debhelper v7+, то сделайте это. Обновите файл debian/control соответствующим образом.

  • Если вы хотите переписать файл rules с использованием dh, в котором сейчас используется механизм включения Makefile из Common Debian Build System (cdbs), то для понимания его переменных настройки DEB_* смотрите следующие документы:

  • Если у вас есть пакет исходного кода формата 1.0 без файла foo.diff.gz, вы можете обновить его до нового формата исходного кода 3.0 (native), создав файл debian/source/format с содержимым 3.0 (native). Остальные файлы debian/* могут быть просто скопированы.

  • Если у вас есть пакет с исходным кодом формата 1.0 с файлом foo.diff.gz, вы можете обновить его до нового формата исходного кода 3.0 (quilt), создав файл debian/source/format с содержимым 3.0 (quilt). Остальные файлы debian/* могут быть просто скопированы. Если нужно, импортируйте файл big.diff, полученный командой filterdiff -z -x '*/debian/*' foo.diff.gz > big.diff, в вашу систему quilt [82].

  • Если в пакете используется другая система заплат, например, dpatch, dbs или cdbs с параметром -p0, -p1 или -p2, перейдите на quilt, используя deb3, как описано в http://bugs.debian.org/581186.

  • Если пакет был собран командой dh с параметром --with quilt или командами dh_quilt_patch и dh_quilt_unpatch, уберите их и перейдите на использование нового формата пакетов исходного кода 3.0 (quilt).

Проверьте DEP - Debian Enhancement Proposals и учтите ПРИНЯТЫЕ предложения.

Также вам нужно выполнить остальные задачи, описанные в Раздел 8.3, «Новый авторский выпуск».

Если авторские документы поставляются в старых кодировках, лучше преобразовать их в UTF-8.

  • Для перекодирования простых файлов используйте iconv(1).

    iconv -f latin1 -t utf8 foo_in.txt > foo_out.txt
    
  • Для перекодирования файлов HTML в простой текст в кодировке UTF-8 используйте w3m(1). Выполнение данной операции должно проводиться при включённой локали UTF-8.

    LC_ALL=en_US.UTF-8 w3m -o display_charset=UTF-8 \
            -cols 70 -dump -no-graph -T text/html \
            < foo_in.html > foo_out.txt
    

Here are a few reminders for updating packages:



[77] Дату в нужном формате можно получить с помощью команды LANG=C date -R.

[78] Если для выполнения изменения вы используете команду dch -r, то убедитесь, что записали файл changelog именно редактором.

[79] Если пакет foo собран в старом формате 1.0, то вместо этого можно запустить zcat /путь/к/foo_старая-версия.diff.gz|patch -p1 в каталоге с новым исходным кодом.

[80] Если команда uscan скачает обновлённый исходный код, но не запустит команду uupdate, исправьте файл debian/watch таким образом, чтобы упоминание debian uupdate было в конце URL.

[81] Не стоит беспокоиться или спорить, если ваш поручитель или другие сопровождающие возражают против обновления существующего стиля пакетирования. Есть более важные вещи.

[82] Вы можете разделить файл big.diff на много маленьких приращиваемых заплат с помощью команды splitdiff.