Discourse-Paket lässt sich über nix-shell nicht erstellen

Ich habe versucht, das Discourse-Nixpaket herunterzuladen und zu erstellen, aber es ist aufgrund eines scheinbaren pnpm-Abhängigkeitsfehlers fehlgeschlagen:

 ERR_PNPM_INVALID_DEPENDENCY_NAME  Refusing to place a dependency under /build/source/frontend/discourse-types/node_modules with the invalid alias "@types/@glimmer__component"

ERROR: pnpm failed to install dependencies

If you see ERR_PNPM_NO_OFFLINE_TARBALL above this, follow these to fix the issue:
1. Set pnpmDeps.hash to "" (empty string)
2. Build the derivation and wait for it to fail with a hash mismatch
3. Copy the 'got: sha256-' value back into the pnpmDeps.hash field

If you see ERR_PNPM_LOCKFILE_CONFIG_MISMATCH above this, try changing the pnpm version
Found 'pnpm' with version '10.34.4'

error: Cannot build '/nix/store/k90f0nxqhlyb1bym9lg5xl6pfjz4vamf-discourse-assets-2026.1.4.drv'.
       Reason: builder failed with exit code 1.
       Output paths:
         /nix/store/biwwabb1xl58v4ywqmmc7d4vm0sl78q3-discourse-assets-2026.1.4-node_modules
         /nix/store/jsbd94c63h63yq5xvrp27m5l1sg6667c-discourse-assets-2026.1.4-generated
         /nix/store/n278iw1v8kzswvwm8f6n6g15gkw6wb0q-discourse-assets-2026.1.4-frontend
         /nix/store/qnxglj6z2n8fn46af9rp7161634brcgk-discourse-assets-2026.1.4
       Last 25 log lines:
       > Progress: resolved 1909, reused 1263, downloaded 0, added 0
       > Progress: resolved 1909, reused 1907, downloaded 0, added 65
       > Progress: resolved 1909, reused 1909, downloaded 0, added 435
       > Progress: resolved 1909, reused 1909, downloaded 0, added 530
       > Progress: resolved 1909, reused 1909, downloaded 0, added 672
       > Progress: resolved 1909, reused 1909, downloaded 0, added 838
       > Progress: resolved 1909, reused 1909, downloaded 0, added 1036
       > Progress: resolved 1909, reused 1909, downloaded 0, added 1175
       > Progress: resolved 1909, reused 1909, downloaded 0, added 1464
       > Progress: resolved 1909, reused 1909, downloaded 0, added 1767
       > Progress: resolved 1909, reused 1909, downloaded 0, added 1907
       > Progress: resolved 1909, reused 1909, downloaded 0, added 1908
       > Progress: resolved 1909, reused 1909, downloaded 0, added 1909, done
       >  ERR_PNPM_INVALID_DEPENDENCY_NAME  Refusing to place a dependency under /build/source/frontend/discourse-types/node_modules with the invalid alias "@types/@glimmer__component"
       >
       > ERROR: pnpm failed to install dependencies
       >
       > If you see ERR_PNPM_NO_OFFLINE_TARBALL above this, follow these to fix the issue:
       > 1. Set pnpmDeps.hash to "" (empty string)
       > 2. Build the derivation and wait for it to fail with a hash mismatch
       > 3. Copy the 'got: sha256-' value back into the pnpmDeps.hash field
       >
       > If you see ERR_PNPM_LOCKFILE_CONFIG_MISMATCH above this, try changing the pnpm version
       > Found 'pnpm' with version '10.34.4'
       >
       For full logs, run:
         nix log /nix/store/k90f0nxqhlyb1bym9lg5xl6pfjz4vamf-discourse-assets-2026.1.4.drv
error: Cannot build '/nix/store/9n8grwvci4gd2c64i9wm5ggw5v4r63xf-discourse-2026.1.4.drv'.
       Reason: 1 dependency failed.
       Output paths:
         /nix/store/l9xhbd5scihfln5jr9vh1c6l4xznaall-discourse-2026.1.4
error: Build failed due to failed dependency

Ich habe dieses Problem bisher nicht woanders gesehen und dachte, ihr möchtet es vielleicht wissen.

Das Problem ist, dass nur Debian/Ubuntu unterstützt werden, nicht aber Nix. Ist das für eine Entwicklungsumgebung oder für den Produktivbetrieb?

