####################################### centos 6.5 的环境#################
【前提需求知识】
rpm包的组成
1、RPM的命名格式:name-version-release.arch.rpm
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是代表啥意思:
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的打包功能及其分包机制:
核心包,即主包,它的命名与源程序一样(不是源代码啊)
例子: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
【解决依赖关系】
安装依赖包
yum -y install ruby rubygems ruby-devel gcc
添加国内镜像
[root@ops-rpmbuild01 ~]# gem sources -a http://ruby.taobao.org/
改用
gem sources -a https://ruby.taobao.org/
移除默认的
gem sources --remove http://rubygems.org/
查看源
gem sources -l
【安装fpm包】
gem install fpm
改用
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 包命令参数详解
语法:
fpm [OPTIONS] [ARGS] ...
选项:
-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)上所有软件的分组情况可以查看文件
cat /usr/share/doc/rpm-4.8.0/GROUPS
License: 软件授权方式,通常就是GPL
【小试牛刀】
参考github的说明 nodejs的rpm包制作(和官网有一定的修改看个人习惯和使用的包种类,我使用rpm包)
https://github.com/jordansissel/fpm/wiki/PackageMakeInstall
步骤:
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.
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.
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是最新版本应该。
转载于:https://blog.51cto.com/cuidehua/1774475