ubuntu deb安装包制作方法介绍

来源:互联网 发布:风刑软件站 编辑:程序博客网 时间:2024/05/17 01:17

方案一,基于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-buildpackagedpkg-buildpackage: export CFLAGS from dpkg-buildflags (origin: vendor): -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-securitydpkg-buildpackage: export CPPFLAGS from dpkg-buildflags (origin: vendor): -D_FORTIFY_SOURCE=2dpkg-buildpackage: export CXXFLAGS from dpkg-buildflags (origin: vendor): -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-securitydpkg-buildpackage: export FFLAGS from dpkg-buildflags (origin: vendor): -g -O2dpkg-buildpackage: export LDFLAGS from dpkg-buildflags (origin: vendor): -Wl,-Bsymbolic-functions -Wl,-z,relrodpkg-buildpackage: 源码包 libniscsdkdpkg-buildpackage: 源码版本 1.0-1dpkg-buildpackage: 源码修改者 root <liul.stone@gmail.com>dpkg-buildpackage: 主机架构 amd64dpkg-source --before-build libniscsdk-1.0debian/rules cleandh clean   dh_testdir   dh_auto_cleanmake[1]: 正在进入目录 `/root/tt/libniscsdk-1.0'Cleaning libSDK_VerifyRegister.so ...rm -fr libSDK_VerifyRegister.somake[1]:正在离开目录 `/root/tt/libniscsdk-1.0'   dh_cleandpkg-source -b libniscsdk-1.0dpkg-source: info: using source format `3.0 (quilt)'dpkg-source: info: building libniscsdk using existing ./libniscsdk_1.0.orig.tar.gzdpkg-source: 警告: 忽略对文件 libSDK_VerifyRegister.so 的删除指令dpkg-source: info: building libniscsdk in libniscsdk_1.0-1.debian.tar.gzdpkg-source: info: building libniscsdk in libniscsdk_1.0-1.dscdebian/rules builddh build   dh_testdir   dh_auto_configure   dh_auto_buildmake[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.somake[1]:正在离开目录 `/root/tt/libniscsdk-1.0'   dh_auto_testdebian/rules binarydh 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_builddebdpkg-deb:正在新建软件包 libniscsdk,包文件为 ../libniscsdk_1.0-1_amd64.deb。dpkg-genchanges  >../libniscsdk_1.0-1_amd64.changesdpkg-genchanges: 上传数据中包含完整的原始代码dpkg-source --after-build libniscsdk-1.0dpkg-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.gz11 directories, 52 filesroot@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包就制作完成了,该方法的好处是静态文件可以复用,不用每次制作都重新编写,简单易用。

0 0