Hierbei wird das Discourse-Paket aus den nixpkgs einfach über den Nix-Paketmanager heruntergeladen. Derivationen funktionieren, indem sie ein Paket im Wesentlichen direkt aus dem Quellcode klonen und bauen.

Ich habe das Paket nur vorübergehend installiert, genau wie jedes andere Paket unter NixOS. Es ging mir nicht speziell um Entwicklung oder Produktion; eigentlich wollte ich nur prüfen, ob ich Discourse in einer CLI nutzen kann. Mein TUI-Browser rendert einige Teile der Benutzeroberfläche nicht korrekt, daher dachte ich, ich teste die Nix-Paketversion, um zu sehen, ob die UX damit besser funktioniert.

Ich habe einen einfachen Download/Build über Nix versucht und erhielt den oben genannten Fehler.

Interessant. Ich glaube, das Paket stammt nicht offiziell von Discourse. Ein kurzer Blick auf die Maintainer zeigt keine Mitglieder des Discourse-Teams, die ich kenne. Außerdem gibt es meines Wissens keine #Dokumentation dazu.

Zur Referenz: dieses Plugin, vermute ich

ah ja, das sind die Nixpkgs-Maintainer(s)

der eigentliche Quellcode befindet sich im `let in`-Block

Zeile 55:

let
  version = "2026.1.4";

  src = fetchFromGitHub {
    owner = "discourse";
    repo = "discourse";
    rev = "v${version}";
    sha256 = "sha256-kQYDKZIMsWByuCZQfUlwhoIew5QykVylRMh6xvrHIBY=";
  };
in
# ...

es wird also von `discourse/discourse` bezogen; der Rest der Ableitung besteht im Wesentlichen aus Build-Schritten, dem Platzieren von Dateien, dem Umgang mit bestimmten Build-Fehlern usw.

der `src`-Parameter wirkt insofern wie eine Variable, als er durch den Rest der Ableitung weitergegeben wird

Außerdem musst du nicht das komplette nixOS installieren, um dies zu testen.

Das nix-Paketmanagement ist für nahezu jedes System verfügbar.

`nix-shell -p discourse`

Dabei startet `nix-shell` eine Shell, in der die mit `-p` angegebenen Pakete auf dem System zur Verfügung stehen. Sobald die Shell geschlossen wird, sind diese Pakete nicht mehr installiert.

Ich habe keine passende Analogie zu apt, um nix als Konzept zu beschreiben. Aber wenn Wasser sich an die Form seines Behälters anpasst, dann ist nix ein Behälter, der sich an seinen Inhalt anpasst. Das Problem, das `nix` lösen will, ist das „Läuft auf meinem Rechner“-Phänomen: Wenn die Software kompiliert und läuft, wird sie über nix ebenfalls kompiliert und laufen.

Ich teste, ob dieser Thread gesperrt wurde, da ich eine meiner jüngsten Bearbeitungen nicht sehen kann.

Vielleicht muss die Bearbeitung genehmigt werden, damit sie im Beitrag angezeigt wird.

Der Thread ist nicht gesperrt, und wir genießen das Thema und lernen dabei. Vielen Dank für deinen Beitrag und willkommen bei Meta :+1:

keine Sorge! Danke für die Aufklärung.

Der Grund, warum ich einen Genehmigungsprozess vermutet habe, ist, dass ich diese Änderung vorgenommen hatte und sie auf meiner Seite nicht angezeigt wurde:

Ich sehe nach wie vor nur den Text auf der linken Seite

E: Es ist gerade eben aufgetaucht

Danke für den Bericht! Ich habe mir das angesehen, und es scheint sich um eine Versionsinkonsistenz bei pnpm im Nix-Paket zu handeln, nicht um ein Problem mit dem Abhängigkeits-Hash.

Discourse v2026.1.4 deklariert pnpm@10.28.0, während der Nix-Ausdruck das sich ändernde Paket pnpm_10 verwendet, das derzeit auf 10.34.4 aufgelöst wird. Diese neuere pnpm-Version lehnt einige Abhängigkeits-Aliase ab, die von dieser Discourse-Version verwendet werden.

Die wahrscheinlichste Lösung in Nixpkgs besteht darin, die Ableitung auf eine ältere, kompatible pnpm-Version zu fixieren, möglicherweise das vorhandene pnpm_10_29_2-Paket, oder exakt auf 10.28.0, und anschließend pnpmDeps.hash bei Bedarf zu aktualisieren.

