El paquete Discourse falla al compilarse a través de nix-shell

Intenté descargar y compilar el paquete nix de Discourse, pero falló debido a un aparente error de dependencia de 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

No he visto este problema en ningún otro lugar y pensé que les gustaría saberlo.

El asunto es que solo se admiten Debian/Ubuntu, no Nix. ¿Es esto para un entorno de desarrollo o para producción?

esto es simplemente descargar el paquete de Discourse desde nixpkgs usando el gestor de paquetes nix. Las derivaciones funcionan esencialmente clonando y compilando un paquete directamente desde el código fuente.

Estaba instalando temporalmente un paquete como lo haría con cualquier otro en nixOS. No específicamente para desarrollo o producción, realmente quería ver si podía usar Discourse en una interfaz de línea de comandos. Mi navegador TUI no muestra parte de la interfaz de usuario, así que pensé que probaría el paquete de nix para ver si la experiencia de usuario era más adecuada.

Intenté una descarga/compilación simple mediante nix y obtuve el error mencionado anteriormente

Interesante. Creo que el paquete no es oficial de Discourse. Una rápida mirada a los Mantenedores no muestra a ningún miembro del equipo de Discourse que yo haya oído mencionar. Además, no hay #documentación al respecto que yo sepa.

Para referencia: este plugin, creo

ah, sí, ese es el/los mantenedor(es) de nixpkg

la fuente real está en el bloque `let in`

línea 55:

let
  version = "2026.1.4";

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

así que está obteniendo el código de `discourse/discourse`; el resto de la derivación son básicamente pasos de compilación, dónde colocar los archivos, qué hacer con ciertos errores de compilación, etc.

ese parámetro `src` funciona como una variable, en el sentido de que se propaga a lo largo del resto de la derivación

Tampoco necesitas comprometerte con nixOS completo para probar esto.

El gestor de paquetes nix está disponible para casi cualquier máquina.

`nix-shell -p discourse`

donde `nix-shell` inicia un shell donde los paquetes que se indiquen con `-p` quedan disponibles en el sistema. Una vez que se cierra el shell, esos paquetes ya no están instalados.

No tengo una analogía con apt para describir nix como concepto, pero si el agua se adapta a la forma de su recipiente, nix es un recipiente que se adapta a la forma de su contenido. El problema que `nix` busca resolver es el clásico “funciona en mi máquina”: si el software se compila y se ejecuta, se compilará y se ejecutará a través de nix.

Estoy probando para ver si este hilo ha sido bloqueado, ya que no puedo ver una de mis ediciones más recientes.

Quizás la edición necesite ser aprobada para que se muestre en la publicación.

El hilo no está cerrado y estamos disfrutando del tema y aprendiendo. Gracias por tu contribución y bienvenido a Meta :+1:

¡no te preocupes! gracias por la aclaración.

La razón por la que sospechaba de algún proceso de aprobación es que hice esta edición y no la veía reflejada en mi lado:

Sigo viendo solo el texto en el lado izquierdo

E: acaba de aparecer

¡Gracias por el informe! He echado un vistazo y parece que se trata de una incompatibilidad de versiones de pnpm en el paquete de Nix, en lugar de un problema con el hash de las dependencias.

Discourse v2026.1.4 declara pnpm@10.28.0, mientras que la expresión de Nix utiliza el paquete pnpm_10 móvil, que actualmente se resuelve en 10.34.4. Esa versión más nueva de pnpm rechaza algunos alias de dependencias utilizados por esta versión de Discourse.

La solución probable en Nixpkgs sería fijar la derivación a una versión compatible y anterior de pnpm, posiblemente el paquete existente pnpm_10_29_2, o exactamente 10.28.0, y actualizar pnpmDeps.hash si fuera necesario.

Dado que el paquete de Nix es mantenido por la comunidad, esa corrección tendría que realizarse en Nixpkgs, pero se espera que esto guíe a los mantenedores en la dirección correcta.

Quizá me adelanté al marcar esto como resuelto, ya que en realidad no lo he probado, jaja.

Nixpkgs permite aplicar overlays y overrides a sus paquetes de forma local. Puedo intentar implementar esos cambios en la derivación yo mismo cuando tenga tiempo y luego informar sobre mis hallazgos.

Hasta aquí he llegado:

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

error:

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

Al parecer, los registros solo muestran la compilación incorrecta, como si no la hubiera sobrescrito, lo cual es de gran ayuda. Se queja de que no se está creando algún archivo package/dist/vendor.

sí, esto probablemente sea algo mejor dejado en manos de los mantenedores

nixpkgs tenía una versión bastante desactualizada de Discourse, de enero, así que abrí una PR para actualizarla. Nunca había contribuido a nixpkgs, así que a ver cómo sale.

@fuguesoft parece que han integrado el paquete nixpkg actualizado de Discourse, por si quieres probarlo