Debianize upstream `zip`-файл с`gbp` и `pristine-tar`

Руководство gbp рассказывает следующее:

Сначала создайте пустой репозиторий:

mkdir package-0.1
cd package-0.1
git init

Затем вы импортируете исходные тексты, разветвляетесь от ветки восходящей ветки и добавляете файлы Debian (например, через dh_make):

gbp import-orig -u 0.1 ../package-0.1.tar.gz
dh_make

Вот и все, вы сделали.

Но это не с zip потому что нет .orig.tar.gz, Вызов dh_make --createorig создает .orig.tar.gz, но это тогда включает в себя .git/ подкаталог, поэтому он недействителен.

Так же pristine-tar филиал отсутствует таким образом и pristine-tar commit не умеет обращаться zip файлы.

Как запустить пакет Debian, если апстрим предоставляет только zip-файл? Как обращаться pristine-tar в таком случае?

1 ответ

(это здесь еще немного не проверено)

Для удобства читателя это то, что я придумал. Я не уверен, что это BCP, но он работает. На Linux и, вероятно, CygWin тоже.

Мой текущий рабочий процесс по созданию репозитория Debian с нуля с gbp является:

Импорт вверх по течению

Вверх по течению обычно .orig.tar.gz, но следующие работы с ZIP тоже. Для всех поддерживаемых типов архивов, пожалуйста, смотрите man gbp-import-orig,

Установите несколько переменных

Это переменные, которые вы можете использовать копировать и вставлять со следующими строками рецепта.

PACKAGENAME=mypackagename
UPSTREAMVERSION=0.1.2.3-up4
UPSTREAMARCHIVE=../upstreampackage-$UPSTREAMVERSION.zip

# Following should start/end with a number and only contain
# numbers, lowercase letters and single dots (.)
MYDIST=stable
MYBASEVERSION=0example.com1

TEMPLATEGIT=https://github.com/hilbig/templates.git
TEMPLATEBRANCH=gbp

Создать git-репо

git init $PACKAGENAME
cd $PACKAGENAME

Инициализировать репо

git commit --allow-empty -m empty
git branch upstream
git fetch $TEMPLATEGIT $TEMPLATEBRANCH
git merge FETCH_HEAD

Первый импорт upstream

echo $PACKAGENAME | fakeroot gbp import-orig --upstream-version=$UPSTREAMVERSION $UPSTREAMARCHIVE

Создайте debian/

dh_make --indep -a -p ${PACKAGENAME}_$UPSTREAMVERSION
git add debian
git commit -m "dh_make --indep -a -p  ${PACKAGENAME}_$UPSTREAMVERSION"

Редактировать файлы в debian/

