Debian打包维护脚本
脚本地址:https://gist.github.com/lainme/b96f8c8b2de12c47c50a
写这个脚本的目的主要是为了在本地和为PPA打包时能够更加自动化,同时方便维护,主要有下面几个功能:
- 从GIT或者本地文件获取源码和debian目录。必须已有debian目录,如果没有,需要先手动做好。
- GIT支持: 更新版本号中的“gitxxxx”。提交更改到GIT仓库。打标签。
- 同时为多个Ubuntu版本打包。
- 用pbuilder-dist在本地编译。
- 用dput上传到多个地址。PPA/本地。其中本地为上传pbuilder-dist编译好的版本。
- 从配置文件中获取设置
不过我对debian打包不是很熟悉,这个脚本也不成熟,存在以下问题:
- BUG,特别是在changelog修改和版本号生成上可能存在BUG。
- 部分变量和环境变量重名
- 命令行参数显得混乱
- 部分功能和git-buildpackage等重复。
GIT相关约定
从GIT打包,一般需要这样的仓库结构:一个分支与上游源码保持一致,默认名称为upstream。一个分支合并上游源码并包含debian目录,默认名称为master
打包使用master仓库,但“gitxxxx”的版本号则从upstream获取。打包后更新将提交到master分支,打标签也是在master分支。
在版本号方面,如果之前的版本号中有“gitxxxx”字样,则自动更新之。
配置
我是直接写进脚本里的。如果你愿意,可以写到某个文件里,然后在脚本中source一下。
USERNAME=用户名 USEREMAIL=邮箱 GITBASE=GIT仓库的基本地址。默认为git@github.com:用户名 OUTPUT_DIR=存放打包文件的位置。默认为$HOME/build PBUILDER_DIR=pbuilder-dist所用的目录,默认为$HOME/pbuilder PBUILDER_ARCH=pbuiler-dist所用的架构,默认为当前系统的架构 LOCAL_REPO=本地仓库的名称。默认为"local" BUILD_OPTIONS=本地编译时的debian编译选项。默认为“nocheck”
一个例子
debian-packaging.sh
可以查看参数说明。例如执行下面命令
debian-packaging.sh -n pidgin-lwqq -r "lucid natty oneiric precise" -d ppa:lainme/pidgin-lwqq -a 0 -p 1
这会从git@github.com:用户名/pidgin-lwqq获取源码,要求用户编辑changelog,并将更改提交到GIT的master仓库。之后为lucid, natty, oneiric, precise分别运行debuild -S -sa,并将结果上传到ppa:lainme/pidgin-lwqq
选项解释 :
- -n: 程序名称。不包含版本号
- -r: 为哪些系统版本打包。
- -d: 远程或本地仓库名称。(在~/.dput.cf中定义的名称。对于PPA,在Ubuntu9.10后不需要定义)
- -a: 是否上传.orig.tar.*。默认值为1,不上传,使用debuild -S -sd。如果为0,则使用debuild -S -sa,会上传.orig.tar.*
- -p: 是否提交更改到git仓库。默认值为0,不提交。
Changelog编辑
这是唯一需要人工干预的地方。例如下面的编辑界面
pidgin-lwqq (0.0.0+git20120829.01fdff2-1~用户名) unstable; urgency=low * [Enter comment here] -- 用户名 <邮箱地址> Thu, 30 Aug 2012 02:01:44 +0800
需要修改的只有两个地方:
- 版本号:仅修改“~用户名”之前的部分,即“0.0.0+git20120829.01fdff2-1”。在这个例子中,“gitxxx”会自动更新,如果没需求,不用修改。
- 替换“[Enter comment here]”,填上需要的内容
其他内容都由脚本自己处理。提交到GIT的类似这样
pidgin-lwqq (0.0.0+git20120829.01fdff2-2~lainme) unstable; urgency=low
在后面为不同系统版本打包时,脚本会再附加上“~系统版本”,并把”unstable“也替换成相应系统版本。以precise为例,最后结果类似这样
pidgin-lwqq (0.0.0+git20120829.01fdff2-2~lainme~precise) precise; urgency=low
其他例子
1) 从GIT获取源码,用pbuiler-dist为当前系统本地编译,不包含.orig.tar.*,不提交更改或打标签
debian-packaging.sh -n pidgin-lwqq -l 1
这里“-l”为是否本地编译,默认为“0”,不进行本地编译。
2) 从GIT获取源码,系统版本为lucid,用pbuilder-dist本地编译,同时上传到PPA“ppa:lainme/ppa”和本地仓库“local”,包含.orig.tar.*,并提交更改
debian-packaging.sh -n pidgin-lwqq -r lucid -d "ppa:lainme/ppa local" -l 1 -a 0 -p 1
3) 从本地文件获取源码,用pbuilder-dist为当前系统本地编译,不包含.orig.tar.*
debian-packaging.sh -n openbox -s ~/Downloads/openbox-3.5.0 -l 1
这是“-s”指定源码存放目录,注意这个源码是包含debian目录的。
4) 从本地获取源码和.orig.tar.*文件,系统版本为lucid,上传到ppa:lainme/ppa,不包含.orig.tar.*
debian-packaging.sh -n openbox -s ~/Downloads/openbox-3.5.0 -o ~/Downloads/openbox_3.5.0.orig.tar.gz -r lucid -d ppa:lainme/ppa
这里“-o”指定.orig.tar.*文件路径。如果不指定,将由脚本从源码中生成。如果要上传PPA,而所打包的程序版本在Ubuntu仓库中已经存在,一般需要指定此项,使用从Ubuntu仓库中下载的.orig.tar.*,否则将被Launchpad拒绝。这适用于3.0(quilt)格式的情况。如果是3.0(native)或者1.0的格式,应该不需要。
注意:如果选择了上传到本地仓库,则要同时开启本地编译。目前脚本中没有检测,需要自己注意。
使用配置文件
如果经常为某个程序打包,可以把选项写到一个文件里(按照bash脚本的写法),然后使用
debian-packaging.sh -c 文件路径
脚本将会source这个文件。如果需要覆盖其中选项,就加在后面,比如
debian-packaging.sh -c 文件路径 -p 0