Flyounet : (Digital|Real)? life

Une sorte de journal quotidien, mais en vachement plus espacé dans le temps

Amsel-Suite sur NixOs

Rédigé le . Édité le .

Après de multiples recherches, et n'ayant pas trouvé comment utilisé Amsel-Suite sur NixOs, j'ai finalement utilisé une IA pour parvenir à mes fins.

Au commencement était l'OS

J'ai appris l'existence de NixOs tardivement. Je me suis décidé, il y a un peu plus d'un an. J'ai quitté mes anciens Linux pour cette distribution.

Autant le dire tout de suite, la courbe d'apprentissage s'apparente à gravir le Mont Blanc. Autant le système est fiable et robuste, le nombre de paquets logiciel impressionnant. Autant utiliser un soft non prévu relève d'une certaine gageure.

Et puis vint le Verbe

C'est vers mes 13/14 ans que j'ai commencé les Jeux de Rôle. Ah ! Advanced Dungeon {{ content }}amp; Dragon (1ère édition). Mon premier Paladin, mon premier anneau d'invisibilité, ma première partie en tant que MD. Et c'est là qu'entre en jeu Amsel-Suite. Parce que préparer une partie, ça se prépare !

Mais hélas, mon OS l'a dans l'os, car seuls un .deb et un .rpm sont disponibles au moment ou j'écris ces lignes (la version 1.6.3).

Comment s'en sort-on ?

  1. NixOs ne supporte pas FHS (Filesystem Hierarchy Standard). Enfin, disons que si on lui demande très gentiment, il peut en quelque sorte l'émuler.
  2. Il y a les Flakes. C'est puissant, et reproductible (voir cet [exemple][]. Et ça permet de se faire son propre package.
  3. Un peu d'aide : je me suis basé sur un message qui indiquait avoir réussi à faire fonctionner Amsel-Suite. Hélas, ma non-maitrise ne m'a pas permis d'y arriver à mon tour.
  4. Au final, je n'ai rien fait. J'ai testé pour la première fois l'usage d'une IA en l'occurence Claude.ai. Il a fallu au moins 25 générations de flake.nix et quelques heures de recherches et de tests, mais il y est arrivé. Je pense que de mon côté, je n'y serais jamais arrivé seul. J'aurais probablement réussi à lancer le launcher de Amsel-SUite, mais pas la récupération et utilisation de Lore et Tome. D'ailleurs, je développe cette partie un peu plus loin, après la solution.

Tu nous la donnes la soluce ?

Oui elle arrive. N'oubliez pas cette solution est en DSSL (comme la LPRAB ou la WTFPL).

  • Créez un répertoire, appelez-le comme vous voulez,
  • Copiez-y la version 1.6.3 de Amsel-Suite au format .deb (dans mon cas amsel-suite_1.6.3_amd64.deb),
  • Créez-y un fichier flake.nix,
  • Remplissez le du code suivant suivant :

    {
      description = "Flake pour Amsel Suite (Ollam Technologies)";
      inputs = {
        nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
      };
      outputs = { self, nixpkgs }:
        let
          system = "x86_64-linux";
          pkgs = import nixpkgs {
            inherit system;
            config.allowUnfree = true;
          };
          # Shims sudo/pkexec dans le nix store
          sudoShim = pkgs.writeShellScriptBin "sudo" ''
            #!/bin/sh
            exec "$@"
          '';
          pkexecShim = pkgs.writeShellScriptBin "pkexec" ''
            #!/bin/sh
            # Ignorer les flags spécifiques à pkexec avant de lancer la commande
            while [ $# -gt 0 ]; do
              case "$1" in
                --disable-internal-agent|--help|--version)
                  shift
                  ;;
                --)
                  shift
                  break
                  ;;
                -*)
                  shift
                  ;;
                *)
                  break
                  ;;
              esac
            done
            exec "$@"
          '';
        in {
          packages.${system}.default = pkgs.stdenv.mkDerivation rec {
            pname = "amsel-suite";
            version = "1.6.3";
            src = ./amsel-suite_1.6.3_amd64.deb;
            nativeBuildInputs = with pkgs; [
              binutils
              zstd
              autoPatchelfHook
              wrapGAppsHook3
              makeWrapper
            ];
            buildInputs = with pkgs; [
              stdenv.cc.cc.lib
              glib
              gsettings-desktop-schemas
              gtk3
              pango
              cairo
              nss
              nspr
              dbus.lib
              at-spi2-atk
              cups.lib
              xorg.libX11
              xorg.libXcomposite
              xorg.libXdamage
              xorg.libXfixes
              xorg.libXrandr
              xorg.libXext
              xorg.libxcb
              libgbm
              libxkbcommon
              alsa-lib
              ffmpeg
              libdrm
              libGL
              udev
              expat
              hicolor-icon-theme
            ];
            dontConfigure = true;
            dontBuild = true;
            unpackPhase = ''
              ar x $src
              tar --no-same-permissions -xf data.tar*
            '';
            fhsEnv = pkgs.buildFHSEnvBubblewrap {
              pname = "${pname}-fhs-env";
              inherit version;
              targetPkgs = pkgs: with pkgs; [
                glib
                gsettings-desktop-schemas
                hicolor-icon-theme
                nss
                nspr
                dbus.lib
                at-spi2-atk
                cups.lib
                gtk3
                pango
                cairo
                xorg.libX11
                xorg.libXcomposite
                xorg.libXdamage
                xorg.libXfixes
                xorg.libXrandr
                libgbm
                xorg.libxcb
                libxkbcommon
                alsa-lib
                ffmpeg
                libdrm
                xorg.libXext
                libGL
                udev
                expat
                stdenv.cc.cc.lib
              ];
                mkdir -p "$HOME/.local/share/amsel-suite/opt"
                mkdir -p "$HOME/.config/launcher"
              '';
              extraBwrapArgs = [
                "--bind $HOME/.local/share/amsel-suite/opt /opt"
                "--bind $HOME/.config/launcher $HOME/.config/launcher"
              ];
              extraEnv = [
                "ELECTRON_DISABLE_SANDBOX=1"
              ];
              runScript = "";
            };
            installPhase = ''
              runHook preInstall
              mkdir -p $out
              cp -r usr $out/
              # Le wrapper principal lance le FHS env avec notre inner script comme argument
              makeWrapper ${fhsEnv}/bin/${pname}-fhs-env $out/usr/lib/amsel-suite/amsel-suite \
                --add-flags "$out/usr/lib/amsel-suite/amsel-suite-inner" \
                "''${gappsWrapperArgs[@]}"
              # On crée le inner script APRÈS makeWrapper pour éviter que wrapGAppsHook3 ne le rewrap
              # Il tourne à l'intérieur du sandbox FHS, force le PATH, puis lance le vrai binaire
              cat {{ content }}gt; $out/usr/lib/amsel-suite/amsel-suite-inner {{ content }}lt;{{ content }}lt; EOF
        #!/bin/sh
        export PATH="${sudoShim}/bin:${pkexecShim}/bin:\$PATH"
        export ELECTRON_DISABLE_SANDBOX=1
        exec "$out/usr/lib/amsel-suite/Amsel Suite" "\$@"
        EOF
              chmod +x $out/usr/lib/amsel-suite/amsel-suite-inner
              rm -f $out/usr/bin/amsel-suite
              ln -s $out/usr/lib/amsel-suite/amsel-suite $out/usr/bin/amsel-suite
              runHook postInstall
            '';
            meta = with pkgs.lib; {
              description = "Launcher pour Amsel Suite par Ollam Technologies";
              homepage = "https://ollam.ai/";
              license = licenses.unfree;
              platforms = [ "x86_64-linux" ];
              maintainers = [];
              sourceProvenance = with sourceTypes; [ binaryNativeCode ];
            };
          };
        };
    }

  • Exécutez la commande suivante : nix build .# (ça peut prendre du temps, la première fois)
  • Faites tourner le bouzin : result/usr/bin/amsel-suite.

