redis打包deb笔记

#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

  • dh_make(dh-make包的一部分)——用于自动建立./debian目录和其余用于建立.deb包的骨架模板文件;
  • make(Gnu make)——构建过程当中要用到的工具;
  • debchange/dc(devscripts包的一部分)——用于编辑包的版本号;
  • debuild(devscrihpts包的一部分)——运行构建过程,包括编译链接,以及生成deb包;
  • fakeroot(fakeroot包的一部分)——这个东西是必须的;
  • dput——上传通过签名的deb文件,这个不上传的话能够忽略。

Deb文件分析: deb文件主要由两部分,其中第一部分是软件自己的文件,可能包括可执行文件,库,配置文件,服务配置文件(/etc/init.d等,还有一部分就是Debian的控制文件,包括control、postinst(安装后执行的动做)、postrm(删除操做后执行的动做等)、rule脚本(编译参数,可能没有)数据库

  1. 下载源代码并解压ubuntu

    wget http://download.redis.io/releases/redis-2.8.19.tar.gz
    tar xvzf redis-2.8.19.tar.gzbash

  2. 生成Debian控制文件 这个过程能够本身手写,创建Debian的control等文件,能够参考Debian wikiDebian新维护人员手册。 更通常的过程是使用自动话工具生成而后修改,例如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有些不一样:

  1. 它会根据系统生成服务脚本,须要运行它的install_server.sh。解决办法,把Makefile中的install那部分改成运行这个脚本。。

install:
cd utils && ./install_server.sh

  1. 源代码编译阶段,不知为什么会对release.h进行修改,致使与上游源不匹配,dpkg-buildpackage失败。这时候须要dpkg-source --commit一下。

  2. 若是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。。

相关文章
相关标签/搜索