SHA256
1
0
forked from pool/uwsgi
uwsgi/uwsgi.spec

628 lines
20 KiB
RPMSpec

#
# spec file for package uwsgi
#
# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
Name: uwsgi
Version: 1.9.11
Release: 0
Summary: Application Container Server for Networked/Clustered Web Applications
License: GPL-2.0+
Group: Productivity/Networking/Web/Servers
Url: http://projects.unbit.it/uwsgi/wiki
Source: http://projects.unbit.it/downloads/uwsgi-%{version}.tar.gz
Source1: opensuse.ini.in
Source2: uwsgi.service
Source3: django.ini.example
Source4: rails.yml.example
Source5: trac.ini.example
Source6: werkzeug.xml.example
Source7: README.openSUSE
Source8: uwsgi.ini
# PATCH-FIX-OPENSUSE uwsgi-1.9.11-plugin_build_path.patch - Don't attempt to install plugins to target dest during build
Patch0: uwsgi-1.9.11-plugin_build_path.patch
# PATCH-FIX-OPENSUSE uwsgi-1.9.11-no-LD_RUN_PATH.patch - Disable invalid rpath in plugins
Patch1: uwsgi-1.9.11-no-LD_RUN_PATH.patch
# PATCH-FIX-UPSTREAM uwsgi-1.9.11-emperor_amqp-fix-comparison.patch - Fix signed/unsigned comparison
Patch2: uwsgi-1.9.11-emperor_amqp-fix-comparison.patch
# PATCH-FIX-OPENSUSE uwsgi-1.9.11-systemd_logger-old_systemd.patch - Older systemd in 12.2 does not implicity include syslog.h
Patch3: uwsgi-1.9.11-systemd_logger-old_systemd.patch
%if 0%{?suse_version} > 1210
BuildRequires: erlang
%endif
BuildRequires: gcc-c++
#BuildRequires: go
BuildRequires: java-devel
#BuildRequires: krb5-devel
BuildRequires: libGeoIP-devel
BuildRequires: libattr-devel
BuildRequires: libcap-devel
BuildRequires: libcurl-devel
%if 0%{?suse_version} > 1210
BuildRequires: libjansson-devel
%endif
#BuildRequires: libmono-2_0-devel
BuildRequires: libuuid-devel
BuildRequires: libxml2-devel
BuildRequires: libxslt-devel
BuildRequires: libyaml-devel
%if 0%{?suse_version} > 1210
BuildRequires: lua51-devel
%else
BuildRequires: lua-devel
%endif
#BuildRequires: mono-web
BuildRequires: openldap2-devel
BuildRequires: openssl-devel
BuildRequires: pam-devel
BuildRequires: pcre-devel
#BuildRequires: php5-devel
BuildRequires: pkg-config
BuildRequires: postgresql-devel
BuildRequires: python-devel
BuildRequires: python-greenlet-devel
%if 0%{?suse_version} >= 1230
BuildRequires: ruby19-devel
%else
BuildRequires: ruby-devel
%endif
BuildRequires: sqlite3-devel
%if 0%{?suse_version} > 1210
BuildRequires: systemd-devel
%endif
BuildRequires: tcpd-devel
BuildRequires: v8-devel
BuildRequires: zeromq-devel
BuildRequires: zlib-devel
%{?systemd_requires}
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Provides: uwsgi-carbon = %{version}
Obsoletes: uwsgi-carbon < 1.9.11
Provides: uwsgi-cgi = %{version}
Obsoletes: uwsgi-cgi < 1.9.11
Provides: uwsgi-fastrouter = %{version}
Obsoletes: uwsgi-fastrouter < 1.9.11
Provides: uwsgi-graylog2 = %{version}
Obsoletes: uwsgi-graylog2 < 1.9.11
Provides: uwsgi-http = %{version}
Obsoletes: uwsgi-http < 1.9.11
Provides: uwsgi-logsocket = %{version}
Obsoletes: uwsgi-logsocket < 1.9.11
Provides: uwsgi-nagios = %{version}
Obsoletes: uwsgi-nagios < 1.9.11
Provides: uwsgi-probepg = %{version}
Obsoletes: uwsgi-probepg < 1.9.11
Provides: uwsgi-redislog = %{version}
Obsoletes: uwsgi-redislog < 1.9.11
Provides: uwsgi-rrdtool = %{version}
Obsoletes: uwsgi-rrdtool < 1.9.11
Provides: uwsgi-rsyslog = %{version}
Obsoletes: uwsgi-rsyslog < 1.9.11
Provides: uwsgi-syslog = %{version}
Obsoletes: uwsgi-syslog < 1.9.11
Provides: uwsgi-ugreen = %{version}
Obsoletes: uwsgi-ugreen < 1.9.11
Provides: uwsgi-zergpool = %{version}
Obsoletes: uwsgi-zergpool < 1.9.11
%description
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
Born as a WSGI-only server, over time it has evolved in a complete stack for
networked/clustered web applications, implementing message/object passing,
caching, RPC and process management.
It uses the uwsgi (all lowercase, already included by default in the Nginx and
Cherokee releases) protocol for all the networking/interprocess communications,
but it can speak other protocols as well (http, fastcgi, mongrel2...)
It can be run in preforking mode, threaded, asynchronous/evented and supports
various forms of green threads/coroutines (such as uGreen, Greenlet, Stackless,
Gevent and Fiber).
Sysadmins will love it as it can be configured via several methods: command
line, environment variables, XML, .ini, yaml, json, sqlite3 database and via
LDAP.
On top of all this, it is designed to be fully modular. This means that
different plugins can be used in order to add compatibility with tons of
different technology on top of the same core.
%package emperor_pg
Summary: PostgreSQL Emperor Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
%description emperor_pg
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains an emperor plugin allowing for configuration of
applications (vassals) in a PostgreSQL database.
%package emperor_zeromq
Summary: ZeroMQ Emperor Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
%description emperor_zeromq
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains an emperor plugin allowing for configuration of
applications (vassals) via ZeroMQ.
%if 0%{?suse_version} > 1210
%package erlang
Summary: Erlang Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
%description erlang
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for uWSGI to act as an Erlang C-Node and exchange
messages and rpc with Erlang nodes.
%endif
%package geoip
Summary: GeoIP Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
Requires: %{name}-python = %{version}
%description geoip
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for GeoIP routing.
%package gevent
Summary: Gevent Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
Requires: %{name}-python = %{version}
%description gevent
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for Python Gevent, which is a non-blocking
networking framework.
%package greenlet
Summary: Greenlet Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
Requires: %{name}-python = %{version}
%description greenlet
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for the Python Greenlet non-blocking network
framework.
%package jvm
Summary: JVM Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
Provides: uwsgi-jwsgi = %{version}
Obsoletes: uwsgi-jwsgi < 1.9.11
%description jvm
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for embedding a Java virtual machine in uWSGI.
%package ldap
Summary: LDAP Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
%description ldap
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for configuring uWSGI via LDAP.
%package lua
Summary: Lua Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
%description lua
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for Lua applications via the wsapi interface.
%package pam
Summary: PAM Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
%description pam
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for PAM authentication.
%package psgi
Summary: PSGI Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
%description psgi
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains the PSGI plugin for running Perl applications that
support the PSGI protocol.
%if 0%{?suse_version} > 1210
%package pyerl
Summary: Python-Erlang Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
Requires: %{name}-erlang = %{version}
Requires: %{name}-python = %{version}
%description pyerl
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains the pyerl module for accessing Erlang functionality to
Python applications.
%endif
%package pypy
Summary: PyPy Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
%description pypy
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for Python applications using PyPy.
%package python
Summary: Python Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
%description python
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for Python applications via the WSGI protocol.
%if 0%{?suse_version} > 1210
%package ruby
Summary: Ruby Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
Provides: uwsgi-fiber = %{version}
Obsoletes: uwsgi-fiber < 1.9.11
%description ruby
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for Ruby applications.
%endif
%package sqlite3
Summary: SQLite3 Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
%description sqlite3
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for storing application configuration in SQLite3
databases.
%package v8
Summary: V8 JavaScript Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
%description v8
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for JavaScript using V8.
%package xslt
Summary: XSLT Plugin for uWSGI
Group: Productivity/Networking/Web/Servers
Requires: %{name} = %{version}
%description xslt
uWSGI is a fast, self-healing and developer/sysadmin-friendly application
container server coded in pure C.
This package contains support for rendering XML content using XSLT.
%prep
%setup -q -n uwsgi-%{version}
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
# Generate a config that builds all plugins except for examples and stuff we
# can't satisfy the requirements for or are just broken
excluded_plugins=""
# Still no mongodb in Factory
excluded_plugins="$excluded_plugins stats_pusher_mongodb emperor_mongodb mongodb mongodblog gridfs"
# Mono plugin builds private key during build. It would not be a good idea to
# distribute the same key to multiple systems
excluded_plugins="$excluded_plugins mono"
# Only for OSX
excluded_plugins="$excluded_plugins alarm_speech"
# No libphp on openSUSE for some reason
excluded_plugins="$excluded_plugins php"
# No stackless in openSUSE
excluded_plugins="$excluded_plugins stackless"
# No perl-Coro in Factory (there is a broken unmaintained one under d:l:perl:CPAN-C)
excluded_plugins="$excluded_plugins coroae"
# Requires libgloox, which is not in Factory
excluded_plugins="$excluded_plugins alarm_xmpp"
# No build config for gccgo ATM
excluded_plugins="$excluded_plugins gccgo"
# These plugins require a libuwsgi, which appears to conflict with core...
excluded_plugins="$excluded_plugins go pyuwsgi"
# The SPNEGO router is not complete
excluded_plugins="$excluded_plugins router_spnego"
# These are example plugins and shouldn't be distributed
excluded_plugins="$excluded_plugins cplusplus dummy example"
%if 0%{?suse_version} && 0%{?suse_version} <= 1210
# Requirements missing on openSUSE <= 12.1
excluded_plugins="$excluded_plugins erlang fiber pyerl ruby19 systemd_logger"
%endif
plugins=$(python -c "import sys, os; print ', '.join([p for p in os.listdir('plugins') if p not in sys.argv[1:]])" $excluded_plugins)
sed -e "s#@@LIBDIR@@#%{_libdir}#" -e "s#@@PLUGINS@@#$plugins#" %{SOURCE1} > buildconf/opensuse.ini
# README.openSUSE
cp %{SOURCE7} .
%build
# Find correct location for libjvm
export UWSGICONFIG_JVM_LIBPATH=$(dirname $(find %{_jvmdir}/java/jre/lib -name "libjvm.so" | grep server))
export UWSGICONFIG_JVM_INCPATH="%{_jvmdir}/java/include"
export UWSGICONFIG_LUALIB="lua"
export CFLAGS="%{optflags} -I$(echo %{_libdir}/erlang/lib/erl_interface-*/include) -I%{_jvmdir}/java/include/linux -L$UWSGICONFIG_JVM_LIBPATH/jli"
%{?jobs:export CPUCOUNT=%jobs}
python uwsgiconfig.py --build opensuse
%install
install -D -m 0755 uwsgi %{buildroot}%{_sbindir}/uwsgi
install -d -m 0755 %{buildroot}%{_libdir}/uwsgi
install -m 0755 *_plugin.so %{buildroot}%{_libdir}/uwsgi
install -D -m 0644 %{SOURCE2} %{buildroot}%{_unitdir}/uwsgi.service
install -d -m 0755 %{buildroot}%{_sysconfdir}/uwsgi/vassals
install -D -m 0644 %{SOURCE8} %{buildroot}%{_sysconfdir}/uwsgi/uwsgi.ini
install -m 0644 %{SOURCE3} %{SOURCE4} %{SOURCE5} %{SOURCE6} %{buildroot}%{_sysconfdir}/uwsgi/vassals
install -m 0644 vassals/broodlord.ini %{buildroot}%{_sysconfdir}/uwsgi/vassals/broodlord.ini.example
install -m 0644 vassals/cc.ini %{buildroot}%{_sysconfdir}/uwsgi/vassals/cc.ini.example
install -m 0644 vassals/multi.xml %{buildroot}%{_sysconfdir}/uwsgi/vassals/multi.xml.example
install -D -m 0644 uwsgidecorators.py %{buildroot}%{python_sitelib}/uwsgidecorators.py
%py_compile %{buildroot}%{python_sitelib}
install -D plugins/jvm/uwsgi.jar %{buildroot}%{_javadir}/uwsgi.jar
%pre
%service_add_pre uwsgi.service
%post
%service_add_post uwsgi.service
%preun
%service_del_preun uwsgi.service
%postun
%service_del_postun uwsgi.service
%files
%defattr(-,root,root,-)
%doc CONTRIBUTORS LICENSE README uwsgi_API.txt contrib examples README.openSUSE
%{_sbindir}/uwsgi
%dir %{_sysconfdir}/uwsgi/
%config(noreplace) %{_sysconfdir}/uwsgi/uwsgi.ini
%dir %{_sysconfdir}/uwsgi/vassals
%{_sysconfdir}/uwsgi/vassals/*
%dir %{_libdir}/uwsgi
%{_unitdir}/uwsgi.service
%{_libdir}/uwsgi/admin_plugin.so
%{_libdir}/uwsgi/airbrake_plugin.so
%{_libdir}/uwsgi/alarm_curl_plugin.so
%{_libdir}/uwsgi/cache_plugin.so
%{_libdir}/uwsgi/carbon_plugin.so
%{_libdir}/uwsgi/cgi_plugin.so
%{_libdir}/uwsgi/cheaper_backlog2_plugin.so
%{_libdir}/uwsgi/cheaper_busyness_plugin.so
%{_libdir}/uwsgi/clock_monotonic_plugin.so
%{_libdir}/uwsgi/clock_realtime_plugin.so
%{_libdir}/uwsgi/corerouter_plugin.so
%{_libdir}/uwsgi/curl_cron_plugin.so
%{_libdir}/uwsgi/dumbloop_plugin.so
%{_libdir}/uwsgi/emperor_amqp_plugin.so
%{_libdir}/uwsgi/exception_log_plugin.so
%{_libdir}/uwsgi/fastrouter_plugin.so
%{_libdir}/uwsgi/echo_plugin.so
%{_libdir}/uwsgi/graylog2_plugin.so
%{_libdir}/uwsgi/http_plugin.so
%{_libdir}/uwsgi/legion_cache_fetch_plugin.so
%{_libdir}/uwsgi/logcrypto_plugin.so
%{_libdir}/uwsgi/logfile_plugin.so
%{_libdir}/uwsgi/logsocket_plugin.so
%{_libdir}/uwsgi/nagios_plugin.so
%{_libdir}/uwsgi/notfound_plugin.so
%{_libdir}/uwsgi/ping_plugin.so
%{_libdir}/uwsgi/rawrouter_plugin.so
%{_libdir}/uwsgi/redislog_plugin.so
%{_libdir}/uwsgi/router_access_plugin.so
%{_libdir}/uwsgi/router_basicauth_plugin.so
%{_libdir}/uwsgi/router_cache_plugin.so
%{_libdir}/uwsgi/router_http_plugin.so
%{_libdir}/uwsgi/router_memcached_plugin.so
%{_libdir}/uwsgi/router_radius_plugin.so
%{_libdir}/uwsgi/router_redirect_plugin.so
%{_libdir}/uwsgi/router_rewrite_plugin.so
%{_libdir}/uwsgi/router_static_plugin.so
%{_libdir}/uwsgi/router_uwsgi_plugin.so
%{_libdir}/uwsgi/rpc_plugin.so
%{_libdir}/uwsgi/rrdtool_plugin.so
%{_libdir}/uwsgi/rsyslog_plugin.so
%{_libdir}/uwsgi/signal_plugin.so
%{_libdir}/uwsgi/spooler_plugin.so
%{_libdir}/uwsgi/ssi_plugin.so
%{_libdir}/uwsgi/sslrouter_plugin.so
%{_libdir}/uwsgi/stats_pusher_statsd_plugin.so
%{_libdir}/uwsgi/symcall_plugin.so
%{_libdir}/uwsgi/syslog_plugin.so
%if 0%{?suse_version} > 1210
%{_libdir}/uwsgi/systemd_logger_plugin.so
%endif
%{_libdir}/uwsgi/transformation_chunked_plugin.so
%{_libdir}/uwsgi/transformation_gzip_plugin.so
%{_libdir}/uwsgi/transformation_tofile_plugin.so
%{_libdir}/uwsgi/transformation_toupper_plugin.so
%{_libdir}/uwsgi/ugreen_plugin.so
%{_libdir}/uwsgi/webdav_plugin.so
%{_libdir}/uwsgi/xattr_plugin.so
%{_libdir}/uwsgi/zergpool_plugin.so
%files emperor_pg
%defattr(-,root,root,-)
%{_libdir}/uwsgi/emperor_pg_plugin.so
%files emperor_zeromq
%defattr(-,root,root,-)
%{_libdir}/uwsgi/emperor_zeromq_plugin.so
%if 0%{?suse_version} > 1210
%files erlang
%defattr(-,root,root,-)
%{_libdir}/uwsgi/erlang_plugin.so
%endif
%files geoip
%defattr(-,root,root,-)
%{_libdir}/uwsgi/geoip_plugin.so
%files gevent
%defattr(-,root,root,-)
%{_libdir}/uwsgi/gevent_plugin.so
%files greenlet
%defattr(-,root,root,-)
%{_libdir}/uwsgi/greenlet_plugin.so
%files jvm
%defattr(-,root,root,-)
%{_libdir}/uwsgi/jvm_plugin.so
%{_libdir}/uwsgi/jwsgi_plugin.so
%{_libdir}/uwsgi/ring_plugin.so
%{_javadir}/uwsgi.jar
%files ldap
%defattr(-,root,root,-)
%{_libdir}/uwsgi/ldap_plugin.so
%files lua
%defattr(-,root,root,-)
%{_libdir}/uwsgi/lua_plugin.so
%files pam
%defattr(-,root,root,-)
%{_libdir}/uwsgi/pam_plugin.so
%files psgi
%defattr(-,root,root,-)
%{_libdir}/uwsgi/psgi_plugin.so
%if 0%{?suse_version} > 1210
%files pyerl
%defattr(-,root,root,-)
%{_libdir}/uwsgi/pyerl_plugin.so
%endif
%files pypy
%defattr(-,root,root,-)
%{_libdir}/uwsgi/pypy_plugin.so
%files python
%defattr(-,root,root,-)
%{_libdir}/uwsgi/python_plugin.so
%{python_sitelib}/uwsgidecorators.py*
%if 0%{?suse_version} > 1210
%files ruby
%defattr(-,root,root,-)
%{_libdir}/uwsgi/fiber_plugin.so
%{_libdir}/uwsgi/rack_plugin.so
%{_libdir}/uwsgi/ruby19_plugin.so
%endif
%files sqlite3
%defattr(-,root,root,-)
%{_libdir}/uwsgi/sqlite3_plugin.so
%files v8
%defattr(-,root,root,-)
%{_libdir}/uwsgi/v8_plugin.so
%files xslt
%defattr(-,root,root,-)
%{_libdir}/uwsgi/xslt_plugin.so
%changelog