Содержание
Вскоре после выпуска пакета, вам понадобится его обновить.
Предположим, что в вашем пакете нашли ошибку (номер
#654321), и описываемую там проблему вы можете
решить. Для того, чтобы создать новую редакцию пакета, нужно:
Если исправление должно быть записано в виде новой заплаты, сделайте следующее:
запустите dquilt new
для присвоения
имени заплате;
название-ошибки.patch
запустите dquilt add
для объявления файла,
который должен быть изменён;
файл-с-ошибкой
исправьте ошибку в пакете исходного кода;
запустите dquilt refresh для записи исправления в файл
;
название-ошибки.patch
запустите dquilt header -e для добавления её описания;
Если для исправления требуется обновление существующей заплаты, сделайте следующее:
запустите dquilt pop
для того, чтобы откатить наложенную заплату
foo.patch;
foo.patch
исправьте проблему в старой заплате
;
foo.patch
запустите dquilt refresh для обновления заплаты
;
foo.patch
запустите dquilt header -e для обновления её описания;
запустите while dquilt push; do dquilt refresh; done для
применения всех заплат при удалении шероховатостей;
Добавьте новую редакцию в начало файла Debian
changelog, например, с помощью dch
-i или вручную с помощью dch -v
,
а затем добавьте комментарии с помощью текстового редактора [78].
версия-редакция
Включите краткое описание ошибки и её решение в список изменений
(changelog), сопроводив текстом Closes: #654321. Это
позволит автомагически закрыть сообщение об ошибке с
помощью программного обеспечения обслуживания архива в тот момент, когда ваш
пакет будет принят в архив Debian.
Повторите то, что делали выше, для исправления других ошибок, обновляя файл
Debian changelog с помощью dch по
мере надобности.
Повторите всё из Раздел 6.1, «Полная (пере)сборка» и Глава 7, Проверка пакета на наличие ошибок.
После проверки правильности, измените в changelog имя
выпуска с UNRELEASED на значение целевого дистрибутива
unstable (или даже на
experimental). [79]
Закачайте пакет, следуя Глава 9, Отправка пакета. На этот раз разница в том, что не будет включён оригинальный архив исходного кода, поскольку он не изменён и уже присутствует в архиве Debian.
Стоит упомянуть одну хитрость на случай, когда вы делаете локальный пакет
для эксперимента с пакетированием и не отправляете эту версию в официальный
архив, например,
.
Для плавного обновления рекомендуется создать запись в
1.0.1-1changelog со строкой версии вида
.
Вы можете не перегружать 1.0.1-1~rc1changelog записями о локальных
изменениях, объединяя их в одну для официального пакета. Об упорядочивании
версий строк смотрите Раздел 2.6, «Имя и версия пакета».
При подготовке пакетов нового авторского выпуска для архива Debian, вы должны сперва проверить новый авторский выпуск.
Начните с чтения файлов changelog,
NEWS и всей остальной документации, которая может
поставляться с новой версией.
Потом проверьте изменения между старым и новым исходным кодом программы, как описано ниже, чтобы найти что-нибудь подозрительное.
$ diff -urNfoo-старая-версияfoo-новая-версия
На изменения в некоторых автоматически сгенерированных файлах Autotools,
таких как missing, aclocal.m4,
config.guess, config.h.in,
config.sub, configure,
depcomp, install-sh,
ltmain.sh и Makefile.in, можно не
обращать внимания. Вы можете удалить их перед запуском
diff для проверки исходного кода.
Если пакет правильно собран
в новом формате foo3.0 (native) или 3.0
(quilt), то для подготовки пакета новой версии программы
достаточно переместить старый каталог debian в новый
исходный код. Это можно сделать запуском tar xvzf
/
в каталоге с новым исходным кодом [80]. Конечно, потребуется сделать несколько очевидных рутинных
операций.
путь/к/foo_старая-версия.debian.tar.gz
Скопируйте авторский исходный код в файл
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 sourcefoo... dpkg-source: info: extractingfooinfoo-старая-версияdpkg-source: info: unpackingfoo_старая-версия.orig.tar.gz dpkg-source: info: applyingfoo_старая-версия-1.debian.tar.gz $ ls -Ffoo-старая-версия/foo_старая-версия-1.debian.tar.gzfoo_старая-версия-1.dscfoo_старая-версия.orig.tar.gz $ wget http://example.org/foo/foo-новая-версия.tar.gz $ cdfoo-старая-версия$ uupdate -vновая-версия../foo-новая-версия.tar.gz $ cd ../foo-новая-версия$ while dquilt push; do dquilt refresh; done $ dch ... описание проведённых изменений
Если вы настроили файл debian/watch по описанию из
Раздел 5.22, «Файл watch», то можете пропустить команду
wget. Просто запустите uscan(1) в каталоге
вместо команды uupdate. Она
автомагически найдёт обновления исходного кода, скачает
его и запустит команду uupdate [81].
foo-старая-версия
Вы можете выпустить этот обновлённый исходный код, повторив то, что делали в Раздел 6.1, «Полная (пере)сборка», Глава 7, Проверка пакета на наличие ошибок и Глава 9, Отправка пакета.
При обновлении пакета обновлять стиль пакетирования необязательно. Но сделав
это, вы сможете полностью использовать возможности современной системы
debhelper и формата исходного кода
3.0 [82].
Если по какой-то причине требуется пересоздать удалённые шаблоны файлов, вы
можете ещё раз запустить dh_make с параметром
--addmissing в том же дереве исходного кода пакета
Debian, а затем отредактировать их должным образом.
Если в пакете файл debian/rules не переписан с
использованием команды dh из пакета debhelper v7+, то сделайте это. Обновите файл
debian/control соответствующим образом.
Если вы хотите переписать файл rules с использованием
dh, в котором сейчас используется механизм включения
Makefile из Common Debian Build System (cdbs), то для понимания его переменных настройки
DEB_* смотрите следующие документы:
локальная копия /usr/share/doc/cdbs/cdbs-doc.pdf.gz
Если у вас есть пакет исходного кода формата 1.0 без
файла , вы можете
обновить его до нового формата исходного кода foo.diff.gz3.0
(native), создав файл debian/source/format с
содержимым 3.0 (native). Остальные файлы
debian/* могут быть просто скопированы.
Если у вас есть пакет с исходным кодом формата 1.0 с
файлом , вы
можете обновить его до нового формата исходного кода foo.diff.gz3.0
(quilt), создав файл debian/source/format с
содержимым 3.0 (quilt). Остальные файлы
debian/* могут быть просто скопированы. Если нужно,
импортируйте файл big.diff, полученный командой
filterdiff -z -x '*/debian/*'
, в вашу
систему quilt [83].
foo.diff.gz > big.diff
Если в пакете используется другая система заплат, например, dpatch, dbs или cdbs с параметром -p0,
-p1 или -p2, перейдите на quilt, используя deb3, как
описано в http://bugs.debian.org/581186.
Если пакет был собран командой dh с параметром
--with quilt или командами
dh_quilt_patch и dh_quilt_unpatch,
уберите их и перейдите на использование нового формата пакетов исходного
кода 3.0 (native).
Проверьте DEP - Debian Enhancement Proposals и учтите ПРИНЯТЫЕ предложения.
Также вам нужно выполнить остальные задачи, описанные в Раздел 8.3, «Новый авторский выпуск».
Если авторские документы поставляются в старых кодировках, лучше преобразовать их в UTF-8.
Для перекодирования простых файлов используйте iconv(1).
iconv -f latin1 -t utf8foo_in.txt>foo_out.txt
Для перекодирования файлов HTML в простой текст в кодировке UTF-8 используйте w3m(1). Выполнение данной операции должно проводиться при включённой локали UTF-8.
LC_ALL=C.UTF-8 w3m -o display_charset=UTF-8 \
-cols 70 -dump -no-graph -T text/html \
< foo_in.html > foo_out.txt
Вот несколько замечаний по обновлению пакетов:
Не удаляйте старые записи из changelog (на первый
взгляд это очевидно, но были случаи случайного набора dch
вместо dch -i).
Существующие изменения Debian должны быть пересмотрены; выбросьте инструментарий, который включил автор (в той или иной форме) и не забудьте оставить инструментарий, который не был включён автором, пока не появится убедительной причины этого не делать.
Если в систему для сборки были внесены изменения (к счастью, вы узнаете об
этом при изучении авторских изменений), то при необходимости обновите
сборочные зависимости в файлах debian/rules и
debian/control.
Проверьте систему отслеживания ошибок (BTS) на случай, если кто-нибудь предоставил заплаты для исправления незакрытых ошибок.
Проверьте содержимое файла .changes и убедитесь, что вы
выполняете отправку в правильный дистрибутив, закрываемые ошибки перечислены
в поле Closes, поля Maintainer и
Changed-By совпадают, файл подписан GPG и т. д.
[78] Дату в нужном формате можно получить с помощью команды LANG=C date
-R.
[79] Если для выполнения изменения вы используете команду dch
-r, то убедитесь, что записали файл changelog
именно редактором.
[80] Если пакет собран в старом
формате foo1.0, то вместо этого можно запустить
zcat
/ в каталоге с новым исходным кодом. путь/к/foo_старая-версия.diff.gz|patch
-p1
[81] Если команда uscan скачает обновлённый исходный код, но
не запустит команду uupdate, исправьте файл
debian/watch таким образом, чтобы упоминание
debian uupdate было в конце URL.
[82] Не стоит беспокоиться или спорить, если ваш поручитель или другие сопровождающие возражают против обновления существующего стиля пакетирования. Есть более важные вещи.
[83]
Вы можете разделить файл big.diff на много маленьких
приращиваемых заплат с помощью команды splitdiff.