From 0da1c1ce3bfb134fb9d9eff6faf2b386f8d50d3d Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Wed, 13 Jan 2016 01:39:11 +0100 Subject: first stab at customized uwsgi --- customized/uwsgi.nix | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ ymir.nix | 13 +++++++++ 2 files changed, 90 insertions(+) create mode 100644 customized/uwsgi.nix diff --git a/customized/uwsgi.nix b/customized/uwsgi.nix new file mode 100644 index 00000000..32217ed8 --- /dev/null +++ b/customized/uwsgi.nix @@ -0,0 +1,77 @@ +{ stdenv, lib, fetchurl, pkgconfig, jansson +, plugins +, pam, withPAM ? stdenv.isLinux +, systemd, withSystemd ? stdenv.isLinux +, python2, python3, ncurses +, extraPlugins ? [] +}: + +let pythonPlugin = pkg : { name = "python${if pkg ? isPy2 then "2" else "3"}"; + interpreter = pkg; + path = "plugins/python"; + deps = [ pkg ncurses ]; + install = '' + install -Dm644 uwsgidecorators.py $out/${pkg.sitePackages}/uwsgidecorators.py + ${pkg.executable} -m compileall $out/${pkg.sitePackages}/ + ${pkg.executable} -O -m compileall $out/${pkg.sitePackages}/ + ''; + }; + available = [ (pythonPlugin python2) + (pythonPlugin python3) + ] ++ extraPlugins; + needed = builtins.filter (x: lib.any (y: x.name == y) plugins) available; +in + +assert builtins.filter (x: lib.all (y: y.name != x) available) plugins == []; + +stdenv.mkDerivation rec { + name = "uwsgi-2.0.11.1"; + + src = fetchurl { + url = "http://projects.unbit.it/downloads/${name}.tar.gz"; + sha256 = "11v2j9n204hlvi1p1wp4r3nn22fqyd1qlbqcfqddi77sih9x79vm"; + }; + + nativeBuildInputs = [ python3 pkgconfig ]; + + buildInputs = with stdenv.lib; + [ jansson ] + ++ optional withPAM pam + ++ optional withSystemd systemd + ++ lib.concatMap (x: x.deps) needed + ; + + basePlugins = with stdenv.lib; + concatStringsSep "," + ( optional withPAM "pam" + ++ optional withSystemd "systemd_logger" + ); + + passthru = { + inherit python2 python3; + }; + + configurePhase = '' + export pluginDir=$out/lib/uwsgi + substituteAll ${./nixos.ini} buildconf/nixos.ini + ''; + + buildPhase = '' + mkdir -p $pluginDir + python3 uwsgiconfig.py --build nixos + ${lib.concatMapStringsSep ";" (x: "${x.interpreter.interpreter} uwsgiconfig.py --plugin ${x.path} nixos ${x.name}") needed} + ''; + + installPhase = '' + install -Dm755 uwsgi $out/bin/uwsgi + #cp *_plugin.so $pluginDir || true + ${lib.concatMapStringsSep "\n" (x: x.install) needed} + ''; + + meta = with stdenv.lib; { + homepage = http://uwsgi-docs.readthedocs.org/en/latest/; + description = "A fast, self-healing and developer/sysadmin-friendly application container server coded in pure C"; + license = licenses.gpl2; + maintainers = with maintainers; [ abbradar ]; + }; +} diff --git a/ymir.nix b/ymir.nix index a11e95fb..99f127d6 100644 --- a/ymir.nix +++ b/ymir.nix @@ -43,6 +43,19 @@ in rec { extraModules = [prosodyAuth]; extraLibs = [luaPam luaPosix luaSha2]; }); + uwsgi = pkgs.callPackage ./customized/uwsgi.nix { + extraPlugins = [ + { name = "cgi"; + interpreter = pkgs.python3; + path = "plugins/cgi"; + deps = [ pkgs.python3 ]; + install = '' + ${pkgs.python3.executable} -m compileall $out/${pkgs.python3.sitePackages}/ + ${pkgs.python3.executable} -O -m compileall $out/${pkgs.pytho3.sitePackages}/ + ''; + } + ]; + }; }; environment.systemPackages = with pkgs; [ -- cgit v1.2.3