python脚本制作deb包_Deb包的制作 – caizixian的个人页面 – OSCHINA – 中文开源技术交流社区…

deb格式是Debian系专用安装包格式,配合APT软件管理系统,成为了当前在linux软件中非常流行的一种安装包。Debian和ubuntu软件安装用的都是deb包。

但是很多人制作deb包时,都是从rpm转为deb,或者使用dpkg -b进行转换。虽然这两种方法可以制作出来deb,但是显然很粗糙,今天介绍一下正规方法:使用debhelper制作deb。今天用一个例子来和大家一起做个包试试看。

我们的例子是gwrite这个软件,软件主页:。您可以点击此处下载源码。这个源码包在Debian项目里的术语叫做upstream tarball,也就是上游发行的代码包。

源码下载完成后,我们在主目录里新建一个文件夹,例如叫packaging,然后执行如下命令:

mkdir ~/packaging

cd ~/packaging

把刚才下载的.tar.gz文件放到这个文件夹里。然后用命令解压这个文件:

tar zxf gwrite-0.5.0.tar.gz

(不要使用图形化工具解压,因为会造成权限混乱),进入解压出来的目录:

cd gwrite-0.5.0

然后大家要安装几个软件包,依次介绍一下。第一个要安装的是debhelper:

sudo aptitude install debhelper

debhelper软件包里是各种脚本,可以帮助我们接下来的打包工作。下一个要安装的是dh-make:

sudo aptitude install dh-make

dh-make包提供了我们需要用到的dh_make命令。这个命令用于根据上游tarball生成我们deb包模板。现在我们已经cd到解压好的程序目录,现在的文件夹路径是~/packaging/gwrite-0.5.0。然后我们执行这个命令:

dh_make -e First Last -f ../gwrite-0.5.0.tar.gz

其中First Last是姓名,比如我是Aron Xu。<>里是你的email地址。-f后面是上游tarball的路径。如果上面那个命令报错,请使用这个:

dh_make -e youremail@example.com -f ../gwrite-0.5.0.tar.gz

(../的意思是当前目录的上层目录)接下来程序会提示:

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch or cdbs/p>

我们输入s,表示这个源代码包只生成一个deb。输入s,按回车。然后会显示一些信息,回车确认 这时候再看当前的目录,会多出一个debian/文件夹。上级目录里,会出现gwrite_0.5.0.orig.tar.gz文件。

接下来下面进到debian/目录,第一个文件是changelog。Changelog顾名思义,是说软件版本历史的。

gwrite (0.5.0-1) unstable; urgency=low

