Содержание
Вскоре после выпуска пакета, вам понадобится его обновить.
Предположим, что в вашем пакете нашли ошибку (номер
#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
,
а затем добавьте комментарии с помощью текстового редактора [83].
версия
-редакция
Включите краткое описание ошибки и её решение в список изменений
(changelog), сопроводив текстом Closes: #654321
. Это
позволит автомагически закрыть сообщение об ошибке с
помощью программного обеспечения обслуживания архива в тот момент, когда ваш
пакет будет принят в архив Debian.
Повторите то, что делали выше, для исправления других ошибок, обновляя файл
Debian changelog
с помощью dch
по
мере надобности.
Повторите всё из Раздел 6.1, «Полная (пере)сборка» и Глава 7, Проверка пакета на наличие ошибок.
После проверки правильности, измените в changelog
имя
выпуска с UNRELEASED
на значение целевого дистрибутива
unstable
(или даже на
experimental
). [84]
Закачайте пакет, следуя Глава 8, Отправка пакета. На этот раз разница в том, что не будет включён оригинальный архив исходного кода, поскольку он не изменён и уже присутствует в архиве Debian.
Стоит упомянуть одну хитрость на случай, когда вы делаете локальный пакет
для эксперимента с пакетированием и не отправляете эту версию в официальный
архив, например,
.
Для плавного обновления рекомендуется создать запись в
1.0.1
-1
changelog
со строкой версии вида
.
Вы можете не перегружать 1.0.1
-1~rc1
changelog
записями о локальных
изменениях, объединяя их в одну для официального пакета. Об упорядочивании
версий строк смотрите Раздел 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 для проверки исходного кода.
Если пакет
правильно собран
в новом формате foo
3.0 (native)
или 3.0
(quilt)
, то для подготовки пакета новой версии программы
достаточно переместить старый каталог debian
в новый
исходный код. Это можно сделать запуском tar xvzf
/
в каталоге с новым исходным кодом [85]. Конечно, потребуется сделать несколько очевидных рутинных
операций.
путь
/к
/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: extractingfoo
infoo
-старая-версия
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 [86].
foo
-старая-версия
Вы можете выпустить этот обновлённый исходный код, повторив то, что делали в Раздел 6.1, «Полная (пере)сборка», Глава 7, Проверка пакета на наличие ошибок и Глава 8, Отправка пакета.
При обновлении пакета обновлять стиль пакетирования необязательно. Но сделав
это, вы сможете полностью использовать возможности современной системы
debhelper
и формата исходного кода
3.0
[87].
Если по какой-то причине требуется пересоздать удалённые шаблоны файлов, вы
можете ещё раз запустить 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 [88].
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 и учтите ПРИНЯТЫЕ предложения.
Также вам нужно выполнить остальные задачи, описанные в Раздел 9.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 и т. д.
[83] Дату в нужном формате можно получить с помощью команды LANG=C date
-R
.
[84] Если для выполнения изменения вы используете команду dch
-r
, то убедитесь, что записали файл changelog
именно редактором.
[85] Если пакет
собран в старом
формате foo
1.0
, то вместо этого можно запустить
zcat
/
в каталоге с новым исходным кодом. путь
/к
/foo
_старая-версия
.diff.gz|patch
-p1
[86] Если команда uscan скачает обновлённый исходный код, но
не запустит команду uupdate, исправьте файл
debian/watch
таким образом, чтобы упоминание
debian uupdate
было в конце URL.
[87] Не стоит беспокоиться или спорить, если ваш поручитель или другие сопровождающие возражают против обновления существующего стиля пакетирования. Есть более важные вещи.
[88]
Вы можете разделить файл big.diff
на много маленьких
приращиваемых заплат с помощью команды splitdiff.