%global _hardened_build 1 %global nginx_user nginx %undefine _strict_symbol_defs_build %global with_aio 1 Name: tengine Version: 3.1.0 Release: 1%{?dist} Summary: A distribution of Nginx with some advanced features, built by eagle, xmyy.com License: BSD URL: https://tengine.taobao.org Packager: Eagle Vendor: Eagle Source0: %{name}-%{version}.tar.gz Source1: %{name}-%{version}.tar.gz.asc Source2: eagle-public-key1.asc Source3: eagle-public-key2.asc Source4: eagle-public-key3.asc Source5: lua-resty-core-0.1.31.zip Source6: lua-resty-lrucache-0.15.zip Source7: ngx_cache_purge-2.5.3.tar.gz Source8: ngx_brotli.tar.gz Source9: nginx-module-vts-0.2.4.tar.gz Source10: ngx_http_geoip2_module.tar.gz Source11: lua-nginx-module-0.10.28.zip Source12: ModSecurity-nginx-master.zip Source13: coreruleset-4.12.0.tar.gz Source20: nginx.service Source21: nginx.logrotate Source22: nginx.conf Source23: vhost.conf Source24: modsecurity.conf Source25: unicode.mapping Source101: index.html Source102: iisstart.png Source103: 401.html Source104: 403.html Source105: 404.html Source106: 50x.html Source201: %{name}-eagle-post-install Source202: GeoLite2-Country.mmdb Source203: GeoLite2-City.mmdb BuildRequires: gcc, make, pcre-devel, pcre2-devel, zlib-devel, openssl-devel, gnupg2 BuildRequires: libmaxminddb-devel >= 1.5.2, lmdb >= 0.9.29, lmdb-devel >= 0.9.29, lua-devel >= 5.4.4, lua-static >= 5.4.4, pcre2-static >= 10.40, libmodsecurity >= 3.0.12, libmodsecurity-devel >= 3.0.12, libmodsecurity-static >= 3.0.12, jemalloc >= 5.2.1, jemalloc-devel >= 5.2.1, luajit >= 2.1.0, luajit-devel >= 2.1.0, apr >= 1.7.0, apr-util >= 1.6.1 BuildRequires: gd-devel, perl-devel, perl-generators, unzip Requires: glibc, libmaxminddb-devel >= 1.5.2, lmdb >= 0.9.29, lmdb-devel >= 0.9.29, lua-devel >= 5.4.4, libmodsecurity >= 3.0.12, libmodsecurity-devel >= 3.0.12, jemalloc >= 5.2.1, jemalloc-devel >= 5.2.1, luajit >= 2.1.0, luajit-devel >= 2.1.0, apr >= 1.7.0, apr-util >= 1.6.1 Requires: openssl-libs, gd, perl(constant), make, gcc, gd-devel, perl-devel, zlib-devel BuildRequires: systemd Requires(post): systemd Requires(preun): systemd Requires(postun): systemd Requires(pre): shadow-utils Provides: webserver Recommends: logrotate Conflicts: nginx < 1:1.20.1 Obsoletes: nginx < 1:1.20.1, geolite2-country < 20250331, geolite2-city < 20250331 %description Tengine is a distribution of Nginx with some advanced features, built by eagle, xmyy.com %prep cat %{S:2} %{S:3} %{S:4} > %{_builddir}/%{name}.gpg %{gpgverify} --keyring='%{_builddir}/%{name}.gpg' --signature='%{SOURCE1}' --data='%{SOURCE0}' %setup -q sed -i '/nginx\//s/nginx/Microsoft-IIS\/8.5/' src/core/nginx.h sed -i '/^#define TENGINE /s/"Tengine"/"Microsoft-IIS"/' src/core/nginx.h sed -i '/Server: nginx/s/nginx/Microsoft-IIS/' src/http/ngx_http_header_filter_module.c sed -i 's/
nginx/
Microsoft-IIS/' src/http/ngx_http_special_response.c sed -i 's/
tengine/
Microsoft-IIS/' src/http/ngx_http_special_response.c sed -i 's/Powered by Tengine/Powered by Microsoft-IIS/' tests/nginx-tests/tengine-tests/server_banner.t sed -i '/nginx/cfastcgi_param SERVER_SOFTWARE Microsoft-IIS' conf/fastcgi.conf cd .. unzip -o %{SOURCE5} unzip -o %{SOURCE6} tar zxf %{SOURCE7} tar zxf %{SOURCE8} tar zxf %{SOURCE9} tar zxf %{SOURCE10} unzip -o %{SOURCE11} unzip -o %{SOURCE12} tar zxf %{SOURCE13} pushd lua-resty-core-0.1.31 sed -i 's/^#LUA_VERSION/LUA_VERSION/' Makefile sed -i '/LUA_VERSION/s/5.1/5.4/' Makefile sed -i '/^PREFIX/s/\/local//' Makefile sed -i '/^LUA_LIB_DIR/s/lib/lib64/' Makefile popd pushd lua-resty-lrucache-0.15 sed -i '/^PREFIX/iLUA_VERSION := 5.4' Makefile sed -i '/^PREFIX/s/\/local//' Makefile sed -i '/^LUA_LIB_DIR/s/lib/lib64/' Makefile sed -i 's#DESTDIR)/#DESTDIR)#' Makefile popd %build export DESTDIR=%{buildroot} nginx_ldopts="$RPM_LD_FLAGS -Wl,-E" #cd %{name}-%{version} if ! ./configure \ --prefix=/app/nginx \ --sbin-path=%{_sbindir}/nginx \ --with-http_ssl_module \ --with-ld-opt='-lpcre' \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_realip_module \ --with-ld-opt="-ljemalloc" \ --with-jemalloc \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module \ --with-stream_ssl_preread_module \ --with-debug \ --with-compat \ %if 0%{?with_aio} --with-file-aio \ %endif --with-mail \ --with-mail_ssl_module \ --with-pcre \ --with-pcre-jit \ --with-threads \ --with-http_auth_request_module \ --with-http_dav_module \ --with-http_degradation_module \ --with-http_flv_module \ --with-http_gunzip_module \ --with-http_image_filter_module \ --with-http_mp4_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_sub_module \ --with-http_v2_module \ --with-http_addition_module \ --with-luajit-inc=/usr/include/luajit-2.1 \ --with-luajit-lib=/usr/lib64 \ --without-http_upstream_keepalive_module \ --add-module=modules/ngx_backtrace_module \ --add-module=modules/ngx_debug_pool \ --add-module=modules/ngx_debug_timer \ --add-module=modules/ngx_http_concat_module \ --add-module=modules/ngx_http_footer_filter_module \ --add-module=modules/ngx_http_reqstat_module \ --add-module=modules/ngx_http_slice_module \ --add-module=modules/ngx_http_trim_filter_module \ --add-module=modules/ngx_http_upstream_check_module \ --add-module=modules/ngx_http_upstream_dynamic_module \ --add-module=modules/ngx_http_upstream_dyups_module \ --add-module=modules/ngx_http_upstream_keepalive_module \ --add-module=modules/ngx_http_upstream_session_sticky_module \ --add-module=modules/ngx_http_upstream_vnswrr_module \ --add-module=modules/ngx_http_user_agent_module \ --add-module=modules/ngx_multi_upstream_module \ --add-module=modules/ngx_slab_stat \ --add-module=../ngx_cache_purge-2.5.3 \ --add-module=../ngx_brotli \ --add-module=../nginx-module-vts-0.2.4 \ --add-module=../ngx_http_geoip2_module \ --add-module=../lua-nginx-module-0.10.28 \ --add-module=../ModSecurity-nginx-master \ --with-cc-opt="%{optflags} $(pcre-config --cflags)" \ --with-ld-opt="$nginx_ldopts"; then : configure failed cat objs/autoconf.err exit 1 fi make %{?_smp_mflags} OPTIMIZE="%{optflags}" %install cd .. pushd lua-resty-core-0.1.31 make install DESTDIR=%{buildroot} popd pushd lua-resty-lrucache-0.15 make install DESTDIR=%{buildroot} popd cd %{name}-%{version} make install DESTDIR=%{buildroot} find %{buildroot} -type f -name .packlist -exec rm -f '{}' \; find %{buildroot} -type f -empty -exec rm -f '{}' \; install -p -D -m 0644 %{SOURCE20} %{buildroot}%{_unitdir}/nginx.service install -p -D -m 0644 %{SOURCE21} %{buildroot}%{_sysconfdir}/logrotate.d/nginx install -p -d -m 0755 %{buildroot}/app/nginx/conf install -p -d -m 0755 %{buildroot}/app/nginx/html install -p -d -m 0700 %{buildroot}/app/nginx/logs install -p -m 0644 %{SOURCE22} %{buildroot}/app/nginx/conf install -p -m 0644 %{SOURCE23} %{buildroot}/app/nginx/conf install -p -m 0644 %{SOURCE101} %{buildroot}/app/nginx/html install -p -m 0644 %{SOURCE102} %{buildroot}/app/nginx/html install -p -m 0644 %{SOURCE103} %{buildroot}/app/nginx/html install -p -m 0644 %{SOURCE104} %{buildroot}/app/nginx/html install -p -m 0644 %{SOURCE105} %{buildroot}/app/nginx/html install -p -m 0644 %{SOURCE106} %{buildroot}/app/nginx/html install -p -D -m 0644 objs/nginx.8 %{buildroot}%{_mandir}/man8/nginx.8 for i in ftdetect ftplugin indent syntax; do install -p -D -m 0644 contrib/vim/${i}/nginx.vim %{buildroot}%{_datadir}/vim/vimfiles/${i}/nginx.vim done install -p -d -m 0755 %{buildroot}/tmp install -p -m 0755 %{SOURCE201} %{buildroot}/tmp install -p -d -m 0755 %{buildroot}%{_datadir}/GeoIP install -p -m 0644 %{SOURCE202} %{buildroot}%{_datadir}/GeoIP install -p -m 0644 %{SOURCE203} %{buildroot}%{_datadir}/GeoIP install -p -d -m 0755 %{buildroot}/app/nginx/conf/modsecurity install -p -m 0644 %{SOURCE24} %{buildroot}/app/nginx/conf/modsecurity install -p -m 0644 %{SOURCE25} %{buildroot}/app/nginx/conf/modsecurity cd .. cp -rp coreruleset-4.12.0 %{buildroot}/app/nginx/conf/modsecurity/coreruleset cp -p %{buildroot}/app/nginx/conf/modsecurity/coreruleset/crs-setup.conf.example %{buildroot}/app/nginx/conf/modsecurity/coreruleset/crs-setup.conf sed -i '/^SecDefaultAction/s/^/#/g' %{buildroot}/app/nginx/conf/modsecurity/coreruleset/crs-setup.conf sed -i '/status:403/s/# //g' %{buildroot}/app/nginx/conf/modsecurity/coreruleset/crs-setup.conf for f in %{buildroot}/app/nginx/conf/modsecurity/coreruleset/rules/*.example; do mv "$f" "${f%.example}" done cat > %{buildroot}/app/nginx/conf/modsecurity/main.conf << EOF include /app/nginx/conf/modsecurity/modsecurity.conf include /app/nginx/conf/modsecurity/coreruleset/crs-setup.conf include /app/nginx/conf/modsecurity/coreruleset/rules/*.conf EOF chmod 755 %{buildroot}/app/nginx/conf/modsecurity find %{buildroot}/app/nginx/conf/modsecurity -type f -exec chmod 644 {} \; chmod 755 %{buildroot}/app/nginx/conf/modsecurity/coreruleset %pretrans if [ -f /app/nginx/conf/nginx.conf ]; then cp -p /app/nginx/conf/nginx.conf /app/nginx/conf/nginx.conf.$(date '+%Y-%m-%d-%H%M').backup >/dev/null 2>&1 fi %post /tmp/tengine-eagle-post-install >/dev/null 2>&1 if [ $1 -eq 2 ]; then systemctl daemon-reload >/dev/null 2>&1 || : systemctl try-restart nginx >/dev/null 2>&1 || : fi /bin/rm -f /tmp/tengine-eagle-post-install >/dev/null 2>&1 systemctl daemon-reload >/dev/null 2>&1 systemctl enable nginx --now >/dev/null 2>&1 %preun cp -rp /app/nginx/conf /app/nginx/conf-backup-$(date '+%Y.%m.%d.%H%M') >/dev/null 2>&1 %systemd_preun nginx.service %postun systemctl daemon-reload >/dev/null 2>&1 systemctl disable nginx --now >/dev/null 2>&1 systemctl daemon-reload >/dev/null 2>&1 %files %defattr(-,root,root,-) /app/nginx %{_sbindir}/nginx /tmp/tengine-eagle-post-install %{_unitdir}/nginx.service %{_mandir}/man8/nginx.8* %{_datadir}/vim/vimfiles/ftdetect/nginx.vim %{_datadir}/vim/vimfiles/ftplugin/nginx.vim %{_datadir}/vim/vimfiles/syntax/nginx.vim %{_datadir}/vim/vimfiles/indent/nginx.vim %{_sysconfdir}/logrotate.d/nginx /usr/lib64/lua/5.4/resty/ /usr/lib64/lua/5.4/ngx/ /usr/share/GeoIP/ %changelog * Mon Mar 31 2025 Eagle - 3.1.0-1 - Built for AlmaLinux 9.5, initial build with LuaJIT,ModSecurity,geoip2,etc. supports