ubuntu deb安装包制作方法介绍

方案一,基于dpkg-buildpackage

1.准备工作

1)重命名目标源码目录,目录名规则为文件名加大版本号,如下:

2)测试编译代码,清楚残余无用文件

安装libcurl开发包:
apt-get install libcurl4-gnutls-dev

清楚残余文件(bin/obj)
make clean

3)源码打包

2.制作deb包

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:~# 

方案二,基于dpkg -b

首先了解一下deb包的文件结构:

它具有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′ 等;
Priority: 这个字段申明软件对于系统的重要程度,如
required’, standard’,optional’, extra’ 等;
Essential: 这个字段申明是否是系统最基本的软件包(选项为yes/no),如果是的话,这就表明该软件是维持系统稳定和正常运行的软件包,不允许任何形式的卸载(除非进行强制性的卸载)
Architecture:申明软件包结构,如基于
i386′, ‘amd64’,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包就制作完成了,该方法的好处是静态文件可以复用,不用每次制作都重新编写,简单易用。

你可能感兴趣的:(Centos)