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
|