From 7561a3dc4aad5f5811f585f75bb565153cf2f2d9 Mon Sep 17 00:00:00 2001 From: Finn Behrens Date: Thu, 18 Jun 2020 12:34:31 +0200 Subject: [PATCH 1/2] nixos/moodle: add plugins --- pkgs/servers/web-apps/moodle/default.nix | 41 +++++++++++++++---- pkgs/servers/web-apps/moodle/moodle-utils.nix | 32 +++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 3 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 pkgs/servers/web-apps/moodle/moodle-utils.nix diff --git a/pkgs/servers/web-apps/moodle/default.nix b/pkgs/servers/web-apps/moodle/default.nix index b765a95c3fd..c466e2a3bb3 100644 --- a/pkgs/servers/web-apps/moodle/default.nix +++ b/pkgs/servers/web-apps/moodle/default.nix @@ -1,23 +1,23 @@ -{ stdenv, fetchurl, writeText }: +{ lib, stdenv, fetchurl, writeText, plugins ? [ ] }: let version = "3.9.1"; stableVersion = builtins.substring 0 2 (builtins.replaceStrings ["."] [""] version); -in -stdenv.mkDerivation rec { +in stdenv.mkDerivation rec { pname = "moodle"; inherit version; src = fetchurl { - url = "https://download.moodle.org/stable${stableVersion}/${pname}-${version}.tgz"; - sha256 = "1ysnrk013gmc21ml3jwijvl16rx3p478a4vriy6h8hfli48460p9"; + url = + "https://download.moodle.org/stable${stableVersion}/${pname}-${version}.tgz"; + sha256 = "dffe8c1ac68938f50a987b46b0bfc74f01235d0198ac96fb4fc4f1df5bd7f4ea"; }; phpConfig = writeText "config.php" '' - + ''; installPhase = '' @@ -27,11 +27,34 @@ stdenv.mkDerivation rec { cp -r . $out/share/moodle cp ${phpConfig} $out/share/moodle/config.php + ${lib.concatStringsSep "\n" (map (p: + let + dir = if p.pluginType == "mod" then + "mod" + else if p.pluginType == "theme" then + "theme" + else if p.pluginType == "block" then + "blocks" + else if p.pluginType == "question" then + "question/type" + else if p.pluginType == "course" then + "course/format" + else if p.pluginType == "report" then + "admin/report" + else + throw "unknown moodle plugin type"; + # we have to copy it, because the plugins have refrences to .. inside + in '' + mkdir -p $out/share/moodle/${dir}/${p.name} + cp -r ${p}/* $out/share/moodle/${dir}/${p.name}/ + '') plugins)} + runHook postInstall ''; meta = with stdenv.lib; { - description = "Free and open-source learning management system (LMS) written in PHP"; + description = + "Free and open-source learning management system (LMS) written in PHP"; license = licenses.gpl3Plus; homepage = "https://moodle.org/"; maintainers = with maintainers; [ aanderse ]; diff --git a/pkgs/servers/web-apps/moodle/moodle-utils.nix b/pkgs/servers/web-apps/moodle/moodle-utils.nix new file mode 100644 index 00000000000..52fddecc66d --- /dev/null +++ b/pkgs/servers/web-apps/moodle/moodle-utils.nix @@ -0,0 +1,32 @@ +{ stdenv, unzip, ... }: + +let + buildMoodlePlugin = a@{ + name, + src, + pluginType, + configuraPhase ? ":", + buildPhase ? ":", + buildInputs ? [ ], + ... + }: + stdenv.mkDerivation (a // { + name = name; + + inherit pluginType; + inherit configuraPhase buildPhase; + + buildInputs = [ unzip ] ++ buildInputs; + + installPhase = '' + runHook preInstall + + mkdir -p "$out" + mv * $out/ + + runHook postInstall + ''; + }); +in { + inherit buildMoodlePlugin; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 78930a1796b..52a68a8f2b4 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -16074,6 +16074,8 @@ in moodle = callPackage ../servers/web-apps/moodle { }; + moodle-utils = callPackage ../servers/web-apps/moodle/moodle-utils.nix { }; + morty = callPackage ../servers/web-apps/morty { }; mullvad-vpn = callPackage ../applications/networking/mullvad-vpn { }; From 832d2289c3fe31669b805ccab0fde08fa84a7620 Mon Sep 17 00:00:00 2001 From: Finn Behrens Date: Tue, 14 Jul 2020 12:56:41 +0200 Subject: [PATCH 2/2] moodle: update to 3.9.1 use phpEnv to provide xmlrpc --- nixos/modules/services/web-apps/moodle.nix | 14 +++++++++----- pkgs/servers/web-apps/moodle/default.nix | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/nixos/modules/services/web-apps/moodle.nix b/nixos/modules/services/web-apps/moodle.nix index 1196780cf6e..f45eaa24d54 100644 --- a/nixos/modules/services/web-apps/moodle.nix +++ b/nixos/modules/services/web-apps/moodle.nix @@ -40,7 +40,7 @@ let $CFG->disableupdateautodeploy = true; $CFG->pathtogs = '${pkgs.ghostscript}/bin/gs'; - $CFG->pathtophp = '${pkgs.php}/bin/php'; + $CFG->pathtophp = '${phpExt}/bin/php'; $CFG->pathtodu = '${pkgs.coreutils}/bin/du'; $CFG->aspellpath = '${pkgs.aspell}/bin/aspell'; $CFG->pathtodot = '${pkgs.graphviz}/bin/dot'; @@ -55,6 +55,9 @@ let mysqlLocal = cfg.database.createLocally && cfg.database.type == "mysql"; pgsqlLocal = cfg.database.createLocally && cfg.database.type == "pgsql"; + + phpExt = pkgs.php.withExtensions + ({ enabled, all }: with all; [ iconv mbstring curl openssl tokenizer xmlrpc soap ctype zip gd simplexml dom intl json sqlite3 pgsql pdo_sqlite pdo_pgsql pdo_odbc pdo_mysql pdo mysqli session zlib xmlreader fileinfo ]); in { # interface @@ -222,6 +225,7 @@ in services.phpfpm.pools.moodle = { inherit user group; + phpPackage = phpExt; phpEnv.MOODLE_CONFIG = "${moodleConfig}"; phpOptions = '' zend_extension = opcache.so @@ -263,13 +267,13 @@ in after = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.service"; environment.MOODLE_CONFIG = moodleConfig; script = '' - ${pkgs.php}/bin/php ${cfg.package}/share/moodle/admin/cli/check_database_schema.php && rc=$? || rc=$? + ${phpExt}/bin/php ${cfg.package}/share/moodle/admin/cli/check_database_schema.php && rc=$? || rc=$? - [ "$rc" == 1 ] && ${pkgs.php}/bin/php ${cfg.package}/share/moodle/admin/cli/upgrade.php \ + [ "$rc" == 1 ] && ${phpExt}/bin/php ${cfg.package}/share/moodle/admin/cli/upgrade.php \ --non-interactive \ --allow-unstable - [ "$rc" == 2 ] && ${pkgs.php}/bin/php ${cfg.package}/share/moodle/admin/cli/install_database.php \ + [ "$rc" == 2 ] && ${phpExt}/bin/php ${cfg.package}/share/moodle/admin/cli/install_database.php \ --agree-license \ --adminpass=${cfg.initialPassword} @@ -289,7 +293,7 @@ in serviceConfig = { User = user; Group = group; - ExecStart = "${pkgs.php}/bin/php ${cfg.package}/share/moodle/admin/cli/cron.php"; + ExecStart = "${phpExt}/bin/php ${cfg.package}/share/moodle/admin/cli/cron.php"; }; }; diff --git a/pkgs/servers/web-apps/moodle/default.nix b/pkgs/servers/web-apps/moodle/default.nix index c466e2a3bb3..447a27ad082 100644 --- a/pkgs/servers/web-apps/moodle/default.nix +++ b/pkgs/servers/web-apps/moodle/default.nix @@ -11,7 +11,7 @@ in stdenv.mkDerivation rec { src = fetchurl { url = "https://download.moodle.org/stable${stableVersion}/${pname}-${version}.tgz"; - sha256 = "dffe8c1ac68938f50a987b46b0bfc74f01235d0198ac96fb4fc4f1df5bd7f4ea"; + sha256 = "sha256-6QJDEInUQQSNj3kThQ65o2cT6JaRy0FrEKy+EcDMVvs="; }; phpConfig = writeText "config.php" ''