Initial release (Closes: #nnnn)

— Aron Xu Wed, 17 Nov 2010 20:21:24 +0800

文件里面的姓名和邮箱,是用来识别这个包制作者的,当然就是在动手的各位啦。(changelog里没有写中文的,都是英文。不知道deb包是否允许用中文。)changelog是必须得是文件,没有这个文件接下来的步骤会出错。

然后是compat文件,里面就一个数字,现在是7。这个数字是debhelper的版本。不管它就可以。

下一个文件是control文件:

Source: gwrite表示源码包的名称;

Section: unknown这行表示软件分类;

Priority: extra代表优先级,一般可以写optional或者extra。其中optional是普通包最常用的,extra的优先级相比则还要再低一些;

Maintainer: Aron Xu 这行是软件包维护者,格式为:;

Build-Depends: debhelper(>= 7),这行是编译依赖关系,也就是说要安装哪些软件包才可以编译这个程序。这个例子中,debhelper是必须的。我们手里这个例子需要这些程序才能编译:Build-Depends: debhelper (>= 7), python, python-support, python-setuptools, python-distutils-extra。这些也是编译基本的python程序缩必须的包。( 依赖需要自己分析)

Standards-Version: 3.8.3,这行是使用的Debian Policy版本,目前最新的是3.9.1。所以我们写成:Standards-Version: 3.9.1;

Homepage: ,这行是上游的首页地址。我们是从http://code.google.com/p/gwrite下载的,所以写:。

下面是一个空行,表示Source部分结束;

Package: gwrite,这是说deb包的名叫gwrite,将来apt-get安装的时候,就用这个名字。

Architecture: any,这是指要编译的硬件构架。any代表所有构架。all代表这个软件包是跨平台的,比如说同python程序文件可以在所有平台上跑,我们打包的是python包,把any改成all。如果打一个C程序的包,则用any;

Depends: ${shlibs:Depends}, ${misc:Depends},这一行是deb包的依赖关系。${shlibs:Depends}, ${misc:Depends}是两个变了,表示debhelper自动检测依赖;这个例子中,我们还要添加python, python-gtk2, python-jswebkit, python-webkit, mimetex, wv。添加完的Depends是这样的:Depends: ${shlibs:Depends}, ${misc:Depends}, python, python-gtk2, python-jswebkit, python-webkit, mimetex, wv;

Kandu: dpkg-dev,会检测自己的host,把那个项在编译时替换成当前的。所以写any即可;

Description: ,这行是简单的描述,要在60个字符以内,要用英语。从语言学来讲,这应该是一个名词性的成分,比如手里这个就写成:simple GTK+ HTML5 rich text editor。写完的样子是:

Description: simple GTK+ HTML5 rich text editor。

,这里写的是长描述。也是用英语,应该是完整的句子,每行大概写70个字符,不要太多,没写完可以换行,每行的开头都要有一个空格,示例:gWrite is a simple GTK+ HTML5 WYSIWYG editor, focusing on writing and simple text formating. It can automatically generate a table of contents based on the document structure.每行开头都有一个半角空格。这样我们control文件就写完了。

Control文档示例:

Source: gwrite

Section: editors

Priority: optional

Maintainer: Aron Xu

Build-Depends: cdbs, debhelper (>= 7), python, python-support, python-setuptools, python-distutils-extra

Standards-Version: 3.9.1

Homepage: http://code.google.com/p/gwrite

Package: gwrite

Architecture: all

Depends: ${shlibs:Depends}, ${misc:Depends}, python, python-gtk2, python-jswebkit, python-webkit, mimetex, wv

Description: simple GTK+ HTML5 rich text editor

gWrite is a simple GTK+ HTML5 WYSIWYG editor, focusing on writing

and simple text formating. It can automatically generate a table of

contents based on the document structure.

.

It aims to be lighter than OOWrite & OOWeb, and to be as useful as them.

下面是copyright文件。这个文件里写的是版权内容。版权的写法比较复杂,今天先按下不表。(您可以参考范本进行修改)

再看文件夹里有很多.ex文件。这些文件都是某些功能性的脚本,通常来说,大多数包都只需要一个watch.ex。图形化程序还需要menu.ex。watch.ex是debian监视上游新版本用的工具,不进入官方仓库的包用不上,今天不讲写法。menu.ex是桌面菜单项,我们要使用它,所以把他重命名为menu。也就是去掉.ex后缀。默认模板:

ackage(gwrite):needs=”X11|text|vc|wm” section=”Applications/see-menu-manual” title=”gwrite” command=”/usr/bin/gwrite”

needs=”X11|text|vc|wm”这句是说这个包需要什么显示平台来运行,如果是文本的程序,可以写text,图形化程序则写X11。section=”Applications/see-menu-manual”这是说程序的分类。所有可以用的选项在这里找到因为例子里的程序是个编辑器,所以写成:

ackage(gwrite):needs=”X11″ section=”Applications/Editors” title=”gwrite” command=”/usr/bin/gwrite”

其余的.ex文件和.EX文件在例子里都用不上,删除。

README.Debian README.source的用处是,如果你想就这个包做点什么说明,那么写在这里README.Debian是写给最终用户的。README.source是关于源代码包有什么问题,如果没有什么要在里面说的,删掉。docs文件是dh_make自动检测的上游文档列表,如果是空的,删掉。我们的例子里它就是空的,所以删了。现在要在文件夹里创建一个名为pycompat的文件,里面写2就行了,这个文件没有什么变的,就是python包就加上它,不是python包不需要它,pycompat文件里只有一个数字:2。

在当前目录下创建一个文件夹: source,然后在source目录下创建一个名为format的文本文件,里面写一行文字:3.0 (quilt)。这代表使用3.0 (quilt)的源代码格式。

最后剩下rules文件了。这个文件是编译deb包的主控文件,它本身是一个Makefile,但是不要往里乱写target。90%的情况下,默认的rules就可以满足我们的要求,现在debian/目录下的工作基本完成了。

我们开始尝试编译这个包。

编译的第一步,是安装所有编译依赖,也就是写在control文件的Build-Depends项里的内容:debhelper python-support python-setuptool python-distutils-extra。当前的例子里是这些:

sudo aptitude install debhelper python-support python-setuptool python-distutils-extra

安装完之后,先检查自己是否在源代码目录里。例子里也就是gwrite-0.5.0目录。在gwrite-0.5.0里运行:

dpkg-buildpackage -rfakeroot(不需要root,直接运行即可)

如果执行成功,在父目录里就会出现.deb .build和.changes文件;如果出现错误,就要根据提示再从头找原因了。一个最简单deb包的制作例程,就是这样。完整地展示给大家了。

pdf下载:http://people.ubuntu.com/~happyaron/ubuntu-cn/classroom/20101117/Deb%e5%8c%85%e7%9a%84%e5%88%b6%e4%bd%9c.pdf

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览208856 人正在系统学习中 相关资源:医院床位安排系统_医院床位如何批量编辑-Java代码类资源-CSDN文库

来源:床前光明月

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月26日
下一篇 2020年11月26日

相关推荐