Pacote Discourse falha ao compilar via nix-shell

Tentei baixar e compilar o pacote nix do Discourse, mas falhou devido a um aparente erro de dependência do 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

Não vi esse problema em nenhum outro lugar e achei que vocês poderiam querer saber.

O fato é que apenas Debian/Ubuntu são suportados, não Nix. Isso é para um ambiente de desenvolvimento ou para produção?

Isso é apenas baixar o pacote do Discourse do nixpkgs usando o gerenciador de pacotes Nix. As derivações funcionam essencialmente clonando e compilando um pacote diretamente da fonte.

Eu estava apenas instalando efemeramente um pacote como faria com qualquer outro no NixOS. Não especificamente para desenvolvimento ou produção, na verdade eu queria ver se poderia usar o Discourse em uma CLI. Meu navegador TUI não exibia parte da interface, então pensei em testar o pacote do Nix para ver se a experiência do usuário seria mais adequada.

Tentei um download/compilação simples via Nix e obtive o erro mencionado acima.

Interessante. Acredito que o pacote não seja oficialmente do Discourse. Uma rápida olhada nos Mantenedores não lista nenhum membro da equipe do Discourse que eu conheça. Além disso, sem #documentação sobre isso, pelo que eu sei.

Para referência: esse plugin, acho

ah sim, esses são os mantenedores do nixpkg

a fonte real está no bloco `let in`

linha 55:

let
  version = "2026.1.4";

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

então ele está obtendo do `discourse/discourse` o resto da derivação é basicamente apenas etapas de compilação, onde colocar arquivos, o que fazer com certos erros de compilação …etc

esse parâmetro `src` é meio como uma variável, pois é propagado pelo resto da derivação

Além disso, você não precisa se comprometer com o nixOS completo para testar isso.

O gerenciador de pacotes nix está disponível para praticamente qualquer máquina.

`nix-shell -p discourse`

onde o `nix-shell` inicia um shell no qual os pacotes especificados com `-p` ficam disponíveis no sistema. Assim que o shell é fechado, esses pacotes deixam de estar instalados.

Não tenho uma analogia com o apt para descrever o nix como conceito, mas se a água se molda para se adequar ao seu recipiente, o nix é um recipiente que se molda para se adequar ao seu conteúdo. O problema que o `nix` busca resolver é o “funciona na minha máquina”, no sentido de que, se o software compilar e executar, ele também compilará e executará via nix.

testando para ver se este tópico foi bloqueado, pois não consigo ver uma das minhas edições mais recentes.

talvez a edição precise ser aprovada para ser exibida na publicação

o tópico não está travado e estamos aproveitando o assunto e aprendendo. Obrigado pela sua contribuição e bem-vindo ao Meta :+1:

sem problemas! obrigado pela esclarecimento.

O motivo de eu ter desconfiado de algum processo de aprovação é que fiz essa edição e não a vi aparecer do meu lado:

Eu ainda vejo apenas o texto no lado esquerdo

E: acabou de aparecer

Obrigado pelo relatório! Dei uma olhada e isso parece ser uma incompatibilidade de versão do pnpm no pacote Nix, e não um problema com o hash da dependência.

O Discourse v2026.1.4 declara pnpm@10.28.0, enquanto a expressão Nix usa o pacote pnpm_10 móvel, que atualmente resolve para 10.34.4. Essa versão mais nova do pnpm rejeita alguns aliases de dependência usados por esta versão do Discourse.

A correção provável no Nixpkgs é fixar a derivação em uma versão mais antiga e compatível do pnpm, possivelmente o pacote existente pnpm_10_29_2, ou exatamente 10.28.0, e então atualizar o pnpmDeps.hash, se necessário.

Como o pacote Nix é mantido pela comunidade, essa correção precisaria ser feita no Nixpkgs, mas, esperançosamente, isso aponta os mantenedores na direção certa.

Talvez eu tenha agido precipitadamente ao marcar isso como resolvido, já que na verdade ainda não testei, rs.

O Nixpkgs permite o uso de overlays e overrides dos seus pacotes localmente. Posso tentar implementar essas alterações na derivation eu mesmo quando tiver um pouco de tempo e depois relato o que descobrir.

É até onde eu consegui chegar:

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

erro:

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

Aparentemente, os logs apenas mostram a construção incorreta, como se eu não tivesse sobrescrito, o que é muito útil. Ele está reclamando que algum arquivo package/dist/vendor não foi criado.

sim, isso provavelmente é algo melhor deixado para os mantenedores

O nixpkgs tinha uma versão bem desatualizada do Discourse, de janeiro, então abri um PR para atualizá-la. Nunca contribuí para o nixpkgs antes, então vamos ver como vai ser.

@fuguesoft parece que eles mesclaram o nixpkg atualizado do Discourse, caso queira testá-lo