稍微做了一下deb打包內(nèi)容的學習,最經(jīng)典的當然還是要數(shù)debian的新維護者手冊。打包基本的需求一個是上游源碼,即.orig.tar.gz,還有一個主要是debian的控制文件.debian.tar.xz,整體來看經(jīng)典的打包方式有些繁瑣,長期使用git進行開發(fā)工作,工作流程也不太習慣,后來發(fā)現(xiàn)有g(shù)it相關的工具集,那么當然要嘗試一下啦。
Git打包倉庫
使用git工具集實際上是將debian的控制文件用git來進行管理,那么一個這樣的倉庫的分支結(jié)構(gòu)是什么樣的呢?
- master 用來管理 debian/* 的分支
- upstream 用來放上游版本的分支
- pristine-tar 用來放上游 tarball 的分支
這里面pristine-tar實際上是單獨的一個分支,以增量的方式對各個上游tarball進行存放的分支,也可以不使用的。
打包流程

從各方面的文檔內(nèi)容我將git工具集打包的過程整理成三個部分了。
導入上游源代碼
將上游源碼制作成.orig.tar.gz的tarball,拿cinder舉例,自定義版本為5.5.5,那tarball應該是cinder_5.5.5.orig.tar.gz,通過gbp import-orig命令將tarball導入到打包倉庫中。
首先在倉庫中切換到upstream分支
# git checkout upstream
導入tarball
# gbp import-orig ../cinder_5.5.5.orig.tar.gz
What is the upstream version? [5.5.5]
gbp:info: Importing '../cinder_5.5.5.orig.tar.gz' to branch 'upstream'...
gbp:info: Source package is cinder
gbp:info: Upstream version is 5.5.5
gbp:info: Merging to 'master'
gbp:info: Successfully imported version 5.5.5 of ../cinder_5.5.5.orig.tar.gz
修改debian文件
導入tarball命令執(zhí)行后會自動在upstream的導入commit打上相應的上游標簽,這里是'upstream/5.5.5',同時將upstream分支merge到master分支,這時候我們切換回master分支,修改debian內(nèi)容,這里需要注意,在master分支只能修改debian目錄中的內(nèi)容,其他不能修改。
修改后使用dch來更新changelog:
# dch -D trusty --newversion "1:5.5.5-0ubuntu1" "5.5.5 version releases." -b
libdistro-info-perl is not installed, Debian release names are not known.
libdistro-info-perl is not installed, Ubuntu release names are not known.
dch warning: Unable to determine if trusty is a valid Ubuntu release.
然后將master的分支提交,打上debian標簽,如'debian/5.5.5'。
執(zhí)行打包
然后就可以開始打包了,打包工作是要在master分支進行的:
gbp buildpackage \
> --git-upstream-branch='upstream/5.5.5' \
> --git-upstream-tree=tag \
> --git-debian-branch=master \
> --git-no-pristine-tar \
> -sa -uc -us
gbp:info: Exporting 'HEAD' to '/root/build_git_test/testsw/build-area/cinder-tmp'
gbp:info: Moving '/root/build_git_test/testsw/build-area/cinder-tmp' to '/root/build_git_test/testsw/build-area/cinder-5.5.5'
dpkg-buildpackage -rfakeroot -D -us -uc -i -I -sa
...
dpkg-deb: building package `cinder-backup' in `../cinder-backup_5.5.5-0ubuntu1_all.deb'.
dpkg-genchanges -sa >../cinder_5.5.5-0ubuntu1_amd64.changes
dpkg-genchanges: including full source code in upload
dpkg-source -i -I --after-build cinder-5.5.5
dpkg-buildpackage: full upload (original source is included)
這樣就可以制作出deb格式的二進制安裝包了,deb包會放在與打包倉庫統(tǒng)計的build-area目錄中。