1)重命名目标源码目录,目录名规则为文件名加大版本号,如下:
2)测试编译代码,清楚残余无用文件
安装libcurl开发包:
apt-get install libcurl4-gnutls-dev
清楚残余文件(bin/obj)
make clean
3)源码打包
1)利用dh_make生成debian模板文件
根据deb包类型选择对应的Type,-e 后跟包构建者E-mail.
2)修改控制文件
2.1)增加安装执行文件,如:libniscsdk.install
2.2)小版本更新,修改changelog文件
3)生成deb包:dpkg-buildpackage
root@liul-VirtualBox:~/tt/libniscsdk-1.0# dpkg-buildpackage
dpkg-buildpackage: export CFLAGS from dpkg-buildflags (origin: vendor): -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security
dpkg-buildpackage: export CPPFLAGS from dpkg-buildflags (origin: vendor): -D_FORTIFY_SOURCE=2
dpkg-buildpackage: export CXXFLAGS from dpkg-buildflags (origin: vendor): -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security
dpkg-buildpackage: export FFLAGS from dpkg-buildflags (origin: vendor): -g -O2
dpkg-buildpackage: export LDFLAGS from dpkg-buildflags (origin: vendor): -Wl,-Bsymbolic-functions -Wl,-z,relro
dpkg-buildpackage: 源码包 libniscsdk
dpkg-buildpackage: 源码版本 1.0-1
dpkg-buildpackage: 源码修改者 root
dpkg-buildpackage: 主机架构 amd64
dpkg-source --before-build libniscsdk-1.0
debian/rules clean
dh clean
dh_testdir
dh_auto_clean
make[1]: 正在进入目录 `/root/tt/libniscsdk-1.0'
Cleaning libSDK_VerifyRegister.so ...
rm -fr libSDK_VerifyRegister.so
make[1]:正在离开目录 `/root/tt/libniscsdk-1.0'
dh_clean
dpkg-source -b libniscsdk-1.0
dpkg-source: info: using source format `3.0 (quilt)'
dpkg-source: info: building libniscsdk using existing ./libniscsdk_1.0.orig.tar.gz
dpkg-source: 警告: 忽略对文件 libSDK_VerifyRegister.so 的删除指令
dpkg-source: info: building libniscsdk in libniscsdk_1.0-1.debian.tar.gz
dpkg-source: info: building libniscsdk in libniscsdk_1.0-1.dsc
debian/rules build
dh build
dh_testdir
dh_auto_configure
dh_auto_build
make[1]: 正在进入目录 `/root/tt/libniscsdk-1.0'
Building libSDK_VerifyRegister.so ...
gcc -g -shared -fPIC -DPIC _API_VerifyRegister.c md5.c cJSON.c -lm -lcurl -o libSDK_VerifyRegister.so
make[1]:正在离开目录 `/root/tt/libniscsdk-1.0'
dh_auto_test
debian/rules binary
dh binary
dh_testroot
dh_prep
dh_installdirs
dh_auto_install
dh_install
dh_installdocs
dh_installchangelogs
dh_installexamples
dh_installman
dh_installcatalogs
dh_installcron
dh_installdebconf
dh_installemacsen
dh_installifupdown
dh_installinfo
dh_installinit
dh_installmenu
dh_installmime
dh_installmodules
dh_installlogcheck
dh_installlogrotate
dh_installpam
dh_installppp
dh_installudev
dh_installwm
dh_installxfonts
dh_installgsettings
dh_bugfiles
dh_ucf
dh_lintian
dh_gconf
dh_icons
dh_perl
dh_usrlocal
dh_link
dh_compress
dh_fixperms
dh_strip
dh_makeshlibs
dh_shlibdeps
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
dpkg-deb:正在新建软件包 libniscsdk,包文件为 ../libniscsdk_1.0-1_amd64.deb。
dpkg-genchanges >../libniscsdk_1.0-1_amd64.changes
dpkg-genchanges: 上传数据中包含完整的原始代码
dpkg-source --after-build libniscsdk-1.0
dpkg-buildpackage: 完整上载(包含原始的代码)
root@liul-VirtualBox:~/tt/libniscsdk-1.0#
完成后整体文件结构如下:
root@liul-VirtualBox:~# tree tt/
tt/
├── libniscsdk-1.0
│ ├── _API_VerifyRegister.c
│ ├── _API_VerifyRegister.h
│ ├── cJSON.c
│ ├── cJSON.h
│ ├── debian
│ │ ├── changelog
│ │ ├── compat
│ │ ├── control
│ │ ├── copyright
│ │ ├── docs
│ │ ├── emacsen-install.ex
│ │ ├── emacsen-remove.ex
│ │ ├── emacsen-startup.ex
│ │ ├── files
│ │ ├── init.d.ex
│ │ ├── libniscsdk
│ │ │ ├── DEBIAN
│ │ │ │ ├── control
│ │ │ │ └── md5sums
│ │ │ └── usr
│ │ │ ├── include
│ │ │ │ └── _API_VerifyRegister.h
│ │ │ ├── lib
│ │ │ │ └── libSDK_VerifyRegister.so
│ │ │ └── share
│ │ │ └── doc
│ │ │ └── libniscsdk
│ │ │ ├── changelog.Debian.gz
│ │ │ ├── copyright
│ │ │ └── README.Debian
│ │ ├── libniscsdk.cron.d.ex
│ │ ├── libniscsdk.debhelper.log
│ │ ├── libniscsdk.default.ex
│ │ ├── libniscsdk.doc-base.EX
│ │ ├── libniscsdk.install
│ │ ├── libniscsdk.substvars
│ │ ├── manpage.1.ex
│ │ ├── manpage.sgml.ex
│ │ ├── manpage.xml.ex
│ │ ├── menu.ex
│ │ ├── postinst.ex
│ │ ├── postrm.ex
│ │ ├── preinst.ex
│ │ ├── prerm.ex
│ │ ├── README.Debian
│ │ ├── README.source
│ │ ├── rules
│ │ ├── source
│ │ │ └── format
│ │ └── watch.ex
│ ├── Debug.h
│ ├── libSDK_VerifyRegister.so
│ ├── Makefile
│ ├── md5.c
│ ├── md5.h
│ └── README
├── libniscsdk_1.0-1_amd64.changes
├── libniscsdk_1.0-1_amd64.deb
├── libniscsdk_1.0-1.debian.tar.gz
├── libniscsdk_1.0-1.dsc
├── libniscsdk_1.0.orig.tar.gz
└── libniscsdk_1.0.tar.gz
11 directories, 52 files
root@liul-VirtualBox:~#
它具有DEBIAN和软件具体安装目录(如etc, usr, opt, tmp等)。在DEBIAN目录中起码具有control文件,其次还可能具有postinst(postinstallation)、postrm(postremove)、preinst(preinstallation)、prerm(preremove)、copyright (版权)、changlog (修订记录)和conffiles等。
control: 这个文件主要描述软件包的名称(Package),版本(Version)以及描述(Description)等,是deb包必须具备的描述性文件,以便于软件的安装管理和索引。同时为了能将软件包进行充分的管理,可能还具有以下字段:
Section: 这个字段申明软件的类别,常见的有utils’,
net’, mail’,
text’, x11′ 等;
required’,
Priority: 这个字段申明软件对于系统的重要程度,如standard’,
optional’, extra’ 等;
i386′, ‘amd64’,
Essential: 这个字段申明是否是系统最基本的软件包(选项为yes/no),如果是的话,这就表明该软件是维持系统稳定和正常运行的软件包,不允许任何形式的卸载(除非进行强制性的卸载)
Architecture:申明软件包结构,如基于m68k’,
sparc’, alpha’,
powerpc’ 等;
Source: 软件包的源代码名称;
Depends: 软件所依赖的其他软件包和库文件。如果是依赖多个软件包和库文件,彼此之间采用逗号隔开;
Pre-Depends: 软件安装前必须安装、配置依赖性的软件包和库文件,它常常用于必须的预运行脚本需求;
Recommends: 这个字段表明推荐的安装的其他软件包和库文件;
Suggests: 建议安装的其他软件包和库文件。
1.[必备文件]一个示例control文件格式如下:
2.增加md5sums文件,描述文件md5值,防止文件包损坏:
3.增加postinst,postrm文件:
4.放置要安装的动态链接库与头文件:
创建目录 mkdir usr/include,mkdir usr/lib/
5.增加静态描述文件,AUTHORS/copyright/README等
6.利用dpkg -b命令,打包生成deb包
这样,一个deb包就制作完成了,该方法的好处是静态文件可以复用,不用每次制作都重新编写,简单易用。