deb包简易制作:以gmlive为例
02月 13th, 2009 by
yhlfh
这篇早该和大家见面的文章今天终于在笔者的努力下和大家见面了。正如大家看到的题目一样,本文讲的是有关于deb包的制作。当然,笔者并不是一个debian开发者,也不是一个ubuntu开发者。本文的目的是给新手一个简单的,关于如何将一般安装步骤为configure, make, make install的软件打成一个deb包,以方便管理的一个指南。当然有的朋友会说,用checkinstall就可以了。不过关于checkinstall,我听过好多人说这种方法过于dirty,到底如何笔者没有试过,也不好评价。您可以选择使用checkinstall,但我可以保证,看完本文,您将会发现其实用常规的方法制作一个deb包也是很简单的。
所需软件
要成功编译软件并打包,您需要build-essential, dh-make, debhelper, devscripts以及其他成功编译所需的开发包。
获取源码包
这个不用多说了。首先笔者需要从gmlive主页上下载gmlive的源码包。这里笔者下载的是0.21.1版本。
debian化
简单地理解,debian化就是将源代码解包后,在其下建立一个名为debian的目录,该目录里面包含一些特定的描述文件,以指导程序正确生成deb包。
在本文的例子里,解压后笔者得到一个名为gmlive-0.21.1的目录,那么它下面需要有一个debian目录。这里我们不会手工创建它,而是使用dh_make命令。这里笔者进入gmlive-0.21.1目录,然后在该目录下执行:
$ dh_make -e mail@dot.com -f ../gmlive-0.21.1.tar.gz
mail@dot.com为笔者的email,您得用自己的email替换。命令执行后您会被问及一系列问题,比如问您是不是打一个单一的包,还是其他什么类型的。这里笔者选择单一的包。然后检查屏幕上的信息,一切ok输入回车。
编辑debian目录里的内容
如果您已经看过debian目录里的内容,那么您可能会被吓到,哇!这么多文件。其实不用怕,因为好多文件都不是必需的。在这个例子中,笔者只留下这6个文件:changelog, control, compat, copyright, rules, docs,甚至,连docs也可以不要,不过这里笔者还是将它保留了。下面需要做的是逐一打开查看并编辑这些文件。
changelog
这是更新日志,当然是指deb包的更新日志,而非软件本身的更新日志。笔者将它改成了这样:
gmlive (0.21.1-1) unstable; urgency=low * Initial release -- my name <mail@dot.com> Fri, 02 Jan 2009 15:55:19 +0800
因为不需要提交到官方软件仓库,所以不需要close什么bug,笔者直接将后面的close字样去掉了。
control
这个文件记录软件的相关信息,例如其主页的软件包描述(就是apt-cache show时看到的东西)。需要改的地方是Homepage和Description。比如笔者将它改成:
Source: gmlive
Section: unknown
Priority: extra
Maintainer: my name <mail@dot.com>
Build-Depends: debhelper (>= 7), autotools-dev
Standards-Version: 3.8.0
Homepage: http://code.google.com/p/gmlive/
Package: gmlive
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: live video for linux
live video for linux,
maybe it is a UI for mplayer by playing live video.注意哦,最后两行描述前面是要空一格的。
copyright
这个顾名思义,是版权声明文件,声明软件以及deb包的版权。我们需要用gmlive的真实作者名字和以及邮件地址来替换里面的相应字段,如果不只一个作者,那就每个作者写一行。笔者将其改成这样:
This package was debianized by: my name <mail@dot.com> on Fri, 02 Jan 2009 15:55:19 +0800 It was downloaded from: http://code.google.com/p/gmlive/ Upstream Author(s): lerosua <lerosua@gmail.com> wind <xihels@gmail.com> yetist <yetist@gmail.com> Copyright: Copyright (C) 2008 Cyclone Team License: This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL'. The Debian packaging is: Copyright C) 2009, my name <mail@dot.com> and is licensed under the GPL, see above.
rules
这个文件是关键,能不能打包成功就看这个文件了。可以看到这个文件上面的注释说我们应该勇敢地按需修改这个文件。这里笔者作了很多修改,让这个文件尽量简短:
#!/usr/bin/make -f # -*- makefile -*- config.status: configure dh_testdir ./configure --prefix=/usr build: build-stamp build-stamp: config.status dh_testdir $(MAKE) touch $@ clean: dh_testdir dh_testroot rm -f build-stamp [ ! -f Makefile ] || $(MAKE) distclean dh_clean install: build dh_testdir dh_testroot dh_prep dh_installdirs $(MAKE) DESTDIR=$(CURDIR)/debian/gmlive install binary-indep: install binary-arch: install dh_testdir dh_testroot dh_installchangelogs ChangeLog dh_installdocs dh_strip dh_compress dh_fixperms dh_installdeb dh_shlibdeps dh_gencontrol dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install
大家应该已经发现了,这里其实就是编译软件所需执行的一系列命令。首先,dh_testdir检查当前的工作目录是不是源代码目录,然后再执行./configure –prefix=/usr。再往下看,它执行了make,然后下面的一系列命令将之打成一个deb包。想了解下面的一系列dh开头的命令是什么意思,可以看看他们的man手册。
docs
顾名思义,是文档,如果希望源代码目录下的某个文档出现在/usr/share/doc/gmlive/下,那就把它写进去。比如笔者希望源代码目录下的AUTHORS, NEWS, README文件能出现在/usr/share/doc/gmlive下,那docs文件就是这样:
AUTHORS NEWS README
制作deb包
好了,一切完毕,下面就可以生成deb包了。
$ dpkg-buildpackage
如果一切顺利,该命令执行完毕后您就会得到一个deb包。对了,这个命令要在源代码目录下执行的,而不是debian目录下。如果之中出现什么依赖问题,那就该装什么装什么,多半是因为少了什么开发包的缘故。
有新版本了怎么办?
本来是没有这一节的,因为在一开始笔者也说了,这篇文章本该很早就和大家见面的,但是笔者一直拖到gmlive 0.21.2发布了才写出来,所以就加了这一节。
下载新的源代码包,并将其与旧的源代码放于同一目录下。然后在旧的源代码目录下执行.:
$ uupdate ../gmlive-0.21.2.tar.bz2
一切ok后,cd到新的源代码目录,再按上一节的方法生成新的deb包。
好了,本文到此为止,希望您已经打出自己第一个deb包了。您可以把您的成果和别人分享,如果您希望您打的包能进入官方软件仓库,那么您还有许多工作需要做,你会发现这样的包还远没有达到合格的标准。关于打包更详尽的细节,请您参考debian新维护员指南,那里可以给你全面的指导。你可以通过
# apt-get install maint-guide-zh
命令来安装这个指南。如您所料,您将会在/usr/share/doc/目录下找到它。祝您打包愉快!