选择一个合适的Linux发行版的重要因素就是是否有足够丰富的软件以及软件的维护是否方便。对于正常情况下的使用,Ubuntu继承自Debian系的deb已经可以满足,部分情况下还是无法摆脱需要编译安装的情况。对于有点洁癖的管理员,或者需要大规模部署的情况,每台机器的编译显然不现实,于是就需要定制deb包。
本文以Ubuntu下的操作为例,同样适用于Debian。
修改现有deb包
这种情况往往是现有的deb包已经满足使用,只是需要修改部分文件,例如批量部署apache服务器而不希望每台主机上去修改配置。
- 下载现有的deb包:可以直接从安装源中找到需要的deb文件,或者通过网易的镜像站 http://mirrors.163.com/ubuntu/pool/
- 解包:
dpkg -X apache2-common_2.0.55-4ubuntu2.13_i386.deb apache2 #将apache2的包解压
- 修改配置
cd apache2
这样,你会看到apache2目录下的文件结构很眼熟,跟安装后的文件存放路径完全一致。你可以根据需要修改对应的文件。
- 提取配置文件
dpkg -e ../dpkg -X apache2-common_2.0.55-4ubuntu2.13_i386.deb
会多出一个DEBIAN目录,决定了部分安装参数,同样也可以定制修改。
- 重新封包
cd ..
dpkg -b apache2 myApache2.deb
- 安装测试
dpkg -i myApache2.deb
通过deb-source制作deb包
这种方式往往是需要为原有的包进行小幅度优化,例如修改nginx软件的header识别信息,并适用-O3参数重新编译。
- 获取source包
mkdir nginx
cd nginx
apt-get source nginx #等待下载
- 修改代码
下载完成后会出现一个nginx*的目录,既是nginx的源码,如果需要修改,则直接进入该目录下修改源码。例如我修改src/core/nginx.h,定制了nginx的头部信息。
- 修改编译信息
源码目录下,相比直接在nginx官网下载的会增加几个目录,其中debian目录下就是deb包特有的配置。修改方式可以参考上种方式。
debian/rules是一个可执行文件,直接编辑可以修改。例如我直接将头部的CFLAGS += -O2 变态的修改为 CFLAGS += -O3 -msse3 -mmmx -maccumulate-outgoing-args(没有经过测试,仅作为示例)
- 准备编译环境和依赖包
apt-get install dpkg-buildpackage
下载打包工具
apt-get build-dep nginx
很多情况下不能完成编译就是因为没有执行这一步
- 重新打包
dpkg-buildpackage -uc -d
完成后上一级目录将会出现一个或多个deb文件,视情况而定安装测试。
源码制作deb
这种方法相对比较少见了,事实上前两种方法几乎已经解决了80%的应用,即便没有对应的Ubuntu包,也可以从丰富的Debian库中找到合适的deb,这种情况只有少数项目才会需要,例如安装 支持中文分词的索引服务器coreseek。
- 下载,解压源码
wget http://…
tar ….
这一步没什么说的,下载,解压而已。
- 预编译
./configure …
make
也没什么特殊的,参考官方安装手册的操作
- 打包
apt-get install checkinstall #下载打包工具
checkinstall -D -y -install=no -default make install
一定记得要测试一下,相比前两种方法出错概率较高。
看到网上很多安装教程都是编译安装的,抱着“没有必要重新发明轮子”的原则,我还是建议尽量使用deb的方式安装。同时建议社区尽可能的提供rpm和deb等安装包,在方便用户的同时同样也有利于产品的优化。