C'était quoi les points bloquants ?

  1. L'installation de Tome et Lore En fait, comme je n'ai pas de /opt sur NixOs, l'installation fail assez vite. Du coup, reste plus que strace.
  2. Le manque de documentation C'est le plus gros point noir. Après un strace de tout le launcher et de s'en taper la lecture, on fini par trouver que le launcher veut installer les produit sus-cités dans /opt, mais qu'aussi il utilise pkexec et sudo.

    [pid 96615] execve("/bin/sh", ["/bin/sh", "-c", "cd \"/home/user/T\303\251l\303\251chargements/amsel\"; \"/run/wrappers/bin/pkexec\" --disable-internal-agent /usr/bin/env bash -c \"echo SUDOPROMPT; mv \\"/home/user/.config/launcher/Tome/Tome-linux-x64\\" \\"/opt/Tome\\" {{ content }}amp;{{ content }}amp; chown root:root \\"/opt/Tome/chrome-sandbox\\" {{ content }}amp;{{ content }}amp; sudo chmod 4755 \\"/opt/Tome/chrome-sandbox\\"\""], 0x1724019af000 /* 92 vars */) = 0
    [pid 96615] execve("/run/wrappers/bin/pkexec", ["/run/wrappers/bin/pkexec", "--disable-internal-agent", "/usr/bin/env", "bash", "-c", "echo SUDOPROMPT; mv \"/home/user/.config/launcher/Tome/Tome-linux-x64\" \"/opt/Tome\" {{ content }}amp;{{ content }}amp; chown root:root \"/opt/Tome/chrome-sandbox\" {{ content }}amp;{{ content }}amp; sudo chmod 4755 \"/opt/Tome/chrome-sandbox\""], 0x559c9b58b530 /* 92 vars */) = 0

J'avais oublié que sur d'autres distributions, les instalations se faisaient en tant que root.

  1. Electron et sa sandbox Si j'ai bien tout compris NixOs, chrome-sandbox est inutile; d'ou le ELECTRON_DISABLE_SANDBOX=1.

D'autres informations peut-être ?

Avec plaisir : - Tome {{ content }}amp; Lore sont téléchargés dans ${HOME}/.local/share/amsel-suite/opt/. Attention ça fait plus de 800MiB.

    $ tree -L2 .local/share/amsel-suite/
    .local/share/amsel-suite/
    ├── bin
    │   ├── pkexec
    │   └── sudo
    └── opt
        ├── Lore
        └── Tome
    5 directories, 2 files

  • Lorsque j'ai réussi à installé Tome {{ content }}amp; Lore, il y a eu un message d'erreur qui est apparu dans Amsel-Suite. Balek, ça fonctionne.
  • Les dates sont stockées dans ${HOME}/.amselsuite/.
  • Lorsque la 1.9 est sortie hier, j'ai fait l'update, j'ai de nouveau eu un message d'erreur. De nouveau Balek, ça fonctionne. (Update du 11/02/2026)