您的位置:首页 > 运维架构 > Linux

Centos下用tar源码包制作rpm包

2013-07-15 16:54 489 查看
公司有需求要求加密redis,本来是有个配置文件选项requirepass 可以设置密码,但是公司觉得可以通过修改配置文件使密码失效,感觉不安全,于是乎直接修改源码(强制设置requirepass为固定密码),做成rpm包就非常安全了

1.下载redis源码包

http://redis.googlecode.com/files/redis-2.6.14.tar.gz

2.修改源码编译

tar zxvf redis-2.6.14.tar.gz

cd redis-2.6.14

vim src/config.c

把331行给删除,移到else语句结束后,不管为不为空都设置requirepass

server.requirepass = zstrdup("123456"); #加到426行

保存退出,然后接下来编译

make

\cp src/redis-server /usr/local/bin/

\cp src/redis-cli /usr/local/bin/

3.制作rpm包

mv redis-2.6.14.tar.gz /usr/src/redhat/SOURCES

cd /usr/src/redhat/SPECS/

vim redis.spec

Summary:the first rpm package

Name:redis

Version:2.6.14

Release:2

Vendor:zhangrenfang@gmail.com

License:Share

Group:Applications/Text

Source:redis-2.6.14.tar.gz

%description

my test redis crypto

%prep

tar -zxvf /usr/src/redhat/SOURCES/redis-2.6.14.tar.gz

%build

cd /usr/src/redhat/BUILD/redis-2.6.14

make

%clean

rm -rf /usr/src/redhat/BUILD/redis-2.6.14

%files

%defattr(-,root,root)

/usr/local/bin/redis-cli

/usr/local/bin/redis-server

[root@localhost SPECS]# rpmbuild -ba redis.spec

若运行没有错误,则产生,/usr/src/redhat/SRPMS/redis-2.6.14-2.src.rpm和/usr/src/redhat/RPMS/x86_64/redis-2.6.14-2.x86_64.rpm

rpm -qpi redis-2.6.14-2.x86_64.rpm可以查看到包的信息




relocations:如果非空,表示包可以安装到新的目录。在安装包的时候,使用--relocate=/usr/loca/=/home/cyx/ 这样来修改包的安装位置。

不过可能不能使用,因为包是二进制的,可能程序编译的时候使用了绝对路径。

rpm包制作由rpmbuild来生成。rpmbuild用到了几个目录:

BUILD RPMS SOURCES SPECS SRPMS

BUILD:build过程执行的目录

RPMS:最后生成的RPM包的位置

SOURCES:源文件位置

SPECS:spec文件的位置,rpmbuild使用spec文件的描述信息来build包

SRPMS:源代码rpm包的位置

spec文件是指导rpmbuild生成包的关键文件。放在SPECS目录下面:

----------------------------------example------------------------------------------------------------------

[root@v092019 SPECS]# cat nginx-0.8.54.spec

Name:nginx 包名

Summary:nginx-server! 摘要

Version:0.8.54 版本

Release:1 发行

Group:taobao.com 组织

License:GPL 许可

URL:http://www.nginx.com/ 官网

BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root build的目录,会在这里build出二进制

Source:%{name}-%{version}.tar.gz 源码文件的名称,放在SOURCES目录下

Prefix:%{_prefix} 前缀,有这个值,包生成时候就有relocations。

Packager:nginx 包名称

%description 下面是对包的描述

nginx-httpd-server

%prep
下面是准备工作

%setup -q
这里使用了内建命令,解开源码包到BUILD目录

%build
开始建立包,对应于configure和make,在BUILD目录

CFLAGS="-g" ./configure

make -j `cat /proc/cpuinfo | grep processor | wc -l`

%install
安装包到Buildroot

make DESTDIR=$RPM_BUILD_ROOT install

%files
最后,把文件打包进rpm包,这里指定要打包进去的文件,权限和属主,这里的目录是相对于Buildroot的目录,但是要以'/'开头。

%defattr(755,daemon,daemon)

/usr/local/%{name}

%pre
在用rpm命令安装包前执行这里的动作

echo nginx,preinstall

%post
在用rpm命令安装完后执行这里的动作

echo nginx,afterinstall,done

%preun
在卸载前执行这里的动作

echo nginx,uninstall

%postun
在卸载后执行这里的动作

echo nginx,uninstall,done

---------------------------------------------end-----------------------------------------------------------------

这样我们就可以定制自己的rpm包了

参考链接:http://zhumeng8337797.blog.163.com/blog/static/100768914201110185456104/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: