rpmbuild命令用于创建软件的二进制包和源代码包。
1.准备环境
系统:Centos7
安装所需编译环境:
# yum install epel-release -y
# yum install rpmdevtools rpm-build gcc make tcl jemalloc -y
2.提前编译安装redis,此处以activemq-5.16.5-版本为例
activemq源码包下载地址:http://archive.apache.org/dist/activemq/5.16.5/apache-activemq-5.16.5-bin.tar.gz
# mv apache-activemq-5.16.5-bin.tar.gz apache-activemq-5.16.5.tar.gz
3.生成rpm包
执行如下命令来生成rpmbuild的工作目录
# rpmdev-setuptree
# vim activemq.spec
Name: apache-activemq
Version: 5.16.5
Release: 1%{?dist}
Summary: apache-activemq
License: GPLv3
Source0: apache-activemq-5.16.5.tar.gz
BuildRequires: bash
%global app_bin_dir /opt/%{name}-%{version}
%global debug_package %{nil}
%description
apache-activemq
%prep
%setup -q -n %{name}-%{version}
%install
mkdir -p %{buildroot}/%{app_bin_dir}/
cp -r ./* %{buildroot}/%{app_bin_dir}/
%files
%defattr(-,root,root,500)
%{app_bin_dir}/*
%post
# 生成activemq.service文件
cat > /etc/systemd/system/activemq.service <<EOF
[Unit]
Description=Apache ActiveMQ Message Broker
After=network-online.target
[Service]
Type=forking
User=root
Group=root
WorkingDirectory=%{app_bin_dir}/bin
ExecStart=%{app_bin_dir}/bin/activemq start
ExecStop=%{app_bin_dir}/bin/activemq stop
Restart=on-abort
[Install]
WantedBy=multi-user.target
EOF
systemctl enable activemq.service
# 启动
#systemctl start activemq
#%preun
#systemctl stop activemq
%postun
rm -fr %{app_bin_dir}
将上步打包好的文件放到此目录下/root/rpmbuild/SOURCES/
# cp -rf /usr/local/apache-activemq-5.16.5.tar.gz/root/rpmbuild/SOURCES/
编译打包
# rpmbuild -ba activemq.spec
会在此目录下生成rpm包
# ls /root/rpmbuild/RPMS/x86_64/
apache-activemq-5.16.5-1.el7.x86_64.rpm
4.在新的环境上安装redis的rpm包,测试是否可以正常启停
# rpm -ivh apache-activemq-5.16.5-1.el7.x86_64.rpm
配置文件中添加以下内容,否则会启动报错
# vim /opt/apache-activemq-5.16.5/bin/env
JAVA_HOME=/usr/local/jdk
# systemctl status activemq