(这里还有点未经测试)
为了读者的利益,这是我想出的。我不确定这是 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
上游首次导入
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/
因为稍后会使用被子/补丁队列(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 "Your 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
这些(未注释的)标签用于各种参考/跟踪目的。
解释
使用来自repo的分支git fetch
填充,因此可以轻松合并。这应该使用您喜欢的设置创建,包括启用。FETCH_HEAD
$TEMPLATEBRANCH
git
$TEMPLATEGIT
debian/gbp.conf
pristine-tar
echo $PACKAGENAME | fakeroot gbp ...
做两件事:
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
or .xz
)。
gbp
是唯一识别.zip
-files 的工具,因此如果您忘记了这一点,您会遇到一些麻烦。不幸的是,选项的名称在gbp
(--git-pristine-tar
或--pristine-tar
)的版本之间有所不同,因此最好将其放在gbp.conf
.
笔记:
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
笔记:
使用被子格式(patchqueues)改变上游
如果您需要更改 之外的内容debian/
,这是要走的路:
gbp pq import
# now edit everything here
# if you are happy with it:
gbp pq export
您肯定想要使用补丁队列,因为您不想接触合并到master
. 这样,当新的上游出现时,您不会意外丢失所有更改,而且新的上游将更干净地合并。
请注意,gbp buildpackage
知道补丁队列。它们将自动应用,因此您无需自己应用它们。
创建新版本
在创建新版本之前,您可能想要清理git
提交日志。这样做:
git rebase -i COMMIT
COMMIT
代表您满意的第一个提交。 git rebase
是一个非常强大的工具,但要注意:不要尝试在merge
-Commits 之外进行 rebase,因为那样会被清除。如果您的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"