Теперь измените все файлы в debian/ для ваших нужд и удаленных ненужных файлов (подсказка: rm -f *.ex). Извините, я не нашел способа автоматизировать это правильно. Не изменяйте файлы за пределами debian/ так как они обрабатываются с использованием quilt / patchqueues (AKA debian/patches/) позже. Обязательно отредактируйте debian/changelog:

  • + Изменить unstable (в первой строке) к значению $MYDIST, (Это не больно, если вы этого не сделаете.)
  • Изменить текст * Initial release (Closes: #nnnn) ... к чему-то лучше, как debianized upstream XXX into package YYY,
  • Если последняя строка неверна, вы, вероятно, забыли установить свой обычный git config настройки (которые хранятся в ~/.gitconfig). Сделайте это сейчас: git config --global user.name "Ваше имя" git config --global user.email you@example.com

Если все настроено в debian/, затем передайте это:

git add -A debian
# Use "git status" to see, that only file in "debian/" are changed
git commit -m 'edited directory debian/'

Настроить gbp dch

Следующее - мусор. Я все еще пытаюсь выяснить, как это сделать правильно, потому что необходимые теги не создаются автоматически, как я думал, что они должны.

Если вы хотите использовать gbp dch --auto (что рекомендуется) это нужно правильно установить git tag , Как вы можете изменить формат этих тегов в debian/gbp.conf рекомендуется создать первый тег, используя gbp dch --since (вы можете создать его вручную, если хотите, но мы хотим автоматизировать, верно?) вот так:

gbp dch --commit -D "$MYRELEASE" -N "`git describe --tags --abbrev=0 upstream | sort | head -1 | sed s/^[^0-9]*//`-$MYBASEVERSION" --since HEAD^
vim debian/changelog
git commit --amend debian/changelog

Отправь его на свой git-сервер

При нажатии на ваш git сервер, обязательно всегда включайте теги:

git push origin --tags

Эти (некомментированные) теги используются для различных ссылок / целей отслеживания.

Разъяснения

  • git fetch заполняет FETCH_HEAD с веткой $TEMPLATEBRANCH от git Сделки рЕПО $TEMPLATEGIT, так что это может быть легко объединено. Это должно создать debian/gbp.conf с вашими любимыми настройками, которые включают pristine-tar будучи включенным.

  • echo $PACKAGENAME | fakeroot gbp ... делает 2 вещи:

    • gbp спросит имя пакета. К сожалению, нет опции командной строки для этого. Следовательно, это echo включил его, чтобы иметь возможность запускать его как пакетный.
    • fakeroot исправляет сбой, где вариант pristine-tar (который может отсутствовать в командной строке, если установлен в gbp.conf) создаст .tar файл с вашим пользователем вместо root:root,
  • dh_make потребности -a заселить debian/ каталог, поскольку там уже есть тот, который содержит только gbp.conf,

  • Если нет debian/gbp.conf при первом звонке gbp, то вам нужно добавить опцию pristine-tar в gbp import-orig, Без этого похоже, что это работает, но не будет полезного .orig.tar.gz (который может быть назван .bz2 или же .xz, тоже). gbp единственный инструмент распознавания .zip -файлы, так что у вас будут проблемы, если вы забудете об этом. К сожалению, название опции отличается в разных версиях gbp (или --git-pristine-tar или же --pristine-tar), так что лучше иметь его в gbp.conf,

Заметки:

  • В будущем будет gbp init чтобы улучшить эти шаги, однако мой текущий вариант gbp не включает это еще.

  • файл debian/gbp.conf будет выглядеть следующим образом. Выше это должно быть объединено через git merge FETCH_HEAD из филиала $TEMPLATEBRANCH репо $TEMPLATEGIT, Возможно создать свой собственный git хранилище шаблонов для этого см. также https://github.com/hilbix/templates/tree/gbp:

debian/gbp.conf:

[DEFAULT]
pristine-tar = True
debian-branch = master
debian-tag = v%(version)s

[dch]
full = True
git-author = True

[pq]
patch-num-format = PATCH-%04d-

[import-orig]
merge-mode = replace

Следуйте обычному рабочему процессу

После этого вы можете следовать обычному gbp рабочий процесс, поэтому можно использовать все другие типичные рецепты в Интернете о том, как изменить пакет Debian.

Вот как я это делаю (вроде).

Постройте пакет

Простые пакеты - это легко. Однако некоторым пакетам требуется нечто большее, например, компиляция для 64-битной системы с исходными текстами, а части даже для arch all, Так же .orig.tar.gz отсутствует после того, как вы все клонировали. Следовательно, вам нужно множество вариантов, чтобы справиться со всем этим правильно.

Далее предполагается, что вы хотите создать платформу Intel и (необязательно) предоставить 32-разрядную версию для более старых систем:

gbp buildpackage --dist="$MYDIST" --git-builder=sbuild --arch=amd64 --arch-all --source --force-orig-source
gbp buildpackage --dist="$MYDIST" --git-builder=sbuild --arch=i386

Заметки:

  • --git-builder=sbuild это пример. Если у вас есть проблемы, просто оставьте это в покое. Немного новее gbp также переименовал эту опцию.

  • Сборка часто оставляет некоторые артефакты. Выполните очистку с помощью (Внимание! Это безусловно удалит все незафиксированные изменения, если они есть!):

    git reset --hard

Используйте формат лоскутного одеяла (patchqueues), чтобы изменить восходящий

Если вам нужно изменить вещи за пределами debian/ это путь:

gbp pq import
# now edit everything here
# if you are happy with it:
gbp pq export

Вы определенно хотите использовать patchqueues, потому что вы не хотите касаться вышестоящей версии, которая была объединена с master, Таким образом, вы случайно не потеряете все свои изменения, когда появится новый апстрим, и более того, новые апстримы будут сливаться более чисто.

Обратите внимание, что gbp buildpackage знает о заплатках Они будут применены автоматически, поэтому вам не нужно применять их самостоятельно.

Создать новую версию

Перед созданием нового релиза вы, возможно, захотите очистить свой git зафиксировать журнал. Сделайте это с:

git rebase -i COMMIT

COMMIT означает первый коммит, с которым вы довольны git rebase это очень мощный инструмент, но будьте осторожны: не пытайтесь перебазировать дальше merge -Коммит, как те, что потом будут уничтожены. Если твой git История коммитов чиста (см. git log), создайте следующее debian/changelog:

gbp dch --commit -D $MYDIST

Оставь в покое --commit сделать коммит самостоятельно, или изменить варианты этого так, как вам удобно.

Импортировать новый апстрим

Установите параметры для нового апстрима и затем выполните:

echo $PACKAGENAME | fakeroot gbp import-orig --upstream-version=$UPSTREAMVERSION $UPSTREAMARCHIVE

Обратите внимание, что это не удастся, если ваш репо не является чистым. (git status --porcelain ничего не выводит).

Затем создайте новый debian/changlog запись для этого:

gbp dch --commit -D "$MYDIST" -N "`git describe --tags --abbrev=0 upstream | sort | head -1 | sed s/^[^0-9]*//)-$MYBASEVERSION"
Другие вопросы по тегам