Содержание
The rewrite of this tutorial document with updated contents and more practical examples is available as Guide for Debian Maintainers. Please use this new tutorial as the primary tutorial document.
Вскоре после выпуска пакета, вам понадобится его обновить.
Предположим, что в вашем пакете нашли ошибку (номер
#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
,
а затем добавьте комментарии с помощью текстового редактора [76].
версия
-редакция
Включите краткое описание ошибки и её решение в список изменений
(changelog), сопроводив текстом Closes: #654321
. Это
позволит автомагически закрыть сообщение об ошибке с
помощью программного обеспечения обслуживания архива в тот момент, когда ваш
пакет будет принят в архив Debian.
Повторите то, что делали выше, для исправления других ошибок, обновляя файл
Debian changelog
с помощью dch
по
мере надобности.
Повторите всё из Раздел 6.1, «Полная (пере)сборка» и Глава 7, Проверка пакета на наличие ошибок.
После проверки правильности, измените в changelog
имя
выпуска с UNRELEASED
на значение целевого дистрибутива
unstable
(или даже на
experimental
). [77]
Upload the package as in Глава 9, Отправка пакета. The difference is that this time, the original source archive won't be included, as it hasn't been changed and it already exists in the Debian archive.
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.,
.
For smoother upgrades, it is a good idea to create a
1.0.1
-1
changelog
entry with a version string such as
.
You may unclutter 1.0.1
-1~rc1
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 -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
/
в каталоге с новым исходным кодом [78]. Конечно, потребуется сделать несколько очевидных рутинных
операций:
путь
/к
/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.21, «Файл watch
», то можете пропустить команду
wget. Просто запустите uscan(1) в каталоге
вместо команды uupdate. Она
автомагически найдёт обновления исходного кода, скачает
его и запустит команду uupdate [79].
foo
-старая-версия
Вы можете выпустить этот обновлённый исходный код, повторив то, что делали в Раздел 6.1, «Полная (пере)сборка», Глава 7, Проверка пакета на наличие ошибок и Глава 9, Отправка пакета.
При обновлении пакета обновлять стиль пакетирования необязательно. Но сделав
это, вы сможете полностью использовать возможности современной системы
debhelper
и формата исходного кода
3.0
[80].
Если по какой-то причине требуется пересоздать удалённые шаблоны файлов, вы
можете ещё раз запустить 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 [81].
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 (quilt)
.
Проверьте 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=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:
Не удаляйте старые записи из changelog
(на первый
взгляд это очевидно, но были случаи случайного набора dch
вместо dch -i
).
Существующие изменения Debian должны быть пересмотрены; выбросьте инструментарий, который включил автор (в той или иной форме) и не забудьте оставить инструментарий, который не был включён автором, пока не появится убедительной причины этого не делать.
Если в систему для сборки были внесены изменения (к счастью, вы узнаете об
этом при изучении авторских изменений), то при необходимости обновите
сборочные зависимости в файлах debian/rules
и
debian/control
.
Проверьте систему отслеживания ошибок (BTS) на случай, если кто-нибудь предоставил заплаты для исправления незакрытых ошибок.
Проверьте содержимое файла .changes
и убедитесь, что вы
выполняете отправку в правильный дистрибутив, закрываемые ошибки перечислены
в поле Closes
, поля Maintainer
и
Changed-By
совпадают, файл подписан GPG и т. д.
[76] Дату в нужном формате можно получить с помощью команды LANG=C date
-R
.
[77] Если для выполнения изменения вы используете команду dch
-r
, то убедитесь, что записали файл changelog
именно редактором.
[78] Если пакет
собран в старом
формате foo
1.0
, то вместо этого можно запустить
zcat
/
в каталоге с новым исходным кодом. путь
/к
/foo
_старая-версия
.diff.gz|patch
-p1
[79] Если команда uscan скачает обновлённый исходный код, но
не запустит команду uupdate, исправьте файл
debian/watch
таким образом, чтобы упоминание
debian uupdate
было в конце URL.
[80] Не стоит беспокоиться или спорить, если ваш поручитель или другие сопровождающие возражают против обновления существующего стиля пакетирования. Есть более важные вещи.
[81]
Вы можете разделить файл big.diff
на много маленьких
приращиваемых заплат с помощью команды splitdiff.