Il pacchetto Discourse non viene compilato tramite nix-shell

Ho tentato di scaricare e compilare il pacco nix di Discourse, ma è fallito a causa di un apparente errore di dipendenza pnpm:

 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

Non ho visto segnalato questo problema da nessuna parte e ho pensato che vi sarebbe piaciuto saperlo.

Il punto è che sono supportati solo Debian/Ubuntu, non Nix. Questo è per un ambiente di sviluppo o per la produzione?

Si tratta semplicemente di scaricare il pacchetto Discourse da nixpkgs utilizzando il gestore dei pacchetti Nix. Le derivazioni funzionano essenzialmente clonando e compilando un pacchetto direttamente dalla sorgente.

Stavo installando temporaneamente un pacchetto come farei con qualsiasi altro pacchetto su NixOS. Non specificamente per sviluppo o produzione, in realtà volevo solo verificare se potessi utilizzare Discourse da riga di comando. Il mio browser testuale (TUI) non visualizzava alcune parti dell’interfaccia utente, quindi ho pensato di fare una prova con il pacchetto Nix per vedere se l’esperienza utente fosse più adatta.

Ho provato un semplice download/compilazione tramite Nix e ho ottenuto l’errore menzionato sopra.

Interessante. Credo che il pacchetto non sia ufficiale di Discourse. Una rapida occhiata ai Manutentori non mostra alcun membro del team di Discourse che io conosca. Inoltre, nessun #documentazione al riguardo, per quanto ne so.

Per riferimento: questo plugin penso

ah sì, quelli sono i manutentori di nixpkg

la sorgente effettiva si trova nel blocco let in

riga 55:

let
  version = "2026.1.4";

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

quindi attinge da discourse/discourse; il resto della derivazione è fondamentalmente composto da passaggi di compilazione, indicazioni su dove posizionare i file, come gestire determinati errori di compilazione, ecc.

il parametro src è simile a una variabile, nel senso che viene propagato nel resto della derivazione

Quindi non è necessario installare l’intero nixOS per testare questo.

il gestore di pacchetti nix è disponibile per quasi qualsiasi macchina.

`nix-shell -p discourse`

dove `nix-shell` avvia una shell in cui i pacchetti specificati con `-p` sono ora disponibili sul sistema. una volta chiusa la shell, quei pacchetti non sono più installati

Non ho un’analogia con apt per descrivere nix come concetto, ma se l’acqua si modella per adattarsi al suo contenitore, nix è un contenitore che si modella per adattarsi al suo contenuto. Il problema che `nix` cerca di risolvere è “funziona sul mio computer”: se il software viene compilato ed eseguito, verrà compilato ed eseguito tramite nix.

Sto facendo una prova per vedere se questa discussione è stata bloccata, poiché non riesco a vedere una delle mie ultime modifiche.

Forse la modifica deve essere approvata per essere visualizzata nel post.

La discussione non è bloccata e stiamo godendoci l’argomento e imparando. Grazie per il tuo contributo e benvenuto su Meta :+1:

nessun problema! grazie per la precisazione.

Il motivo per cui sospettavo un processo di approvazione è che avevo effettuato questa modifica e non la vedevo apparire sul mio schermo:

Vedo ancora solo il testo sul lato sinistro

E: è appena apparso

Grazie per la segnalazione! Ho dato un’occhiata e sembra che si tratti di un disallineamento delle versioni di pnpm nel pacchetto Nix, piuttosto che di un problema con l’hash delle dipendenze.

Discourse v2026.1.4 dichiara pnpm@10.28.0, mentre l’espressione Nix utilizza il pacchetto mobile pnpm_10, che attualmente si risolve in 10.34.4. Questa versione più recente di pnpm rifiuta alcuni alias di dipendenza utilizzati da questa release di Discourse.

La correzione probabile in Nixpkgs consiste nel fissare la derivazione a una versione di pnpm più vecchia e compatibile, eventualmente il pacchetto esistente pnpm_10_29_2, oppure esattamente 10.28.0, aggiornando pnpmDeps.hash se necessario.

Dato che il pacchetto Nix è mantenuto dalla community, la correzione dovrà essere apportata in Nixpkgs, ma si spera che questo indirizzi i maintainer nella direzione giusta.

Forse ho dato per scontato di aver risolto il problema, visto che in realtà non l’ho ancora testato, lol.

Nixpkgs consente di applicare overlay e override ai propri pacchetti a livello locale. Posso provare a implementare io stesso queste modifiche alla derivazione quando avrò un po’ di tempo e poi vi farò sapere cosa ne esce.

Ecco dove sono arrivato:

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
  ];
}

errore:

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

A quanto pare, i log mostrano semplicemente la build errata, come se non l’avessi sovrascritta, il che è di un aiuto enorme. Si lamenta del fatto che un file package/dist/vendor non viene creato.

sì, probabilmente è una questione che è meglio lasciare ai maintainer

nixpkgs aveva una versione piuttosto datata di Discourse, risalente a gennaio, quindi ho aperto una PR per aggiornarla. Non ho mai contribuito a nixpkgs, quindi vedremo come andrà a finire.

@fuguesoft sembra che abbiano unito il pacchetto nixpkg aggiornato di Discourse, se vuoi provarlo