在Linux系统下源码安装软件是家常便饭,但是有是时候重复耗时操作 或者 需要在生产机上安装编译环境等,非常麻烦且安装路径不统一等带来很多的麻烦 ,因此RPM包的出现正好解决了这些问题,同时使得原来繁琐的安装变成一键安装。
(当然得到这样好处的同时也失去了定制自定义安装的灵活性,有稳定还是要灵活,自行斟酌)。
xrdp是一个远程桌面环境服务器,其官方没有提供rpm安装包,特制作一个rpm安装包,顺便学习下怎么打包成rpm。
(本文参考了 作者:朱 茂海 )
制作xrdp的rpm例子
1、建立目录结构 (Redhat系统可能这些目录已经存在,则不用创建,直接进入第二步骤)
/usr/src/redhat/SOURCES — 存放源代码,补丁,图标等文件。
/usr/src/redhat/SPECS — 存放用于管理rpm制作进程的spec文件。
/usr/src/redhat/BUILD — 解压后的文件存放在这里。
/usr/src/redhat/RPMS — 存放由rpmbuild制作好的二进制包。
/usr/src/redhat/SRPMS —存放由rpmbuild制作好的源码包。
- mkdir -p /usr/src/redhat
- cd /usr/src/redhat
- mkdir SOURCES SPECS BUILD RPMS SRPMS
2、下载源码包
下载源码包到SOURCES目录,不需要解压。
- cd /usr/src/redhat/SOURCES
- wget
3、创建Spec文件
- cd /usr/src/redhat/SPECS
- vi xrdp.spec
内容如下:
- #
- #Example spec file for xrdp
- #
- Summary: Remonte desktop server
- Name: xrdp
- Version: 0.6.0
- Release: 0.el5
- License: 2-clause BSD-like license
- Group: Applications/Server
- Source:
- URL:
- Distribution: Linux
-
Packager: hby21c
-
- BuildArch: x86_64
- Requires: boost
- BuildRequires: gcc
- #BuildRoot: %{_tmppath}/{%name}-%{version}
- #Requires: lz-libdrizzle>=1.0
- %description
- Xrdp [engine x] is a remote desktop proxy server, as well as
- a vnc server
-
- %prep
- rm -rf $RPM_BUILD_DIR/xrdp-v0.6.0
- zcat $RPM_SOURCE_DIR/xrdp-v0.6.0.tar.gz | tar -xvf -
-
- %build
- cd $RPM_BUILD_DIR/xrdp-v0.6.0
- ./bootstrap
- ./configure
- #./configure --prefix=/usr/local/nginx
- make
-
- %install
- cd $RPM_BUILD_DIR/xrdp-v0.6.0
- make install
- #make DESTDIR=$RPM_BUILD_ROOT install
-
- %preun
- if [ -z "`ps aux | grep xrdp | grep -v grep`" ]; then
- if test -e /etc/xrdp/xrdp.sh
- then
- /etc/xrdp/xrdp.sh stop
- fi
- #killall xrdp >/dev/null
- exit 0
- fi
-
- %files
- /usr/local/sbin/xrdp*
- /usr/local/lib/xrdp/
- /etc/xrdp/
4、开始RPM制作
在制作RPM包之前需要安装必要的工具,如rpmbuild,gcc等。
- yum install gcc rpm-build pcre-devel
- cd /usr/src/redhat/SPECS/
- rpmbuild -bb xrdp.spec
一切顺利的话,会生成 xrdp 的rpm包,/usr/src/redhat/RPMS/x86_64/xrdp-0.6.0-0.el5.x86_64.rpm
5、测试rpm包
- #安装rpm包
- rpm -ivh /usr/src/redhat/RPMS/x86_64/xrdp-0.6.0-0.el5.x86_64.rpm
- #卸载包
- rpm -e xrdp
spec文件解释
从以上的简单例子可以看出,制作rpm包最重要的还是spec文件,下面解释一下例子所用到的指令。
#:以#开头是注释,rpm会忽略它。
Summary:简单描述软件。
Name :定义rpm的名称。
Version: 定义软件版本
Release: 发行版本
License: 定义许可证
Group: 软件分类
Source: 源码下载地址
URL: 源码相关网站
Distribution: 发行版系列
Packager: 打包人的信息
%description:软件详细描述,可多行
%prep :软件编译之前的处理,如解压。
%build :开始编译软件,如make
%install :开始安装软件,如make install
%files :指定哪些文件需要被打包,如 /usr/local/sbin/xrdp* ,配置文件等...
[这相当于cp命令,将安装包中文件拷贝到目录系统相应目录下]
%preun :定义卸载之前的动作,如停止原有服务或者杀掉进程。
这里只介绍了几个常用的tag,更详细的请参考:
chinaunix上网友也有类似的帖子,可以参考:http://blog.chinaunix.net/uid-23069658-id-3944462.html