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"