nixos-seafile-overlay/seafile-server/default.nix

112 lines
4.5 KiB
Nix
Raw Normal View History

2019-10-09 00:53:54 +02:00
{ stdenv, lib, fetchFromGitHub,
autoconf, automake, autoreconfHook, pkgconfig, curl, libevent, glib, libuuid, intltool, sqlite, withMysql ? true, libmysql, libarchive, libtool, jansson, vala, fuse, openssl, libevhtp, ccnet, libsearpc, which,
2019-10-09 00:53:54 +02:00
# for SeaHub
python3, python3Packages }:
2019-10-09 00:53:54 +02:00
let
version = "7.1.1";
python = python3;
pythonPackages = python3Packages;
django = pythonPackages.django_1_11;
djangoModules = with pythonPackages; [ django-statici18n django-post_office django-picklefield django-formtools djangorestframework ];
seahubPythonDependencies = with pythonPackages; [
django django-webpack-loader future captcha gunicorn pymysql openpyxl qrcode dateutil requests pillow pyjwt pycryptodome
]
++ map (p: p.override { django = django; }) djangoModules; # build django modules with required version
2019-10-09 00:53:54 +02:00
seafile-server-core = stdenv.mkDerivation rec {
name = "seafile-server-core";
inherit version;
src = fetchFromGitHub {
owner = "haiwen";
repo = "seafile-server";
rev = "v${version}-server";
sha256 = "sha256:1805q0dcy6lw0nkjqjg8qwahwqxm8iy02lw8012s5qp91jcg8gpl";
2019-10-09 00:53:54 +02:00
};
# patch to work with latest, non-vulnerable libevhtp
patches = [
./recent_libevhtp.patch
./django-version.patch
];
# `which` is called directly from python during buildPhase, so we need the binary
nativeBuildInputs = [ autoconf automake libtool pkgconfig vala autoreconfHook which pythonPackages.wrapPython ];
buildInputs = [ sqlite glib python libuuid openssl fuse libarchive ccnet-server libevent libevhtp ];
propagatedBuildInputs = [ libsearpc ] ++ seahubPythonDependencies;
postFixup = ''
buildPythonPath $propagatedBuildInputs
wrapPythonProgramsIn "$out/bin" "$out $pythonPath"
'';
2019-10-09 00:53:54 +02:00
checkPhase = "bash ./run_tests.sh";
meta = with lib; {
license = licenses.agpl3; # with additional OpenSSL linking exception
maintainers = with maintainers; [ schmittlauch ];
};
2019-10-09 00:53:54 +02:00
};
seahub = pythonPackages.buildPythonApplication rec {
2019-10-09 00:53:54 +02:00
name = "seahub";
inherit version;
src = fetchFromGitHub {
owner = "haiwen";
repo = "seahub";
rev = "v${version}-server";
sha256 = "sha256:1s5yd4w5z31hx3x7cd25zgzv7h2yzbdbryypa9in19akmsmb11fp";
2019-10-09 00:53:54 +02:00
};
2019-10-12 23:21:29 +02:00
phases = [ "unpackPhase" "installPhase" "fixupPhase" "distPhase" ];
buildInputs = [ python pythonPackages.wrapPython ];
propagatedBuildInputs = seahubPythonDependencies ++ [ pythonPackages.seafile-bindings pythonPackages.ccnet-bindings ]; # for `seaserv` module
2019-10-12 23:21:29 +02:00
installPhase = ''
cp -r ./ $out
cd "$out"
${python.interpreter} -m compileall ./
buildPythonPath $propagatedBuildInputs
set -x
patchPythonScript manage.py
2019-10-12 23:21:29 +02:00
'';
meta = with lib; {
license = licenses.asl20;
maintainers = with maintainers; [ schmittlauch ];
};
};
2019-10-09 00:53:54 +02:00
ccnet-server = stdenv.mkDerivation rec {
name = "ccnet-server";
inherit version;
src = fetchFromGitHub {
owner = "haiwen";
repo = "ccnet-server";
rev = "v${version}-server";
sha256 = "sha256:0hf9mmf019984ybc20zxaqyhcfhhr3k0bjr45pq9d79w16ndnim8";
2019-10-09 00:53:54 +02:00
};
buildInputs = [ vala libsearpc libuuid sqlite openssl libevent glib python ]
2019-10-09 00:53:54 +02:00
++ lib.optional (!withMysql) "--without-mysql";
# `which` is called directly from python during buildPhase, so we need the binary
nativeBuildInputs = [ autoconf automake libtool pkgconfig autoreconfHook which ];
2019-10-09 00:54:28 +02:00
configureFlags = [ "--disable-static" ];
2019-10-09 00:53:54 +02:00
meta = {
description = "Internal communication framework and user/group management for Seafile server";
license = lib.licenses.agpl3; # with additional OpenSSL linking exception
};
};
in stdenv.mkDerivation {
name = "seafile-server";
inherit version;
buildInputs = [ seahub seafile-server-core ccnet-server libsearpc ]
++ lib.optional withMysql libmysql;
phases = [ "installPhase" "fixupPhase" "distPhase" ];
# todo: create data directory in /srv in activation script
2019-10-09 00:56:46 +02:00
installPhase = ''
mkdir "$out"
cd "$out"
ln -s ${seahub} seahub
2019-10-16 17:31:52 +02:00
ln -s ${seafile-server-core} seafile-server-latest
2019-10-09 00:56:46 +02:00
'';
meta = with lib; {
maintainers = with maintainers; [ schmittlauch ];
license = licenses.free; # components with different free software licenses are combined
};
inherit ccnet-server seafile-server-core seahub; # for using the path in the NixOS module
}