#deb包打包 对于Linux一些从源代码编译的软件,有这能够定制安装的好处,但也有管理不方便的坏处(portage之流除外)。为了集群化部署,最好仍是将编译好的源代码打包html
##通常编译: 对于不一样的Linux软件源代码,编译安装细节会不同,可是离不开三部曲框架: 1 ./configure
或者其余名字 这一步主要用于检查软件的编译运行所须要的依赖关系,例如查看某些连接库是否存在。有的软件还会进一步分析主机信息生成相应的配置。 2 make option
编译阶段 就是把源代码编译(通常是根据makefile)可执行的程序或者库。有的软件./configure写的很差,可能会致使make阶段出错,不过通常是提示你缺乏一些软件包,google下,安装上软件包便可,软件自己编译失败的例子不多(也不是没有)。 3 make install
安装阶段 这个阶段会将编译生成的文件安装到系统中(根据Makefile的配置),例如将可执行文件放到/usr/bin下,把连接库放到/usr/lib下等。此外有的软件可能有安装脚本,进行一些配置工做(例如redis)。 总之,源代码中通常会有README或者INSTALL之类的文件,编译安装前先阅读如下。git
##打包成deb 先决条件:redis
Deb文件分析: deb文件主要由两部分,其中第一部分是软件自己的文件,可能包括可执行文件,库,配置文件,服务配置文件(/etc/init.d等,还有一部分就是Debian的控制文件,包括control、postinst(安装后执行的动做)、postrm(删除操做后执行的动做等)、rule脚本(编译参数,可能没有)数据库
下载源代码并解压ubuntu
wget http://download.redis.io/releases/redis-2.8.19.tar.gz
tar xvzf redis-2.8.19.tar.gz
bash
生成Debian控制文件 这个过程能够本身手写,创建Debian的control等文件,能够参考Debian wiki和Debian新维护人员手册。 更通常的过程是使用自动话工具生成而后修改,例如checkinstall(rpm也能够偶)等。这里使用Debian和ubuntu官方推荐的 dh_make工具 mv redis-2.8.19 redis_2.8.19.orig.tar.gz #重命名成这种形式,便于dh_make分析
cd redis-*
dh_make -f ../redis-2.8.19.orig.tar.gz #注意解压后的源代码文件夹须要以<软件包>-<版本号>方式命名
框架
而后是一些交互式操做:ide
Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? [s/i/m/l/k/n] s #这里通常选择single,若是你的软件包比较大,能够选择m,其他能够参考man手册。主要是处理方式不一样。工具
Maintainer name : root
Email-Address : root@debian
Date : Wed, 07 Jan 2015 23:36:49 +0800
Package Name : redis
Version : 2.8.19
License : blank
Type of Package : Single
Hit <enter> to confirm:
Done. Please edit the files in the debian/ subdirectory now. You should also
check that the redis Makefiles install into $DESTDIR and not in / .post
这时候文件夹里会有一个debian文件夹:主要修改下control,copyright之类文件的我的信息,软件描述信息还有依赖关系,构建依赖等等等等。若是能够,你也能够修改如下rules文件,进行编译优化。写依赖关系是一件比较麻烦的事,说明里提到的软件包名称并不必定是你系统软件包的名字,须要肯定,为了节约时间,这里直接使用apt-get download redis-server
下载的deb包作演示:
source: redis
section: unknown
priority: extra
maintainer: wgjak47 wgjak47@debian
build-depends: debhelper (>= 8.0.0)
standards-version: 3.9.3
homepage: <insert the upstream url, if relevant>
#vcs-git: git://git.debian.org/collab-maint/redis.git
#vcs-browser: http://git.debian.org/?p=collab-maint/redis.git;a=summary
package: redis architecture: amd64 depends: libc6 (>= 2.14), libjemalloc1 (>= 2.1.1),adduser section: description: by wgjak47
这个control只是实验演示使用的,若是deb要对外发布,必定要认真对待每个字段。
此外对于服务,例如数据库,还须要配置preinst,prerm,postinst,postrm四个文件。主要是自动启动/关闭服务,防止服务运行中卸载等状况。例如redis就是,内容太多,就不贴了。
3.通常状况下大部分软件均可以直接dpkg-buildpackage -rfakeroot
,可是redis有些不一样:
install:
cd utils && ./install_server.sh
源代码编译阶段,不知为什么会对release.h进行修改,致使与上游源不匹配,dpkg-buildpackage失败。这时候须要dpkg-source --commit
一下。
若是dpkg-buildpackage中间失败,再进行可能会提示冲突,须要进行手动清理。
PS 若是打包过程遇到问题,能够经过apt-get source redis
下载官方的源代码包,进行参考。 PS2 Debian官方打的redis包居然是这么处理的,一个个映射过去Orz: cat redis-tools.install src/redis-benchmark /usr/bin src/redis-cli /usr/bin src/redis-check-aof /usr/bin src/redis-check-dump /usr/bin debian/bash_completion.d /etc
是redis的Makefile写的有问题,仍是Debian的打包人员编译的方法不对??ORZ。。