1.首先介绍一下RPM与SRPM的区别
2.RPM制作
(1)下载软件源码包
获得源码包 lsyncd-2.0.5.tar.gz
进入源码包所在的文件夹下
注意:制作rpm包需要gcc等开发软件的支持 记得要安装哦
(2)[root@localhost lianxi]# rpmbuild lsyncd-2.0.5.tar.gz #运行次命令会自动在/root下面创建rpmbuild文件夹
注意:如果提示没有此命令请搭建好yum.repo 利用yum install rpmbuild 进行安装
error: File /lianxi/lsyncd-2.0.5.tar.gz does not appear to be a specfile. #此时有错属正常,不担 心
[root@localhost rpmbuild]# pwd
/root/rpmbuild
[root@localhost rpmbuild]# cp /lianxi/lsyncd-2.0.5.tar.gz SOURCES/
[root@localhost rpmbuild]# tree
.
|-- BUILD
|-- BUILDROOT
|-- RPMS
|-- SOURCES
| `-- lsyncd-2.0.5.tar.gz
|-- SPECS
`-- SRPMS
(3)生成spec文件
[root@localhost rpmbuild]# cd SPECS/
[root@localhost SPECS]# vim lsyncd-2.0.5.spec #运行此命令系统会自动生成.spec模板
模板简要说明
Name:#软件名称,如 lsyncd,可使用%{name}引用
Version: #软件版本号,
Release: 1%{?dist}#软件发布序列号,标明第几次打包。若软件较以前改变较小,则仅增加发布序列号,而不改变版本号
Summary: #概要
Group: #软件包所属类别/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 #本段是修改日志段。你可以将软件的每次修改记录到这里,保存到发布的软件包中
(4)[root@localhost lianxi]# tar xf lsyncd-2.0.5.tar.gz -C /usr/src
[root@localhost lianxi]# cd /usr/src/lsyncd-2.0.5/
[root@localhost lsyncd-2.0.5]# ./configure
注意:如果报错查看是否有依赖关系,如有,请先安装需要的rpm包;此软件需要 “lua-devel*”包的支持,请到rpmfind.net去下载你所需要的rpm包
[root@localhostlsyncd-2.0.5]# make;make install 运#行并将下属内容添加到.spec文件中%install下面
注意:将这一段内容中所有的单引号去掉或者换成双引号,因为要允许变量
test -z "/usr/local/bin" || /bin/mkdir -p "/usr/local/bin"
/usr/bin/install -c "lsyncd" "/usr/local/bin/lsyncd"
test -z "/usr/local/share/doc/lsyncd/" || /bin/mkdir -p "/usr/local/share/doc/lsyncd/"
/usr/bin/install -c -m 644 "examples/lbash.lua" "/usr/local/share/doc/lsyncd//lbash.lua"
/usr/bin/install -c -m 644 "examples/lecho.lua" "/usr/local/share/doc/lsyncd//lecho.lua"
/usr/bin/install -c -m 644 "examples/lgforce.lua" "/usr/local/share/doc/lsyncd//lgforce.lua"
/usr/bin/install -c -m 644 "examples/limagemagic.lua" "/usr/local/share/doc/lsyncd//limagemagic.lua"
/usr/bin/install -c -m 644 "examples/lpostcmd.lua" "/usr/local/share/doc/lsyncd//lpostcmd.lua"
/usr/bin/install -c -m 644 "examples/lrsync.lua" "/usr/local/share/doc/lsyncd//lrsync.lua"
/usr/bin/install-c -m 644 "examples/lrsyncssh.lua""/usr/local/share/doc/lsyncd//lrsyncssh.lua"
test -z "/usr/local/share/man/man1" || /bin/mkdir -p "/usr/local/share/man/man1"
/usr/bin/install -c -m 644 "./doc/lsyncd.1" "/usr/local/share/man/man1/lsyncd.1"
test -z "" || /bin/mkdir -p ""
(5)[root@localhostSPECS]# rpmbuild -bb lsyncd-2.0.5.spec#再次运行获得以下文件并将其添加到.spec文件中%file下面
/usr/bin/lsyncd
/usr/share/doc/lsyncd/lbash.lua
/usr/share/doc/lsyncd/lecho.lua
/usr/share/doc/lsyncd/lgforce.lua
/usr/share/doc/lsyncd/limagemagic.lua
/usr/share/doc/lsyncd/lpostcmd.lua
/usr/share/doc/lsyncd/lrsync.lua
/usr/share/doc/lsyncd/lrsyncssh.lua
/usr/share/man/man1/lsyncd.1.gz
(6).spec文件编译完成如下
Name:lsyncd
Version:2.0.5
Release:1%{?dist}
Summary:lsync is a soft of data sync
Group:System Environment/Base
License:GNU
URL:file:///lianxi
Source0:lsyncd-2.0.5.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires:lua-devel
Requires:lua
%description
lsyncd uses with rsyncd
%prep
%setup -q
%build
make %{?_smp_mflags}
%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}
test -z "/usr/local/bin" || /bin/mkdir -p "/usr/local/bin"
/usr/bin/install -c "lsyncd" "/usr/local/bin/lsyncd"
test -z "/usr/local/share/doc/lsyncd/" || /bin/mkdir -p "/usr/local/share/doc/lsyncd/"
/usr/bin/install -c -m 644 "examples/lbash.lua" "/usr/local/share/doc/lsyncd//lbash.lua"
/usr/bin/install -c -m 644 "examples/lecho.lua" "/usr/local/share/doc/lsyncd//lecho.lua"
/usr/bin/install -c -m 644 "examples/lgforce.lua" "/usr/local/share/doc/lsyncd//lgforce.lua"
/usr/bin/install -c -m 644 "examples/limagemagic.lua" "/usr/local/share/doc/lsyncd//limagemagic.lua"
/usr/bin/install -c -m 644 "examples/lpostcmd.lua" "/usr/local/share/doc/lsyncd//lpostcmd.lua"
/usr/bin/install -c -m 644 "examples/lrsync.lua" "/usr/local/share/doc/lsyncd//lrsync.lua"
/usr/bin/install-c -m 644 "examples/lrsyncssh.lua""/usr/local/share/doc/lsyncd//lrsyncssh.lua"
test -z "/usr/local/share/man/man1" || /bin/mkdir -p "/usr/local/share/man/man1"
/usr/bin/install -c -m 644 "./doc/lsyncd.1" "/usr/local/share/man/man1/lsyncd.1"
test -z "" || /bin/mkdir -p ""
%clean
rm -rf %{buildroot}
%files
/usr/share/doc/lsyncd/lbash.lua
/usr/share/doc/lsyncd/lecho.lua
/usr/share/doc/lsyncd/lgforce.lua
/usr/share/doc/lsyncd/limagemagic.lua
/usr/share/doc/lsyncd/lpostcmd.lua
/usr/share/doc/lsyncd/lrsync.lua
/usr/share/doc/lsyncd/lrsyncssh.lua
/usr/share/man/man1/lsyncd.1.gz
%defattr(-,root,root,-)
%doc
%changelog
%changelog
* Tue May 22 2014 <root@localhost>
--end
现在你大部分工作已经做完了开始你新的旅程吧
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 18121032 1772188 15428320 11% /
tmpfs 118092 0 118092 0% /dev/shm
/dev/sda1 495844 31704 438540 7% /boot
/dev/sr0 4363088 4363088 0 100% /mnt
[root@localhost ~]# cp /mnt/* /iso/ -rf
[root@localhost ~]# cp rpmbuild/RPMS/x86_64/cmatrix-1.2a-1.x86_64.rpm /iso/
CentOS_BuildTag RELEASE-NOTES-en-US.html
EFI/ repodata/
EULA RPM-GPG-KEY-CentOS-6
GPL RPM-GPG-KEY-CentOS-Debug-6
images/ RPM-GPG-KEY-CentOS-Security-6
isolinux/ RPM-GPG-KEY-CentOS-Testing-6
Packages/ TRANS.TBL
[root@localhost ~]# cp rpmbuild/RPMS/x86_64/cmatrix-1.2a-1.x86_64.rpm /iso/Packages/
[root@localhost ~]# cd /iso
[root@localhost iso]# yum install createrepo
[root@localhost iso]# createrepo --update /iso/
Spawning worker 0 with 3996 pkgs