nginx rpm打包spec文件

作者: ropon 分类: 经验分享 发布时间: 2018-11-09 13:57
#RPM包名称,文件中可使用%{name}调用。
Name: nginx
#RPM包版本号,文件中可使用%{version}调用
Version: 1.16.0
#打包特定版本号,常指第几次打包,其中dist centos6下是.el6,centos7下是.el7。
Release: 1%{?dist}
#RPM包摘要,简单描述RPM包
Summary: %{name}-%{version} RPM
#prefix: /usr/local/%{name}-%{version}

Group: applications/web
License: GPL
URL: https://nginx.org

#指定构建需要的源代码,多个源码包,使用Source1,2...,n
Source0: %{name}-%{version}.tar.gz
Source1: openssl-1.1.1a.tar.gz
Source2: pcre-8.42.tar.gz
Source3: zlib-1.2.11.tar.gz

#_tmppath是/var/tmp
#安装或编译时虚拟目录
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
#制作rpm包时所需依赖
BuildRequires: gcc-c++
#安装rpm包时所需依赖
#Requires: gcc-c++ perl pcre-devel openssl openssl-devel
Packager: ropon@west.cn

#autoreqprov用来指定自动产生RPM依赖关系
AutoReqProv: no

%define _runuser www
%define _rungroup www
%define _wwwdir /home/wwwroot
%define _logsdir /home/weblogs
%define _default_dir /home/wwwroot/default
%define _vhost_dir /home/panel/vhost
%define _prefix /usr/local/%{name}-%{version}
%define nginxpath /usr/local/nginx

#setup 不加任何选项,仅将软件包打开。
#setup -n newdir 将软件包解压在newdir目录。
#setup -c 解压缩之前先产生目录。
#setup -b num 将第num个source文件解压缩。
#setup -T 不使用default的解压缩操作。
#setup -T -b 0 将第0个源代码文件解压缩。
#setup -c -n newdir 指定目录名称newdir,并在此目录产生rpm套件。

#RPM包详细描述
%description
%{name} %{version}

#构建前的准备
%prep
%setup -b 0
%setup -b 1
%setup -b 2
%setup -b 3

#构建
%build
./configure --prefix=%{_prefix} \
--user=%{_runuser} \
--group=%{_rungroup} \
--with-http_stub_status_module \
--with-http_v2_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-openssl=../openssl-1.1.1a \
--with-pcre=../pcre-8.42 \
--with-zlib=../zlib-1.2.11 \
--with-pcre-jit
make %{?_smp_mflags}

#安装
%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}

#rpm安装前执行的脚本
%pre
id -u %{_runuser} >/dev/null 2>&1
[ $? -ne 0 ] && useradd -M -s /sbin/nologin %{_runuser}
[ ! -d %{_wwwdir} ] && mkdir -p %{_wwwdir}
[ ! -d %{_logsdir} ] && mkdir -p %{_logsdir}
chown -R %{_runuser}:%{_rungroup} %{_wwwdir}

#rpm安装后执行的脚本
%post
service nginx stop
mv %{nginxpath} %{nginxpath}_bak
ln -sf %{_prefix} %{nginxpath} 
wget -O /etc/systemd/system/nginx.service http://panel.ropon.top/panel/lnmp/init.d/nginx.service.txt
sed -i "s@/usr/local/nginx@%{_prefix}@g" /etc/systemd/system/nginx.service
systemctl enable nginx

wget -O %{_prefix}/conf/nginx.conf http://panel.ropon.top/panel/lnmp/config/nginx.txt

sed -i "s@/data/wwwroot/default@%{_wwwdir}/default@" %{_prefix}/conf/nginx.conf
sed -i "s@/data/wwwlogs@%{_logsdir}@g" %{_prefix}/conf/nginx.conf
sed -i "s@^user www www@user %{_runuser} %{_rungroup}@" %{_prefix}/conf/nginx.conf
[ ! -d %{_default_dir} ] && mkdir -p %{_default_dir}
[ ! -d %{_vhost_dir} ] && mkdir -p %{_vhost_dir}

wget -O /etc/logrotate.d/nginx http://panel.ropon.top/panel/lnmp/config/nginxlogs.txt
sed -i "s@/data/wwwlogs@%{_logsdir}@g" /etc/logrotate.d/nginx
ln -sf %{_vhost_dir} %{_prefix}/conf/vhost

wget -O %{_default_dir}/index.html http://panel.ropon.top/panel/lnmp/config/index.txt
sleep 1
wget -O %{_default_dir}/phpinfo.php http://panel.ropon.top/panel/lnmp/config/phpinfo.txt

[ -z "$(grep ^'export PATH=' /etc/profile)" ] && echo "export PATH=%{_prefix}/sbin:\$PATH" >> /etc/profile
[ -n "$(grep ^'export PATH=' /etc/profile)" -a -z "$(grep %{_prefix} /etc/profile)" ] && sed -i "s@^export PATH=\(.*\)@export PATH=%{_prefix}/sbin:\1@" /etc/profile
source /etc/profile

service nginx start

#rpm卸载前执行的脚本
%preun
service nginx stop
systemctl disable nginx
id -u %{_runuser} >/dev/null 2>&1
[ $? -eq 0 ] && userdel %{_runuser}

#卸载后执行的脚本
%postun
Deldir() {
	[ -d $1 ] && rm -rf $1
}

Delfile() {
	[ -f $1 ] && rm -rf $1
}
Deldir %{_wwwdir}
Deldir %{_logsdir}
Deldir %{_vhost_dir}
Deldir %{_prefix}
rm -r %{nginxpath}
Delfile /etc/systemd/system/nginx.service
Delfile /etc/logrotate.d/nginx


%clean
rm -rf %{buildroot}

%files
%defattr(-, %{_runuser}, %{_rungroup})
%attr(744, %{_runuser}, %{_rungroup}) %{_prefix}/*

%changelog

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!