fpm包管理工具介绍


这里还有一份google关于rpm介绍的PPT:fpm, baylisa, april 2011.pdf


所以下面重点介绍使用的过程:


1、修改rubygems的源由于国内网络原因,导致 rubygems.org 存放在 Amazon S3 上面的资源文件间歇性连接失败。


所以需要改成taobao提供的源。这是一个完整 rubygems.org 镜像,可以用此代替官方版本,同步频率目前为15分钟一次。

#yuminstallrubyrubygems#gemsources--removehttp://rubygems.org/#gemsources-ahttp://ruby.taobao.org/#gemsources-l

***CURRENTSOURCES***http://ruby.taobao.org

请确保只有 ruby.taobao.org


2、使用记录FPM功能简单说就是将一种类型的包转换成另一种类型。

支持的源类型包:“dir”:将目录打包成所需要的类型,可以用于源码编译安装的软件包


“rpm”:对rpm进行转换

“gem”:对rubygem包进行转换

“python”:将python模块打包成相应的类型


支持的目标类型包:

“rpm”:转换为rpm包

“deb”:转换为deb包

“solaris”:转换为solaris包

“puppet”:转换为puppet模块

因为我们平时使用的比较多的是rpm包,因此这里主要介绍如何将源码安装的包转换为RPM包,其他功能感兴趣的可以试试。


3、操作实例以安装squid为例。源为已经编译安装的目录,制作rpm包。


首先需要下载squid的tar.gz包

#cdsquid-3.4.6#./configure--prefix=/home/squid/squid-3.4.6#make#makeinstall

#tarsquid-conf.tar.gz-C/home/squid/squid-3.4.6/etc/#将配置文件提前放置在etc下面。

可以先编写好安装rpm包执行之前的以及执行之后脚本,rpm包卸载之前以及卸载之后执行的脚本。

安装之前执行的脚本,用于创建目录和用户:

#catsquid.pre.sh#!/bin/sh#ascripttoberunbeforepackageinstallationuseraddsquidmkdir-p/home/squidmkdir-p/home/squid/var/log/squidmkdir-p/home/squid/cachechown-Rsquid:squid/home/squid

安装之后执行的脚本,用于创建软连接和添加环境变量:

#catsquid.after.sh#!/bin/sh#ascripttoberunafterpackageinstallationcd/home/squidln-ssquid-3.4.6squidmkdir/etc/squidcd/home/squid/squid/etccp-rerror_page/etc/squid/cd/etc/squid/ln-s/home/squid/squid/etc/squid.confsquid.confsed-i's/$PATH:$HOME\/bin/\/home\/squid\/squid\/sbin:$PATH:$HOME\/bin/'/root/.bash_profile

开始生成rpm文件

#fpm-sdir-trpm-v1.0.0-nsquid--pre-install/root/squid.pre.sh--after-install/root/squid.after.sh/home/squid/squid-3.4.6/

参数介绍:

# -s:源类型包

# -t:目标类型包

# -v:版本号

# -n:软件包名称

# --pre-install:安装前执行的脚本

# --after-install :安装后执行的脚本

# 需要转换目录放置在后面

至此,将会在你该目录下面生成一个rpm文件

4、可能出现的错误

错误一:

checking for termcap functions library... configure: error: No curses/termcap library found

是因为没有安装ncurses包导致的

#yumlist|grepncurses*

错误二:

../depcomp: line 571: exec: g++: not found

错误原因没有安装gcc-c++包

#yuminstallgcc-c++

错误三:

./include/my_global.h:1099: 错误:对 C++ 内建类型 ‘bool’ 的重声明

这个错误是因为先./congfigure 又装的gcc-c++之后又make 导致的,解决方法是重新./configure,make,make install就可以恢复