####################################### centos 6.5 的环境#################
【前提需求知识】
rpm包的组成
1、RPM的命名格式:name-version-release.arch.rpm
1
2
3
4
5
6
7
|
name:这里指的是对应软件的名称,比如httpd,我们的apache服务
version:这里的版本主要指的是对应的源代码的版本号(这其中的version有三部分组成:主版本号、次版本号、发布号)
release:这个是这个RPM的修订的次数,发布商的发布版本号,与源代码的版本号无关
arch:这个是它所支持的硬件平台,有x86_64,i386,ppc,noarch等
|
例子:httpd-2.2.15-29.el6.x86_64.rpm
上面,我们以httpd服务为例,它的name就是httpd,version为2.2.15,release为29.e16(红帽或者Centos厂商修订发布的第29次,一般公司通过源码包的打包就修改这个发布号,可以yum rpm升级的),这里,还包含了此包使用的系统,即centos,arch就是x86_64。
说明下常见的el6是代表啥意思:
1
2
3
|
fcXX,elXX:表示这个软件包的发行商版本,就像这里的fc18,说明这个软件包是在Fedora
18下使用的。而openssl-1.0.0-20.el6.x86_64.rpm表示这个软件包是在RHEL 6.x(Red Hat Enterprise
Linux)/CentOS 6.x下使用。
|
2、RPM的打包功能及其分包机制:
1
2
3
4
5
6
7
8
9
10
|
核心包,即主包,它的命名与源程序一样(不是源代码啊)
例子:php-5.3.3-26.el6.x86_64.rpm,上面提到的httpd也是核心包
子包:它在name的后面有个子包名
例子:php-mysql-5.3.3-26.el6.x86_64.rpm,这里的mysql就是子包名
例子:mysql-devel-5.1.52-1.el6.x86_64.rpm
devel:表示这个RPM包是软件的子包开发包
|
fpm包安装
【我的系统环境】
centos 6.5
【解决依赖关系】
安装依赖包
1
|
yum -y
install
ruby rubygems ruby-devel gcc
|
添加国内镜像
[root@ops-rpmbuild01 ~]# gem sources -a http://ruby.taobao.org/
改用
1
|
gem sources -a https:
//ruby
.taobao.org/
|
移除默认的
1
|
gem sources --remove http:
//rubygems
.org/
|
查看源
1
|
gem sources -l
|
【安装fpm包】
gem install fpm
改用
1
|
gem
install
fpm -
v
1.4.0
|
[root@ops-rpmbuild01 ~]# gem install fpm -v 1.4.0
Successfully installed fpm-1.4.0
1 gem installed
Installing ri documentation for fpm-1.4.0...
Installing RDoc documentation for fpm-1.4.0...
参考:
http://www.jianshu.com/p/df61ea673838
【结果】
成功安装
fpm --version
1.4.0
【错误1 】
[root@ops-rpmbuild01 ~]# gem sources -a http://ruby.taobao.org/
Error fetching http://ruby.taobao.org/:
bad response Not Found 404 (http://ruby.taobao.org/specs.4.8.gz)
原因:淘宝停止基于 HTTP 协议的镜像服务 需要改用https的协议
【错误2】
[root@ops-rpmbuild01 ~]# gem install fpm
Building native extensions. This could take a while...
ERROR: Error installing fpm:
ERROR: Failed to build gem native extension.
/usr/bin/ruby extconf.rb
creating Makefile
原因: 系统没有gcc环境 ,安装yum install gcc
【错误3】
[root@ops-rpmbuild01 ~]# gem install fpm
Building native extensions. This could take a while...
Building native extensions. This could take a while...
ERROR: Error installing fpm:
ruby-xz requires Ruby version >= 1.9.3.
默认安装的是
[root@ops-rpmbuild01 ~]# ruby -v
ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]
解决办法: 1 更新ruby
解决办法2: 安装旧版本的fpm
[root@ops-rpmbuild01 ~]# gem install fpm -v 1.4.0
【fpm参数详解之用法】
fpm 包命令参数详解
语法:
1
|
fpm [OPTIONS] [ARGS] ...
|
选项:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
-t 输出类型,我们是制作rpm包,所以-t rpm
-s 输入类型,一般是输入的目录 -s dir
-f 强制,即使安装的时候覆盖已经存在的源文件
-n 包名
-v 包的版本,默认是1.0
-d, 依赖包关系
-C CHDIR Change directory to here before searching for files(安装所需要文件的目录)
--iteration 1.el6 发行
-p ~/rpmbuild/RPMS/x86_64/ rpm包制作生成后的位置
--description 添加包的描述信息
--category 这个软件属于系统的哪个组
--url 包官方路径
--license License
-m, --maintainer MAINTAINER 默认是主机名
--no-rpm-sign
--workdir WORKDIR 工作目录默认是/tmp
|
注意:
关于组categroy: 查看linux(centos)上所有软件的分组情况可以查看文件
1
|
cat
/usr/share/doc/rpm-4
.8.0
/GROUPS
|
License: 软件授权方式,通常就是GPL
【小试牛刀】
参考github的说明 nodejs的rpm包制作(和官网有一定的修改看个人习惯和使用的包种类,我使用rpm包)
https://github.com/jordansissel/fpm/wiki/PackageMakeInstall
步骤:
1
2
3
4
5
6
|
cd
/usr/local/src
wget http:
//nodejs
.org
/dist/v0
.6.0
/node-v0
.6.0.
tar
.gz
tar
xzf node-v0.6.0.
tar
.gz
cd
node-v0.6.0
.
/configure
--prefix=
/usr/local
make
|
This requires your 'make install' obey DESTDIR or otherwise allows you to install to a specific target directory.
1
2
|
mkdir
/data/installdir
make
install
DESTDIR=
/data/installdir
|
此时在/data/installdir这个目录下胡会生成很多目录文件
开始使用fpm制作
# Create a nodejs deb with only bin and lib directories:
# The 'VERSION' and 'ARCH' strings are automatically filled in for you
# based on the other arguments given.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
fpm -s
dir
-t rpm -n nodejs -
v
0.6.0 -C
/data/installdir
\
-n nodejs \
-p
/root
\
--epoch 0 \
-d
"libssl0.9.8 > 0"
\
-d
"libstdc++6 >= 4.4.3"
\
--verbose \
--iteration 1.el6 \
--category
'Development/Languages'
\
--description
'Node.js real-time applications'
\
--url
'nodejs.org'
\
--license GPL \
usr
/local/bin
usr
/local/lib
|
错误1:
Need executable 'rpmbuild' to convert dir to rpm {:level=>:error}
解决: yum install yum install -y rpm-build
查看制作好的包的结果:
rpm -qpi /root/nodejs-0.6.0-1.el6.x86_64.rpm
可以使用 rpm -qpi /root/nodejs-0.6.0-1.el6.x86_64.rpm 可以看到包中含有的文件
########################centos 7 的环境 #############
# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
yum -y install ruby rubygems ruby-devel gcc
gem sources -l
gem sources -a https://ruby.taobao.org/
gem sources --remove https://rubygems.org/
得到的版本
#ruby -v
ruby 2.0.0p598 (2014-11-13) [x86_64-linux]
# fpm -v
1.6.3
工作正常,安装都是默认的。fpm没有指定特殊版本。fpm是最新版本应该。
本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1774475如需转载请自行联系原作者
cuizhiliang