1. 建立工作路径
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
2. 下载Redis源码
cd ~/rpmbuild/SOURCES
wget https://download.redis.io/releases/redis-6.2.5.tar.gz
3. 安装依赖、编译和打包工具
yum install -y rpm-build
#1、安装scl,它可以在不覆盖原有软件包的情况下与其共存,缺点就是仅支持64位
yum -y install centos-release-scl
#2、安装gcc,其中的9表示大版本号,默认安装大版本下的最新稳定版本
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
#3、使用以下命令临时启动gcc,这种方式适用于临时切换系统的gcc版本,即开即用,仅在当前bash中有效,重启虚拟机就又变成4.8.5了
scl enable devtoolset-9 bash
#4、使用以下命令永久启动gcc,这种方式适用于长期使用该版本进行编译,切换bash依然有效
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
#查看gcc环境
gcc -v
4. 编写SPEC文件
cd ~/rpmbuild/SPECS
vim redis_build.spec
# 软件名
Name: redis
# 版本号
Version: 6.2.5
# 发布编号
Release: 1%{?dist}
# 软件说明
Summary(zh_CN): 这是redis项目
# 软件包的版权协议
License: GPLv3+
URL: https://download.redis.io/releases/
Source0: redis-6.2.5.tar.gz
# 编译需要的依赖
BuildRequires: gcc
# 本软件需要的依赖
#Requires:
%description -l zh_CN
这个是一个redis项目练手项目,进行redis打包等操作。
%prep
%setup -q
# 编译阶段执行的命令
%build
make
# 安装阶段执行的命令
%install
rm -rf %{buildroot}
make install PREFIX=%{buildroot}
cp %{_builddir}/%{name}-%{version}/redis.conf %{buildroot}/bin/
# 安装后执行的命令
%post
cat>/lib/systemd/system/redis.service<<-EOF
[Unit]
Description=Redis
After=network.target
[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/bin/redis-server
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
# 卸载前执行的命令
%preun
rm -rf /lib/systemd/system/redis.service
# 将所需要打包的文件都存放到这边中;-f %{name}.lang 加上后的意思为声明找到的文件
%files
/bin/*
# 软件更新说明
%changelog
5.检查SPEC文件(可略)
rpmlint redis_build.spec
6.打包
centos7以及下命令:
cd ~/rpmbuild/SPECS
rpmbuild -ba redis_build.spec
centos8命令:
cd ~/rpmbuild/SPECS
rpmbuild -ba redis_build.spec --nodebuginfo