Da das Nix-Paket von der Community gewartet wird, müsste diese Korrektur in Nixpkgs vorgenommen werden, aber hoffentlich weist dies die Maintainer in die richtige Richtung.

Ich habe mich vielleicht zu früh darauf festgelegt, das Problem als gelöst zu markieren, da ich es noch gar nicht getestet habe, lol.

Nixpkgs erlaubt es, Pakete lokal durch Overlays und Overrides anzupassen. Ich kann versuchen, diese Änderungen in die Derivation selbst umzusetzen, wenn ich Zeit habe, und dann hier über meine Erkenntnisse berichten.

So weit bin ich gekommen:

let
  nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-26.05";
  pkgs = import nixpkgs {
    config = { };
    overlays = with pkgs; [
      (final: prev: {
        discourse = prev.discourse.override (oa: {
          pnpm_10 = oa.pnpm_10.overrideAttrs (_: {
            src = fetchFromGitHub {
              owner = "pnpm";
              repo = "pnpm";
              rev = "ea870c786fc74c99bf9de644c78453b4d25a7d59";
              hash = "sha256-g+TjAW1SGuEXh04RnGZOQTLkJTHs/3zyCp/P+MzBn4c=";
            };
          });
        });

      })
    ];
  };
in

pkgs.mkShellNoCC {
  packages = with pkgs; [
    # for debug
    discourse
  ];
}

Fehler:

Running phase: unpackPhase
unpacking source archive /nix/store/ci631zzm890b2dzsrxxxrg15qpbac6jy-source
source root is source
rm: cannot remove 'package/dist/vendor': No such file or directory
error: Cannot build '/nix/store/lq23pl8ycyf8myl9mynwzx9a2f2miywv-pnpm-10.34.0.drv'.
       Reason: builder failed with exit code 1.
       Output paths:
         /nix/store/kf62vww5jdfpr32qgxhz4qv9dkfdb0pf-pnpm-10.34.0
       Last 5 log lines:
       > structuredAttrs is enabled
       > Running phase: unpackPhase
       > unpacking source archive /nix/store/ci631zzm890b2dzsrxxxrg15qpbac6jy-source
       > source root is source
       > rm: cannot remove 'package/dist/vendor': No such file or directory
       For full logs, run:
         nix log /nix/store/lq23pl8ycyf8myl9mynwzx9a2f2miywv-pnpm-10.34.0.drv
error: Cannot build '/nix/store/1hi18g4r0gmmlnj059irx91grry7ymv7-discourse-assets-2026.1.4.drv'.
       Reason: 1 dependency failed.
       Output paths:
         /nix/store/bw2pzh74fbp0wkn9f4b2bf2p6lwcva3d-discourse-assets-2026.1.4
         /nix/store/kqnrdh18f4pn87rpzk2af0d18xcvbj7k-discourse-assets-2026.1.4-generated
         /nix/store/mcbvqw0y8r3as9zrjmrq7pc32n64bj2r-discourse-assets-2026.1.4-frontend
         /nix/store/my9x48zhzzqi2w8rriww6qm4v9iaxxhx-discourse-assets-2026.1.4-node_modules
error: Cannot build '/nix/store/05ffysx25hfzw34km225d2krpnifwj75-discourse-2026.1.4.drv'.
       Reason: 1 dependency failed.
       Output paths:
         /nix/store/2b1pvnvln95dx7rxr88kc5b9g24x45dr-discourse-2026.1.4

Scheinbar zeigen die Logs einfach den falschen Build an, als hätte ich ihn nicht überschrieben, was wirklich hilfreich ist. Es beschwert sich darüber, dass eine Datei unter package/dist/vendor nicht erstellt wurde.

Ja, das ist wahrscheinlich etwas, das am besten den Maintainern überlassen werden sollte.

nixpkgs hatte eine ziemlich veraltete Version von Discourse von Januar, daher habe ich einen PR zum Aktualisieren eröffnet. Ich habe noch nie an nixpkgs mitgewirkt, also werden wir sehen, wie es läuft.

@fuguesoft es sieht so aus, als hätten sie das aktualisierte Discourse-nixpkg gemerged, falls du es ausprobieren möchtest