about summary refs log tree commit diff
diff options
context:
space:
mode:
authorStig <stig@stig.io>2023-11-29 13:01:07 +0100
committerGitHub <noreply@github.com>2023-11-29 13:01:07 +0100
commit9f060c688e1dee8941349874489c96b10802b290 (patch)
tree06a61ea27b74ab0b20a6caec67dd4eb478bf6016
parentc67a44307a994ce6b8a91567c409765861b06134 (diff)
parenteac5dfd20ff4a618b0b62262bdafcd2245f2c7ea (diff)
downloadnixlib-9f060c688e1dee8941349874489c96b10802b290.tar
nixlib-9f060c688e1dee8941349874489c96b10802b290.tar.gz
nixlib-9f060c688e1dee8941349874489c96b10802b290.tar.bz2
nixlib-9f060c688e1dee8941349874489c96b10802b290.tar.lz
nixlib-9f060c688e1dee8941349874489c96b10802b290.tar.xz
nixlib-9f060c688e1dee8941349874489c96b10802b290.tar.zst
nixlib-9f060c688e1dee8941349874489c96b10802b290.zip
Merge pull request #265661 from TomaSajt/lanraragi
lanraragi: 0.8.90 -> 0.9.0
-rw-r--r--nixos/modules/services/web-apps/lanraragi.nix13
-rw-r--r--nixos/tests/lanraragi.nix8
-rw-r--r--pkgs/by-name/la/lanraragi/fix-minion-redis-password.patch34
-rw-r--r--pkgs/by-name/la/lanraragi/install.patch75
-rw-r--r--pkgs/by-name/la/lanraragi/loosen-dep-reqs.patch13
-rw-r--r--pkgs/by-name/la/lanraragi/package.nix107
6 files changed, 134 insertions, 116 deletions
diff --git a/nixos/modules/services/web-apps/lanraragi.nix b/nixos/modules/services/web-apps/lanraragi.nix
index f1ab8b8b4eb4..6e452e7a3b35 100644
--- a/nixos/modules/services/web-apps/lanraragi.nix
+++ b/nixos/modules/services/web-apps/lanraragi.nix
@@ -72,11 +72,10 @@ in
         "HOME" = "/var/lib/lanraragi";
       };
       preStart = ''
-        REDIS_PASS=${lib.optionalString (cfg.redis.passwordFile != null) "$(head -n1 ${cfg.redis.passwordFile})"}
         cat > lrr.conf <<EOF
         {
           redis_address => "127.0.0.1:${toString cfg.redis.port}",
-          redis_password => "$REDIS_PASS",
+          redis_password => "${lib.optionalString (cfg.redis.passwordFile != null) ''$(head -n1 ${cfg.redis.passwordFile})''}",
           redis_database => "0",
           redis_database_minion => "1",
           redis_database_config => "2",
@@ -84,15 +83,9 @@ in
         }
         EOF
       '' + lib.optionalString (cfg.passwordFile != null) ''
-        PASS_HASH=$(
-          PASS=$(head -n1 ${cfg.passwordFile}) ${cfg.package.perlEnv}/bin/perl -I${cfg.package}/share/lanraragi/lib -e \
-            'use LANraragi::Controller::Config; print LANraragi::Controller::Config::make_password_hash($ENV{PASS})' \
-            2>/dev/null
-        )
-
-        ${lib.getExe pkgs.redis} -h 127.0.0.1 -p ${toString cfg.redis.port} -a "$REDIS_PASS" <<EOF
+        ${lib.getExe pkgs.redis} -h 127.0.0.1 -p ${toString cfg.redis.port} ${lib.optionalString (cfg.redis.passwordFile != null) ''-a "$(head -n1 ${cfg.redis.passwordFile})"''}<<EOF
           SELECT 2
-          HSET LRR_CONFIG password $PASS_HASH
+          HSET LRR_CONFIG password $(${cfg.package}/bin/helpers/lrr-make-password-hash $(head -n1 ${cfg.passwordFile}))
         EOF
       '';
     };
diff --git a/nixos/tests/lanraragi.nix b/nixos/tests/lanraragi.nix
index f513ac9d252b..7a4a1a489bdf 100644
--- a/nixos/tests/lanraragi.nix
+++ b/nixos/tests/lanraragi.nix
@@ -10,19 +10,17 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
       services.lanraragi = {
         enable = true;
         passwordFile = pkgs.writeText "lrr-test-pass" ''
-          ultra-secure-password
+          Ultra-secure-p@ssword-"with-spec1al\chars
         '';
         port = 4000;
         redis = {
           port = 4001;
           passwordFile = pkgs.writeText "redis-lrr-test-pass" ''
-            still-a-very-secure-password
+            123-redis-PASS
           '';
         };
       };
     };
-
-
   };
 
   testScript = ''
