rpm的包制作
时间:2017-02-02 00:47 来源:linux.it.net.cn 作者:IT
方法一:rpmbuild
一、制作步骤
生成rpmbuild目录
# rpmbuild lsyncd-2.0.5.tar.gz //在当前用户家目录生成目录树
BUILD:源代码解压以后放的位置
RPMS:制作完成后的rpm包存放目录,为特定平台指定子目录(x86_64)
SOURCES:收集的源文件,源材料,补丁文件等存放位置
SPECS:存放spec文件,作为制作rpm包的领岗文件,以rpm名.spec
SRPMS:src格式的rpm包位置 ,既然是src格式的包,就没有平台的概念了
BuiltRoot:假根,使用install临时安装到这个目录,把这个目录当作根来用的,所以在这个目录下的目录文件,才是真正的目录文件。当打包完成后,在清理阶段,这个目录将被删除
将源码包放到 SOURCES目录
在SPEC目录生成.spec文件 //编辑 lsyncd 的 spec 规则文件,文件名字必须与源码一致,如 :lsyncd-2.0.5.tar.gz 源码, 规则文件就应该为 lsyncd-2.0.5.spec
编辑spec文件
二、过程详解
spec 文件说明
Name: //软件名称,如 lsyncd,后面可使用%{name}的方式引用
Version: //软件版本号,仅当软件较以前有较大改变时才增加版本号。如 2.0.51%{?dist}
Release: //软件发布序列号,标明第几次打包。若软件较以前改变较小,则仅增加发布序列号,而不改变版本号
Summary: //概要,对软件简单的描述
Group: //软件包所属类别,具体类别参看 rpm 的帮助文件/usr/share/doc/rpm-4.8.0/GROUPS,所有软件必须属于其中一种类型。
License://许可类型,如:GPL(自由软件),commercial(商业),Share(共享), GNU 等
URL://软件下载地址(可以省略)
Source0: //源码名称
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) //该参数非常重要,因为在生成 rpm 的过程中,执行 make install 时就会把软件安装到上述 的路径中,在打包的时候,同样依赖“虚拟目录”为“根目录”进行操作。 后面可使用$RPM_BUILD_ROOT 方式引用。
BuildRequires://软件依赖关系描述(可以省略)
Requires://该 rpm 包所依赖的软件包名称
%description //对软件的详细描述,可以写多行
%prep //这个段是预处理段,通常用来执行一些解开源程序包的命令,为下一 步的编译安装作准备。
%setup -q //提取源码到 BUILD 目录; -q 指不显示输出(quietly)
%build //本段是建立段,所执行的命令为生成软件包服务,相当于./configure 和 make
%configure
make %{?_smp_mflags}
%install //这一节主要用于完成实际安装软件必须执行的命令,这一节一般是由 make install 指令构成,但是有时也会包含 cp、mv、install 等指令
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
%clean //这一节所描述的内容表示在完成包建立的工作之后,自动执行此节 下的脚本进行附加的清除工作,这一节的内容通常简单地使用 rm -rf $RPM_BUILD_ROOT 命 令,不需要指定此节的其它内容
rm -rf $RPM_BUILD_ROOT
%files //这一节指定构成包的文件的列表,它是使用节前缀%files 表示的。 此外,它还包含一系列宏控制安装后的文件属性和配置信息。,分为三类--说明文档(doc), 配置文件(config)及执行程序,也根据提示编写。%files 下列出应该捆绑到 RPM 中的文件, 并能够可选地设置许可权和其它信息
%defattr(-,root,root,-) //指定包装文件的属性,分别是(mode,owner,group),-表示默认值, 对文本文件是 0644,可执行文件是 0755
%doc
%changelog //本段是修改日志段。你可以将软件的每次修改记录到这里,保存到发布的软件包中
按要求填写spec文件
rpmbuild -ba lsyncd-2.0.5.spec //顺利通过编译,使用-ba 生成 rpm 包和 srpm 包,查看生成的目标 rpm 包
方法二:fpm
fpm命令的参数
参考链接
% fpm -s <source type> -t <target type> [options]
-s 源格式
-t 目标格式
-n 包名
-v version值,实际版本号
--iteration release值,发布序列号
--epoch epoch值
--vendor 厂商
--maintainer 维护者
--description 描述
--url 软件主页
--workdir fpm工作目录
-d 依赖的软件包
--directories 递归指定的目录标记为属于这个包
-C 切换到指定的目录
-p 输出到指定的路径
--force 强制覆盖文件
--after-install FILE 包安装后执行的脚本
--before-install FILE 包安装前执行的脚本
--after-remove FILE 包移除后执行的脚本
--before-remove FILE 包移除前执行的脚本
--after-upgrade FILE 包升级后执行的脚本
--before-upgrade FILE 包升级前执行的脚本
-e building前编辑spec文件
fpm安装与环境配置
安装ruby和fpm
# yum install ruby rubygems ruby-devel
更换gem的源:
# gem sources --remove http://rubygems.org/
# gem sources -a http://mirrors.aliyun.com/rubygems/
# gem sources -a https://ruby.taobao.org/
# gem sources -l
*** CURRENT SOURCES ***
http://mirrors.aliyun.com/rubygems/
https://ruby.taobao.org/
# gem -v
1.3.7
# ruby -v
ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]
安装fpm
# gem install fpm -V
# fpm --version
fpm打包实例
fpm功能强大,可以打包rpm、deb等,实现简单,过程容易理解,打包利器。
将目录打成zabbix-agent包
# fpm -s dir -t rpm -a 'x86_64' -n 'zabbix-agent-ops' -v '2.0.5' --iteration '6' --epoch '0' --vendor 'zhifanzhao@anjuke.com' --maintainer 'ajk-ops' -p /work-space --post-install postinst --after-remove postrm --description 'zabbix-agent-ops' /usr/local/zabbix-agent-ops /etc/init.d/zabbix-agent-ops /etc/cron.d/zabbix-agent-ops
# cat postinst //包安装后执行脚本
#!/bin/bash
set -e
if [[ `egrep -c "zabbix" /etc/passwd` -ne 1 ]];then
{
/usr/sbin/useradd zabbix -d /usr/local/zabbix-agent-ops/var -s /sbin/nologin > /dev/null
}
fi
/bin/chown -R zabbix:zabbix /usr/local/zabbix-agent-ops > /dev/null
/usr/local/zabbix-agent-ops/sbin/zabbix_agentd
sed -i '$i /usr/local/zabbix-agent-ops/sbin/zabbix_agentd' /etc/rc.local
# cat postrm //包卸载后执行脚本
#!/bin/sh -e
id zabbix > /dev/null 2>&1
if [ $? -eq 0 ];then
{
userdel zabbix
}
fi
exit 0
将目录打成deb包
#fpm -s dir -t deb -a 'x86_64' -n 'ajk_gseagent' -v '1.0' --iteration '2' --epoch '0' --vendor 'zhifanzhao@anjuke.com' --maintainer 'ajk-ops' -p /work-space --post-install postinst --post-uninstall postrm --deb-no-default-config-files --description 'ajk gseagent' /usr/local/ajk_gseagent
rpm解压
rpm2cpio xxx.rpm | cpio -div
(责任编辑:IT)
方法一:rpmbuild 一、制作步骤 生成rpmbuild目录 # rpmbuild lsyncd-2.0.5.tar.gz //在当前用户家目录生成目录树 BUILD:源代码解压以后放的位置 RPMS:制作完成后的rpm包存放目录,为特定平台指定子目录(x86_64) SOURCES:收集的源文件,源材料,补丁文件等存放位置 SPECS:存放spec文件,作为制作rpm包的领岗文件,以rpm名.spec SRPMS:src格式的rpm包位置 ,既然是src格式的包,就没有平台的概念了 BuiltRoot:假根,使用install临时安装到这个目录,把这个目录当作根来用的,所以在这个目录下的目录文件,才是真正的目录文件。当打包完成后,在清理阶段,这个目录将被删除 将源码包放到 SOURCES目录 在SPEC目录生成.spec文件 //编辑 lsyncd 的 spec 规则文件,文件名字必须与源码一致,如 :lsyncd-2.0.5.tar.gz 源码, 规则文件就应该为 lsyncd-2.0.5.spec 编辑spec文件 二、过程详解 spec 文件说明 Name: //软件名称,如 lsyncd,后面可使用%{name}的方式引用 Version: //软件版本号,仅当软件较以前有较大改变时才增加版本号。如 2.0.51%{?dist} Release: //软件发布序列号,标明第几次打包。若软件较以前改变较小,则仅增加发布序列号,而不改变版本号 Summary: //概要,对软件简单的描述 Group: //软件包所属类别,具体类别参看 rpm 的帮助文件/usr/share/doc/rpm-4.8.0/GROUPS,所有软件必须属于其中一种类型。 License://许可类型,如:GPL(自由软件),commercial(商业),Share(共享), GNU 等 URL://软件下载地址(可以省略) Source0: //源码名称 BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) //该参数非常重要,因为在生成 rpm 的过程中,执行 make install 时就会把软件安装到上述 的路径中,在打包的时候,同样依赖“虚拟目录”为“根目录”进行操作。 后面可使用$RPM_BUILD_ROOT 方式引用。 BuildRequires://软件依赖关系描述(可以省略) Requires://该 rpm 包所依赖的软件包名称 %description //对软件的详细描述,可以写多行 %prep //这个段是预处理段,通常用来执行一些解开源程序包的命令,为下一 步的编译安装作准备。 %setup -q //提取源码到 BUILD 目录; -q 指不显示输出(quietly) %build //本段是建立段,所执行的命令为生成软件包服务,相当于./configure 和 make %configure make %{?_smp_mflags} %install //这一节主要用于完成实际安装软件必须执行的命令,这一节一般是由 make install 指令构成,但是有时也会包含 cp、mv、install 等指令 rm -rf $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT %clean //这一节所描述的内容表示在完成包建立的工作之后,自动执行此节 下的脚本进行附加的清除工作,这一节的内容通常简单地使用 rm -rf $RPM_BUILD_ROOT 命 令,不需要指定此节的其它内容 rm -rf $RPM_BUILD_ROOT %files //这一节指定构成包的文件的列表,它是使用节前缀%files 表示的。 此外,它还包含一系列宏控制安装后的文件属性和配置信息。,分为三类--说明文档(doc), 配置文件(config)及执行程序,也根据提示编写。%files 下列出应该捆绑到 RPM 中的文件, 并能够可选地设置许可权和其它信息 %defattr(-,root,root,-) //指定包装文件的属性,分别是(mode,owner,group),-表示默认值, 对文本文件是 0644,可执行文件是 0755 %doc %changelog //本段是修改日志段。你可以将软件的每次修改记录到这里,保存到发布的软件包中 按要求填写spec文件 rpmbuild -ba lsyncd-2.0.5.spec //顺利通过编译,使用-ba 生成 rpm 包和 srpm 包,查看生成的目标 rpm 包 方法二:fpm fpm命令的参数 参考链接 % fpm -s <source type> -t <target type> [options] -s 源格式 -t 目标格式 -n 包名 -v version值,实际版本号 --iteration release值,发布序列号 --epoch epoch值 --vendor 厂商 --maintainer 维护者 --description 描述 --url 软件主页 --workdir fpm工作目录 -d 依赖的软件包 --directories 递归指定的目录标记为属于这个包 -C 切换到指定的目录 -p 输出到指定的路径 --force 强制覆盖文件 --after-install FILE 包安装后执行的脚本 --before-install FILE 包安装前执行的脚本 --after-remove FILE 包移除后执行的脚本 --before-remove FILE 包移除前执行的脚本 --after-upgrade FILE 包升级后执行的脚本 --before-upgrade FILE 包升级前执行的脚本 -e building前编辑spec文件 fpm安装与环境配置 安装ruby和fpm # yum install ruby rubygems ruby-devel 更换gem的源: # gem sources --remove http://rubygems.org/ # gem sources -a http://mirrors.aliyun.com/rubygems/ # gem sources -a https://ruby.taobao.org/ # gem sources -l *** CURRENT SOURCES *** http://mirrors.aliyun.com/rubygems/ https://ruby.taobao.org/ # gem -v 1.3.7 # ruby -v ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux] 安装fpm # gem install fpm -V # fpm --version fpm打包实例 fpm功能强大,可以打包rpm、deb等,实现简单,过程容易理解,打包利器。 将目录打成zabbix-agent包 # fpm -s dir -t rpm -a 'x86_64' -n 'zabbix-agent-ops' -v '2.0.5' --iteration '6' --epoch '0' --vendor 'zhifanzhao@anjuke.com' --maintainer 'ajk-ops' -p /work-space --post-install postinst --after-remove postrm --description 'zabbix-agent-ops' /usr/local/zabbix-agent-ops /etc/init.d/zabbix-agent-ops /etc/cron.d/zabbix-agent-ops # cat postinst //包安装后执行脚本 #!/bin/bash set -e if [[ `egrep -c "zabbix" /etc/passwd` -ne 1 ]];then { /usr/sbin/useradd zabbix -d /usr/local/zabbix-agent-ops/var -s /sbin/nologin > /dev/null } fi /bin/chown -R zabbix:zabbix /usr/local/zabbix-agent-ops > /dev/null /usr/local/zabbix-agent-ops/sbin/zabbix_agentd sed -i '$i /usr/local/zabbix-agent-ops/sbin/zabbix_agentd' /etc/rc.local # cat postrm //包卸载后执行脚本 #!/bin/sh -e id zabbix > /dev/null 2>&1 if [ $? -eq 0 ];then { userdel zabbix } fi exit 0 将目录打成deb包 #fpm -s dir -t deb -a 'x86_64' -n 'ajk_gseagent' -v '1.0' --iteration '2' --epoch '0' --vendor 'zhifanzhao@anjuke.com' --maintainer 'ajk-ops' -p /work-space --post-install postinst --post-uninstall postrm --deb-no-default-config-files --description 'ajk gseagent' /usr/local/ajk_gseagent rpm解压 rpm2cpio xxx.rpm | cpio -div (责任编辑:IT) |