From 598aaa373c359046ee08ab5e7576ebaa4f0331e0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Thu, 9 May 2019 23:29:48 +0200 Subject: [PATCH] Purify peertube derivation Fixes https://git.immae.eu/mantisbt/view.php?id=124 --- nixops/modules/websites/tools/peertube.nix | 2 +- pkgs/impure/peertube/default.nix | 58 - pkgs/webapps/default.nix | 2 +- pkgs/webapps/peertube/default.nix | 123 + pkgs/{impure => webapps}/peertube/ldap.patch | 0 .../peertube/ldap_yarn.patch | 0 .../peertube/peertube.json | 0 .../peertube/sendmail.patch | 0 .../peertube/yarn-packages.nix | 5152 +++++++++-------- pkgs/webapps/peertube/yarn_fix_bluebird.patch | 53 + .../peertube/yarn_fix_bluebird_ldap.patch | 53 + 11 files changed, 2825 insertions(+), 2618 deletions(-) delete mode 100644 pkgs/impure/peertube/default.nix create mode 100644 pkgs/webapps/peertube/default.nix rename pkgs/{impure => webapps}/peertube/ldap.patch (100%) rename pkgs/{impure => webapps}/peertube/ldap_yarn.patch (100%) rename pkgs/{impure => webapps}/peertube/peertube.json (100%) rename pkgs/{impure => webapps}/peertube/sendmail.patch (100%) rename pkgs/{impure => webapps}/peertube/yarn-packages.nix (64%) create mode 100644 pkgs/webapps/peertube/yarn_fix_bluebird.patch create mode 100644 pkgs/webapps/peertube/yarn_fix_bluebird_ldap.patch diff --git a/nixops/modules/websites/tools/peertube.nix b/nixops/modules/websites/tools/peertube.nix index e15f638..813df25 100644 --- a/nixops/modules/websites/tools/peertube.nix +++ b/nixops/modules/websites/tools/peertube.nix @@ -1,6 +1,6 @@ { lib, pkgs, config, myconfig, mylibs, ... }: let - peertube = pkgs.webapps.peertube; + peertube = pkgs.webapps.peertube.override { ldap = true; }; varDir = "/var/lib/peertube"; env = myconfig.env.tools.peertube; cfg = config.services.myWebsites.tools.peertube; diff --git a/pkgs/impure/peertube/default.nix b/pkgs/impure/peertube/default.nix deleted file mode 100644 index 89fcb04..0000000 --- a/pkgs/impure/peertube/default.nix +++ /dev/null @@ -1,58 +0,0 @@ -{ stdenv, fetchzip, cacert, mylibs, python, git, yarn, nodejs }: -let - # Doesn't seem to work - # patchedPackages = stdenv.mkDerivation (fetchedGithub ./peertube.json // rec { - # patches = [ ./ldap.patch ]; - # installPhase = '' - # mkdir $out - # cp package.json yarn.lock $out/ - # ''; - # }); - # yarnModules = pkgs.yarn2nix.mkYarnModules { - # name = "peertube-yarn-modules"; - # packageJSON = "${patchedPackages}/package.json"; - # yarnLock = "${patchedPackages}/yarn.lock"; - # yarnNix = ./yarn-packages.nix; - # }; - patchedServer = stdenv.mkDerivation (mylibs.fetchedGithub ./peertube.json // rec { - __noChroot = true; - patches = [ - ./ldap.patch - ./sendmail.patch - ]; - buildPhase = '' - export GIT_SSL_CAINFO=${cacert}/etc/ssl/certs/ca-bundle.crt - export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt - export HOME=$PWD - yarn install --pure-lockfile - npm run build:server - ''; - installPhase = '' - mkdir $out - cp -a dist/server $out - ''; - buildInputs = [ python git yarn nodejs ]; - }); -in -stdenv.mkDerivation rec { - __noChroot = true; - version = "v1.2.0"; - name = "peertube-${version}"; - src = fetchzip { - url = "https://github.com/Chocobozzz/PeerTube/releases/download/${version}/${name}.zip"; - sha256 = "18fp3fy1crw67gdpc29nr38b5zy2f68l70w47zwp7dzhd8bbbipp"; - }; - patches = [ ./ldap_yarn.patch ]; - buildPhase = '' - export GIT_SSL_CAINFO=${cacert}/etc/ssl/certs/ca-bundle.crt - export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt - export HOME=$PWD - yarn install --production --pure-lockfile - rm -rf dist/server && cp -a ${patchedServer}/server dist - ''; - installPhase = '' - mkdir $out - cp -a * $out - ''; - buildInputs = [ yarn git python ]; -} diff --git a/pkgs/webapps/default.nix b/pkgs/webapps/default.nix index 84e39ff..74f9550 100644 --- a/pkgs/webapps/default.nix +++ b/pkgs/webapps/default.nix @@ -65,7 +65,7 @@ rec { lib.attrsets.genAttrs names (name: callPackage (./nextcloud/apps + "/${name}.nix") { buildApp = nextcloud.buildApp; }); - peertube = callPackage ../impure/peertube { inherit mylibs; }; + peertube = callPackage ./peertube { inherit mylibs; }; phpldapadmin = callPackage ./phpldapadmin {}; rompr = callPackage ./rompr { inherit mylibs; }; diff --git a/pkgs/webapps/peertube/default.nix b/pkgs/webapps/peertube/default.nix new file mode 100644 index 0000000..a04d490 --- /dev/null +++ b/pkgs/webapps/peertube/default.nix @@ -0,0 +1,123 @@ +{ ldap ? false +, lib, stdenv, fetchzip, youtube-dl, fetchurl, mylibs, python, nodejs, nodePackages }: +let + nodeHeaders = fetchurl { + url = "https://nodejs.org/download/release/v${nodejs.version}/node-v${nodejs.version}-headers.tar.gz"; + sha256 = "16f20ya3ys6w5w6y6l4536f7jrgk4gz46bf71w1r1xxb26a54m32"; + }; + patchedPackages = stdenv.mkDerivation (mylibs.fetchedGithub ./peertube.json // rec { + patches = if ldap then [ ./ldap.patch ././yarn_fix_bluebird_ldap.patch ] else [ ./yarn_fix_bluebird.patch ]; + installPhase = '' + mkdir $out + cp package.json yarn.lock $out/ + ''; + }); + # if yarn complains about + # TypeError: Cannot read property 'lang' of undefined yarn + # make sure that all package names in yarn-packages.nix finish in + # .tar.gz where due (especially jsonld-signatures) + # Most errors where due to jsonld-signature (name, git version, etc.) + # or bluebird (3.5.18 instead vs 3.5.21) + yarnModulesArg = rec { + pname = "peertube-yarn-modules"; + version = "1.2.0"; + name = "peertube-yarn-modules-${version}"; + packageJSON = "${patchedPackages}/package.json"; + yarnLock = "${patchedPackages}/yarn.lock"; + yarnNix = ./yarn-packages.nix; + pkgConfig = { + all = { + buildInputs = [ mylibs.yarn2nixPackage.src ]; + }; + bcrypt = { + buildInputs = [ nodePackages.node-pre-gyp ]; + postInstall = let + bcrypt_lib = fetchurl { + url = "https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.2/bcrypt_lib-v3.0.2-node-v57-linux-x64-glibc.tar.gz"; + sha256 = "04bj3yn1wi8a6izihskyks0bb4nls3mndgb2yj12iraiv5dmg097"; + }; + in + '' + mkdir lib && tar -C lib -xf ${bcrypt_lib} + patchShebangs ../node-pre-gyp + npm run install + ''; + }; + dtrace-provider = { + buildInputs = [ python nodePackages.node-gyp ]; + postInstall = '' + npx node-gyp rebuild --tarball=${nodeHeaders} + ''; + }; + rdf-canonize = { + buildInputs = [ python nodePackages.node-gyp ]; + postInstall = '' + npx node-gyp rebuild --tarball=${nodeHeaders} + ''; + }; + sharp = { + buildInputs = [ python nodePackages.node-gyp ]; + postInstall = + let + tarball = fetchurl { + url = "https://github.com/lovell/sharp-libvips/releases/download/v8.7.0/libvips-8.7.0-linux-x64.tar.gz"; + sha256 = "1sq7qrp1q1pcrd165c3sky7qjx1kqihfpr4ailb5k73rwyh8lxg4"; + }; + in + '' + mkdir vendor + tar -C vendor -xf ${tarball} + patchShebangs ../prebuild-install + npx node install/libvips + npx node install/dll-copy + npx prebuild-install || npx node-gyp rebuild --tarball=${nodeHeaders} + ''; + }; + utf-8-validate = { + buildInputs = [ nodePackages.node-gyp-build ]; + }; + youtube-dl = { + postInstall = '' + mkdir bin + ln -s ${youtube-dl}/bin/youtube-dl bin/youtube-dl + cat > bin/details <