redis打包deb笔记

#deb包打包 对于Linux一些从源代码编译的软件,有这可以定制安装的好处,但也有管理不方便的坏处(portage之流除外)。为了集群化部署,最好还是将编译好的源代码打包

##一般编译: 对于不同的Linux软件源代码,编译安装细节会不一样,但是离不开三部曲框架: 1 ./configure或者其他名字 这一步主要用于检查软件的编译运行所需要的依赖关系,例如查看某些链接库是否存在。有的软件还会进一步分析主机信息生成相应的配置。 2 make option 编译阶段 就是把源代码编译(一般是根据makefile)可执行的程序或者库。有的软件./configure写的不好,可能会导致make阶段出错,不过一般是提示你缺少一些软件包,google下,安装上软件包即可,软件本身编译失败的例子很少(也不是没有)。 3 make install 安装阶段 这个阶段会将编译生成的文件安装到系统中(根据Makefile的配置),例如将可执行文件放到/usr/bin下,把链接库放到/usr/lib下等。此外有的软件可能有安装脚本,进行一些配置工作(例如redis)。 总之,源代码中一般会有README或者INSTALL之类的文件,编译安装前先阅读以下。

##打包成deb 先决条件:

  • 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. 下载源代码并解压

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

  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 #注意解压后的源代码文件夹需要以<软件包>-<版本号>方式命名

然后是一些交互式操作:

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 / .

这时候文件夹里会有一个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。。

转载于:https://my.oschina.net/u/1242185/blog/365072

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值