nginx rpm打包spec文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#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