公司有需求要求加密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  #% de会乱码所以下面用空格隔开,注意删除空格% description,% defattr(-,root,root)
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可以查看到包的信息

redis完整rpm redis rpm包_redis

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包了

https://blog.51cto.com/80888888/1333237