LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: wen

从无到有制作Deb包的一个实例

[复制链接]
发表于 2008-2-1 22:43:45 | 显示全部楼层
New Maintainers' Guide
http://www.debian.org/devel/
回复 支持 反对

使用道具 举报

发表于 2008-2-2 09:49:54 | 显示全部楼层
楼主使用autotools的做法已经过时了。
按最新GNU的做法,不是写configure.in而是configure.ac。写完configure.ac之后需要运行的是autoreconf -fi命令。这样的话,那些什么NEWS README AUTHORS ChangeLog文件就不用自己手动touch了。
其他的还是有一定参考价值。
希望楼主继续献精。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-2 11:40:19 | 显示全部楼层
Post by realtang;1813528
楼主使用autotools的做法已经过时了。
按最新GNU的做法,不是写configure.in而是configure.ac。写完configure.ac之后需要运行的是autoreconf -fi命令。这样的话,那些什么NEWS README AUTHORS ChangeLog文件就不用自己手动touch了。
其他的还是有一定参考价值。
希望楼主继续献精。


谢谢提示。

你说的问题本来已经注意到,还是毛糙了一些,就草草发贴了。

尽快发一个更新的贴。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-3 17:38:05 | 显示全部楼层
Post by realtang;1813528

写完configure.ac之后需要运行的是autoreconf -fi命令。这样的话,那些什么NEWS README AUTHORS ChangeLog文件就不用自己手动touch了。


刚才测试了几次,发现不手工创建NEWS等文件就是不通过。

autoconf 2.61
automake 1.10
回复 支持 反对

使用道具 举报

发表于 2008-2-3 22:40:14 | 显示全部楼层
不好意思,是我的错,我也测试过了,确实要手动touch这些NEWS README AUTHORS ChangeLog个文件。
autoconf 2.61
automake 1.9.6
回复 支持 反对

使用道具 举报

发表于 2009-1-4 15:38:51 | 显示全部楼层
谢谢,很详细。。。
回复 支持 反对

使用道具 举报

发表于 2009-9-25 09:32:22 | 显示全部楼层
步骤很详尽,简洁。
回复 支持 反对

使用道具 举报

发表于 2009-11-25 21:43:34 | 显示全部楼层
Post by wen;1811388
从无到有制作Deb包的一个实例20080126

我希望从零开始制作出一个自己的Deb包,意思是连软件的源码都是自己写的,类似于deb from scratch吧,那么这样的一个制作过程大致由三部分构成:
1 源码的编写和测试
2 使用autotools工具生成符合Gnu编程标准的相关文件,如configure,makefile等。
3 按照Debian的方式制作Deb包文件

现在我编写了一个小软件hb-0.01,意思是hyperbolic,是自己写的一个双曲函数和反双曲函数的小软件,总共只有三个文件,在/home/wen1/hb-0.01/目录下,整个制作hb软件的deb包的过程为:

第一步:源码编写
这个步骤由用户自己编写,我的小软件总共只有三个文件,一个是头文件,一个是函数实现的C文件,还有一个主程序C文件,系统显示为:

wen1@lenny:~/hb-0.01$ ls -l
total 12
-rw-r--r-- 1 wen1 wen1 140 2008-01-26 15:17 bolic.h
-rw-r--r-- 1 wen1 wen1 369 2008-01-26 15:17 boliclib.c
-rw-r--r-- 1 wen1 wen1 300 2008-01-26 15:17 hb.c

第二步:使用Autotools工具生成所有符合Gnu编程标准的配置文件等。
这个过程的步骤比较多,具体来说,包括有:
1 使用autoscan命令来生成一个configure的模板文件。系统操作为:

wen1@lenny:~/hb-0.01$ autoscan
wen1@lenny:~/hb-0.01$ ls -l
total 16
-rw-r--r-- 1 wen1 wen1   0 2008-01-26 15:25 autoscan.log
-rw-r--r-- 1 wen1 wen1 140 2008-01-26 15:17 bolic.h
-rw-r--r-- 1 wen1 wen1 369 2008-01-26 15:17 boliclib.c
-rw-r--r-- 1 wen1 wen1 484 2008-01-26 15:25 configure.scan
-rw-r--r-- 1 wen1 wen1 300 2008-01-26 15:17 hb.c

可以看到现在生成了一个configure.scan文件。

2 将configure.scan文件改名为configure.in,并进行相应的修改,我的是:

AC_PREREQ(2.61)
AC_INIT(hb, 0.01, wenheping@tom.com)
AM_INIT_AUTOMAKE(hb,0.01)
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_CHECK_FUNCS([sqrt])
AC_OUTPUT(Makefile)

一般来说,这里只有AC_INIT、AC_OUTPUT、AM_INIT_AUTOMAKE三个参数需要根据自己的情况修改一下,其他自动生成的东西不动。

3执行命令aclocal和autoconf,生成configure文件:

wen1@lenny:~/hb-0.01$ aclocal
wen1@lenny:~/hb-0.01$ autoconf
wen1@lenny:~/hb-0.01$ ls -l
total 184
-rw-r--r-- 1 wen1 wen1  31848 2008-01-26 15:36 aclocal.m4
drwxr-xr-x 2 wen1 wen1   4096 2008-01-26 15:36 autom4te.cache
-rw-r--r-- 1 wen1 wen1      0 2008-01-26 15:25 autoscan.log
-rw-r--r-- 1 wen1 wen1    140 2008-01-26 15:17 bolic.h
-rw-r--r-- 1 wen1 wen1    369 2008-01-26 15:17 boliclib.c
-rwxr-xr-x 1 wen1 wen1 130126 2008-01-26 15:36 configure
-rw-r--r-- 1 wen1 wen1    434 2008-01-26 15:35 configure.in
-rw-r--r-- 1 wen1 wen1    300 2008-01-26 15:17 hb.c

可以看到现在生成了configure文件。

4新建Makefile.am文件,再由automake工具根据所写的Makefile.am文件来自动生成Makefile.in文件。
Makefile.am文件一般定义自己的软件最后生成的可执行程序名字、需要连接的库等,我的该文件内容为:

AUTOMAKE_OPTIONS=foreign #
bin_PROGRAMS=hb   # 最后生成的可执行文件的名字
hb_SOURCES=hb.c bolic.h boliclib.c   # 所有的源码文件
LIBS = -lm     # 需要连接math库

然后用automake生成Makefile.in文件,为了符合规范,先:

wen1@lenny:~/hb-0.01$ touch NEWS README AUTHORS ChangeLog

然后的系统显示为:

wen1@lenny:~/hb-0.01$ automake --add-missing
wen1@lenny:~/hb-0.01$ ls
aclocal.m4      bolic.h     configure.in  INSTALL      missing
AUTHORS         boliclib.c  COPYING       install-sh   NEWS
autom4te.cache  ChangeLog   depcomp       Makefile.am  README
autoscan.log    configure   hb.c          Makefile.in

5执行configure生成Makefile
这一步很简单,生成Makefile之后,还可以使用一些其他的make命令,如make clean,make install,make dist,看看它们会给你什么样的效果。

以上的例子很简单,更为复杂的Autotools的运用和Makefile的编写等内容请参照:
http://www.gnu.org/software/autoconf/  (最权威的了)
http://sourceware.org/autobook/  (很详细的一本书)
http://www.lrde.epita.fr/~adl/autotools.html (这个演示文稿做得相当不错)

第三步:生成Deb包。
生成deb包,有两种方法,一种很简单,直接在软件源码目录内运行checkinstall再回答几个简单的问题就可以了,但一般不推荐使用该办法;二是按照Debian的New Maintainer Guide一步一步制作deb包,详细的过程请参照:
http://www.debian.org/doc/maint-guide/

我的制作过程大致为:
1 下载安装必须的软件:
#apt-get install build-essential dpkg-dev dh-make debhelper fakeroot gnupg lintian Linda pbuilder

2 生成tar.gz文件并把该文件移动到源码的父目录:
wen1@lenny:~/hb-0.01$ make dist
wen1@lenny:~/hb-0.01$ mv hb*.gz ../

3运行dh_make命令。

wen1@lenny:~/hb-0.01$ dh_make -e wenheping@tom.com -f ../hb-0.01.tar.gz

运行该命令之后,原来的软件包将会被打包为hb-0.01.orig.tar.gz并放在父目录中,注意文件名中包名称和版本是以_分割的而且tar.gz之前有orig.。

4 修改Makefile、control等文件。
Debian要求可执行文件不能安装在/usr/local目录下,所以然后要检查Makefile文件的相应的安装位置,我的这个小软件本来就是安装在/usr/bin下,所以不用修改Makefile文件。
至于control copyright等文件,如果只是自己做一个自己用的deb包文件,不改也可以,但是如果是为Debian做的准备上传到Debian apt源中的话,就要按照规范认真地填写。

5 生成deb包文件,我是这样的:
wen1@lenny:~/hb-0.01$ ./configure
wen1@lenny:~/hb-0.01$ make
wen1@lenny:~/hb-0.01$ dpkg-buildpackage –rfakeroot

这样,我的hb软件的deb包文件及其他相关文件就生成了---但是生成于源码目录的父目录中。
我在做到用automake --add-missing这步时,出现错误说没有configure.in:7: required file `config.h.in' not found
回复 支持 反对

使用道具 举报

发表于 2009-11-25 21:57:07 | 显示全部楼层
哦,这网上搜了一下,先要
#autoheader
#automake --add-missing
就没错误了。哈哈
回复 支持 反对

使用道具 举报

发表于 2009-11-25 22:36:16 | 显示全部楼层
在执行
#dpkg-buildpackage -rfakeroot
出现问题,我的目录为 my-1.0
dpkg-buildpackage: 失败: dpkg-source -b my-1.0 提供错误退出状态 1
请问是什么原因??
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表