@@ -34,7 +32,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
 
     machine2.wait_for_unit("lanraragi.service")
     machine2.wait_until_succeeds("curl -f localhost:4000")
-    machine2.succeed("[ $(curl -o /dev/null -X post 'http://localhost:4000/login' --data-raw 'password=ultra-secure-password' -w '%{http_code}') -eq 302 ]")
+    machine2.succeed("[ $(curl -o /dev/null -X post 'http://localhost:4000/login' --data-raw 'password=Ultra-secure-p@ssword-\"with-spec1al\\chars' -w '%{http_code}') -eq 302 ]")
   '';
 })
 
diff --git a/pkgs/by-name/la/lanraragi/fix-minion-redis-password.patch b/pkgs/by-name/la/lanraragi/fix-minion-redis-password.patch
deleted file mode 100644
index eb6b88f68f7f..000000000000
--- a/pkgs/by-name/la/lanraragi/fix-minion-redis-password.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-diff --git a/lib/LANraragi.pm b/lib/LANraragi.pm
-index e6b833c4..d677030b 100644
---- a/lib/LANraragi.pm
-+++ b/lib/LANraragi.pm
-@@ -144,8 +144,13 @@ sub startup {
-     shutdown_from_pid( get_temp . "/minion.pid" );
- 
-     my $miniondb = $self->LRR_CONF->get_redisad . "/" . $self->LRR_CONF->get_miniondb;
-+    my $redispassword = $self->LRR_CONF->get_redispassword;
-+
-+    # If the password is non-empty, add the required delimiters
-+    if ($redispassword) { $redispassword = "x:" . $redispassword . "@"; }
-+
-     say "Minion will use the Redis database at $miniondb";
--    $self->plugin( 'Minion' => { Redis => "redis://$miniondb" } );
-+    $self->plugin( 'Minion' => { Redis => "redis://$redispassword$miniondb" } );
-     $self->LRR_LOGGER->info("Successfully connected to Minion database.");
-     $self->minion->missing_after(5);    # Clean up older workers after 5 seconds of unavailability
- 
-diff --git a/lib/LANraragi/Model/Config.pm b/lib/LANraragi/Model/Config.pm
-index f52056d4..63e1f5d3 100644
---- a/lib/LANraragi/Model/Config.pm
-+++ b/lib/LANraragi/Model/Config.pm
-@@ -42,8 +42,8 @@ sub get_minion {
-     my $miniondb = get_redisad . "/" . get_miniondb;
-     my $password = get_redispassword;
- 
--    # If the password is non-empty, add the required @
--    if ($password) { $password = $password . "@"; }
-+    # If the password is non-empty, add the required delimiters
-+    if ($password) { $password = "x:" . $password . "@"; }
- 
-     return Minion->new( Redis => "redis://$password$miniondb" );
- }
diff --git a/pkgs/by-name/la/lanraragi/install.patch b/pkgs/by-name/la/lanraragi/install.patch
index 9d260f5a494f..440c9252a727 100644
--- a/pkgs/by-name/la/lanraragi/install.patch
+++ b/pkgs/by-name/la/lanraragi/install.patch
@@ -1,21 +1,16 @@
-diff --git a/tools/cpanfile b/tools/cpanfile
-index 359c61fe..ca3b7ec7 100755
---- a/tools/cpanfile
-+++ b/tools/cpanfile
-@@ -20,7 +20,7 @@ requires 'Sort::Naturally',     1.03;
- requires 'Authen::Passphrase',  0.008;
- requires 'File::ReadBackwards', 1.05;
- requires 'URI::Escape',         1.74;
--requires 'URI',                 5.09;
-+requires 'URI',                 5.05;
- 
- # Used by Installer
- requires 'IPC::Cmd', 1.02;
 diff --git a/tools/install.pl b/tools/install.pl
-index 0cbb847d..1bd61fa0 100755
+index dbeb7c11..06e4c675 100755
 --- a/tools/install.pl
 +++ b/tools/install.pl
-@@ -91,32 +91,6 @@ if ( $ENV{HOMEBREW_FORMULA_PREFIX} ) {
+@@ -9,6 +9,7 @@ use Config;
+ 
+ use feature    qw(say);
+ use File::Path qw(make_path);
++use File::Copy qw(copy);
+ 
+ #Vendor dependencies
+ my @vendor_css = (
+@@ -91,32 +92,6 @@ if ( $ENV{HOMEBREW_FORMULA_PREFIX} ) {
      $cpanopt = " -l " . $ENV{HOMEBREW_FORMULA_PREFIX} . "/libexec";
  }
  
@@ -48,16 +43,60 @@ index 0cbb847d..1bd61fa0 100755
  #Check for PerlMagick
  say("Checking for ImageMagick/PerlMagick...");
  my $imgk;
-@@ -154,12 +128,6 @@ if ( $back || $full ) {
+@@ -136,36 +111,11 @@ if ($@) {
+     say("OK!");
+ }
+ 
+-#Build & Install CPAN Dependencies
+-if ( $back || $full ) {
+-    say("\r\nInstalling Perl modules... This might take a while.\r\n");
+-
+-    if ( $Config{"osname"} ne "darwin" ) {
+-        say("Installing Linux::Inotify2 for non-macOS systems... (This will do nothing if the package is there already)");
+-
+-        install_package( "Linux::Inotify2", $cpanopt );
+-    }
+-
+-    if ( system( "cpanm --installdeps ./tools/. --notest" . $cpanopt ) != 0 ) {
+-        die "Something went wrong while installing Perl modules - Bailing out.";
+-    }
+-}
+-
  #Clientside Dependencies with Provisioning
  if ( $front || $full ) {
  
 -    say("\r\nObtaining remote Web dependencies...\r\n");
 -
--    if ( system("npm install") != 0 ) {
+-    if ( system("npm ci") != 0 ) {
 -        die "Something went wrong while obtaining node modules - Bailing out.";
 -    }
 -
      say("\r\nProvisioning...\r\n");
  
-     #Load File::Copy
+-    #Load File::Copy
+-    install_package( "File::Copy", $cpanopt );
+-    File::Copy->import("copy");
+-
+     make_path getcwd . "/public/css/vendor";
+     make_path getcwd . "/public/css/webfonts";
+     make_path getcwd . "/public/js/vendor";
+@@ -212,19 +162,3 @@ sub cp_node_module {
+ 
+ }
+ 
+-sub install_package {
+-
+-    my $package = $_[0];
+-    my $cpanopt = $_[1];
+-
+-    ## no critic
+-    eval "require $package";    #Run-time evals are needed here to check if the package has been properly installed.
+-    ## use critic
+-
+-    if ($@) {
+-        say("$package not installed! Trying to install now using cpanm$cpanopt");
+-        system("cpanm $package $cpanopt");
+-    } else {
+-        say("$package package installed, proceeding...");
+-    }
+-}
diff --git a/pkgs/by-name/la/lanraragi/loosen-dep-reqs.patch b/pkgs/by-name/la/lanraragi/loosen-dep-reqs.patch
new file mode 100644
index 000000000000..1b2ec4c1fd81
--- /dev/null
+++ b/pkgs/by-name/la/lanraragi/loosen-dep-reqs.patch
@@ -0,0 +1,13 @@
+diff --git a/tools/cpanfile b/tools/cpanfile
+index 7385aea7..22f9b069 100755
+--- a/tools/cpanfile
++++ b/tools/cpanfile
+@@ -20,7 +20,7 @@ requires 'Sort::Naturally',     1.03;
+ requires 'Authen::Passphrase',  0.008;
+ requires 'File::ReadBackwards', 1.05;
+ requires 'URI::Escape',         1.74;
+-requires 'URI',                 5.09;
++requires 'URI',                 5.05;
+ 
+ # Used by Installer
+ requires 'IPC::Cmd', 1.02;
diff --git a/pkgs/by-name/la/lanraragi/package.nix b/pkgs/by-name/la/lanraragi/package.nix
index 74ec38eeae23..8b2ee5ff8c06 100644
--- a/pkgs/by-name/la/lanraragi/package.nix
+++ b/pkgs/by-name/la/lanraragi/package.nix
@@ -9,16 +9,47 @@
 , nixosTests
 }:
 
-let
-  perlEnv = perl.withPackages (_: cpanDeps);
+buildNpmPackage rec {
+  pname = "lanraragi";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "Difegue";
+    repo = "LANraragi";
+    rev = "v.${version}";
+    hash = "sha256-euZotpXTUSmxlA5rbTUhHpHH0Ojd3AZjGasxYZ+L7NY=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-redis-auth.patch";
+      url = "https://github.com/Difegue/LANraragi/commit/1711b39759ad02ab2a8863ce1f35f6479c9a2917.patch";
+      hash = "sha256-WfKeieysIlS64qgVEc75JFKjxXuvZN85M6US/gwjTzw=";
+    })
+    (fetchpatch {
+      name = "fix-ghostscript-device.patch";
+      url = "https://github.com/Difegue/LANraragi/commit/087d63b11c89fda8cb3a30cdb2e86ecd6be66bb7.patch";
+      hash = "sha256-Cu9d/dDlO0yuFCTKOyg5A0gIuiA+FcWD9PjexB/BK0U=";
+    })
+    ./install.patch
+    ./loosen-dep-reqs.patch # Can be removed once perl.pkgs.URI is updated
+    ./fix-paths.patch
+    ./expose-password-hashing.patch # Used by the NixOS module
+  ];
+
+  npmDepsHash = "sha256-/F/lhQIVGbbFxFuQXXwHUVlV2jhHt0hFf94v0FrTKt8=";
 
-  cpanDeps = with perl.pkgs; [
+  nativeBuildInputs = [ perl makeBinaryWrapper ];
+
+  buildInputs = with perl.pkgs; [
+    perl
     ImageMagick
     locallib
     Redis
     Encode
     ArchiveLibarchiveExtract
     ArchiveLibarchivePeek
+    ListMoreUtils
     NetDNSNative
     SortNaturally
     AuthenPassphrase
@@ -39,50 +70,17 @@ let
     FileChangeNotify
     ModulePluggable
     TimeLocal
+    YAMLSyck
+    StringSimilarity
   ] ++ lib.optional stdenv.isLinux LinuxInotify2;
-in
-buildNpmPackage rec {
-  pname = "lanraragi";
-  version = "0.8.90";
-
-  src = fetchFromGitHub {
-    owner = "Difegue";
-    repo = "LANraragi";
-    rev = "v.${version}";
-    hash = "sha256-ljnREUGCKvUJvcQ+aJ6XqiMTkVmfjt/0oC47w3PCj/k=";
-  };
-
-  patches = [
-    (fetchpatch {
-      name = "add-package-lock-json.patch"; # Can be removed when updating to 0.9.0
-      url = "https://github.com/Difegue/LANraragi/commit/c5cd8641795bf7e40deef4ae955ea848dde44050.patch";
-      hash = "sha256-XKxRzeugkIe6N4XRN6+O1wEZpxo6OzU0OaG0ywKFv38=";
-    })
-    ./install.patch
-    ./fix-paths.patch
-    ./expose-password-hashing.patch
-    ./fix-minion-redis-password.patch # Should be upstreamed
-  ];
-
-  npmFlags = [ "--legacy-peer-deps" ];
-
-  npmDepsHash = "sha256-UQsChPU5b4+r5Kv6P/3rJCGUzssiUNSKo3w4axNyJew=";
-
-  nativeBuildInputs = [
-    perl
-    makeBinaryWrapper
-    perl.pkgs.Appcpanminus
-  ] ++ cpanDeps;
-
-  nativeCheckInputs = with perl.pkgs; [
-    TestMockObject
-    TestTrap
-    TestDeep
-  ];
 
   buildPhase = ''
     runHook preBuild
 
+    # Check if every perl dependency was installed
+    # explicitly call cpanm with perl because the shebang is broken on darwin
+    perl ${perl.pkgs.Appcpanminus}/bin/cpanm --installdeps ./tools --notest
+
     perl ./tools/install.pl install-full
     rm -r node_modules public/js/vendor/*.map public/css/vendor/*.map
 
@@ -91,6 +89,12 @@ buildNpmPackage rec {
 
   doCheck = true;
 
+  nativeCheckInputs = with perl.pkgs; [
+    TestMockObject
+    TestTrap
+    TestDeep
+  ];
+
   checkPhase = ''
     runHook preCheck
 
@@ -104,19 +108,23 @@ buildNpmPackage rec {
     runHook preInstall
 
     mkdir -p $out/share/lanraragi
-    cp -r lib public script templates package.json $out/share/lanraragi
+    chmod +x script/launcher.pl
+    cp -r lib public script templates package.json lrr.conf $out/share/lanraragi
 
-    makeWrapper ${perlEnv}/bin/perl $out/bin/lanraragi \
+    makeWrapper $out/share/lanraragi/script/launcher.pl $out/bin/lanraragi \
+      --prefix PERL5LIB : $PERL5LIB \
       --prefix PATH : ${lib.makeBinPath [ ghostscript ]} \
-      --add-flags "$out/share/lanraragi/script/launcher.pl -f $out/share/lanraragi/script/lanraragi"
+      --run "cp -n --no-preserve=all $out/share/lanraragi/lrr.conf ./lrr.conf 2>/dev/null || true" \
+      --add-flags "-f $out/share/lanraragi/script/lanraragi"
+
+    makeWrapper ${lib.getExe perl} $out/bin/helpers/lrr-make-password-hash \
+      --prefix PERL5LIB : $out/share/lanraragi/lib:$PERL5LIB \
+      --add-flags "-e 'use LANraragi::Controller::Config; print LANraragi::Controller::Config::make_password_hash(@ARGV[0])' 2>/dev/null"
 
     runHook postInstall
   '';
 
-  passthru = {
-    inherit perlEnv;
-    tests = { inherit (nixosTests) lanraragi; };
-  };
+  passthru.tests.module = nixosTests.lanraragi;
 
   meta = {
     changelog = "https://github.com/Difegue/LANraragi/releases/tag/${src.rev}";
@@ -128,3 +136,4 @@ buildNpmPackage rec {
     platforms = lib.platforms.unix;
   };
 }
+