Getting CEWE Fotobuch to launch

I am struggling hard to get CEWE Fotobuch (a proprietary software to layout and order printed photo albums) to run on NixOS. Yes, it’s “proprietary garbage” as Tony would put it, please no discussions whether it’s good to use it or not. :slightly_smiling_face:

It can be downloaded from this landing page, or the tarball directly from here. Apparently, there is only this one tarball link, which always points to the latest version, there are no stable links to old versions as confirmed in this thread. It contains a install.pl script, which can be executed with perl install.pl (not ./install.pl due to DOS line endings!?) and by default it’ll put and download files into ~/CEWE (ugh…). It seems to be somewhat scriptable as its --help documents a --installDir option. A .desktop file is put in ~/.local/share/applications, but of course it doesn’t launch due to missing libraries. With some ldd I was able to pinpoint the missing libraries:

❯ ldd ~/CEWE/CEWE\ Fotowelt/CEWE\ Fotowelt &| grep found | sort -u
        libbrotlidec.so.1 => not found
        libdbus-1.so.3 => not found
        libdrm.so.2 => not found
        libEGL.so.1 => not found
        libexpat.so.1 => not found
        libfontconfig.so.1 => not found
        libfreetype.so.6 => not found
        libgbm.so.1 => not found
        libglib-2.0.so.0 => not found
        libGLX.so.0 => not found
        libgomp.so.1 => not found
        liblzma.so.5 => not found
        libnspr4.so => not found
        libnss3.so => not found
        libnssutil3.so => not found
        libOpenGL.so.0 => not found
        libpng16.so.16 => not found
        libsmime3.so => not found
        libstdc++.so.6 => not found
        libX11.so.6 => not found
        libxcb.so.1 => not found
        libXext.so.6 => not found
        libxkbcommon.so.0 => not found
        libxkbfile.so.1 => not found
        libz.so.1 => not found

Now the farthest I was able to push it was to use nix-ld like this:

  programs = {
    nix-ld = {
      enable = true;
      libraries = with pkgs; [
        stdenv.cc.cc.lib
        zlib
        file
        fontconfig # for libfontconfig
        libGL # for libEGL
        libx11 # for libX11
        glib # for libglib2.0.so
        libdrm # for libdrm.so
        expat # for libexpat.so
        freetype # for libfreetype.so
        libpng # for libpng16.so
        nss # for libnss3.so
        nspr # for libnspr4.so
        brotli # for libbrotlidec.so
        dbus # for libdbus
        libxcb # for libxcb.so
        libxext # for libXext.so
        libgbm # for libgbm.so
        libxkbfile # for libxkbfile.so
        xorg.libxcb
        xorg.xcbutilwm
        xorg.xcbutilimage
        xorg.xcbutilkeysyms
        xorg.xcbutilrenderutil
        xcb-util-cursor
        libxkbcommon # for libxkbcommon.so
      ];
    };
  };

Launching ./CEWE\ Fotowelt in ~/CEWE/CEWE Fotowelt then opens a loading screen

and these logs

"Using resource path: /home/yann/CEWE/CEWE Fotowelt/Resources"
I (2025-12-05T00:09:31.393) [void CWLogMessageHandler::writeLogHeader() 263] ==> Compiled: Oct 29 2025 12:49:13 <==
[1205/000932.685882:WARNING:resource_bundle_qt.cpp(83)] locale_file_path.empty() for locale 
The following paths were searched for Qt WebEngine locales:
  /home/yann/CEWE/CEWE Fotowelt/translations/qtwebengine_locales
  /home/yann/.QtWebEngineProcess
but could not find the translation file for the current locale: en-US.pak
You may override the default search paths by using QTWEBENGINE_LOCALES_PATH environment variable.
Translations WILL NOT be correct.
Path override failed for key base::DIR_APP_DICTIONARIES and path '/home/yann/CEWE/CEWE Fotowelt/qtwebengine_dictionaries'
[1205/000932.711788:WARNING:resource_bundle_qt.cpp(83)] locale_file_path.empty() for locale 
The following paths were searched for Qt WebEngine locales:
  /home/yann/CEWE/CEWE Fotowelt/translations/qtwebengine_locales
  /home/yann/.QtWebEngineProcess
but could not find the translation file for the current locale: en-US.pak
You may override the default search paths by using QTWEBENGINE_LOCALES_PATH environment variable.
Translations WILL NOT be correct.
Path override failed for key base::DIR_APP_DICTIONARIES and path '/home/yann/CEWE/CEWE Fotowelt/qtwebengine_dictionaries'
[1205/000932.714686:WARNING:resource_bundle_qt.cpp(83)] locale_file_path.empty() for locale 

but nothing else happens. Prepending strace ends up at an infinite amount of

ppoll([{fd=6, events=POLLIN}, {fd=29, events=POLLIN}, {fd=114, events=POLLIN}], 3, {tv_sec=0, tv_nsec=0}, NULL, 8) = 0 (Timeout)

A buildFHSEnv with the same packages as above doesn’t open that window, but eventually errors out:

❯ ./CEWE\ Fotowelt
"Using resource path: /home/yann/CEWE/CEWE Fotowelt/Resources"
I (2025-12-05T00:14:52.880) [void CWLogMessageHandler::writeLogHeader() 263] ==> Compiled: Oct 29 2025 12:49:13 <==
[1205/001454.163849:WARNING:resource_bundle_qt.cpp(83)] locale_file_path.empty() for locale 
The following paths were searched for Qt WebEngine locales:
  /home/yann/CEWE/CEWE Fotowelt/translations/qtwebengine_locales
  /home/yann/.QtWebEngineProcess
but could not find the translation file for the current locale: en-US.pak
You may override the default search paths by using QTWEBENGINE_LOCALES_PATH environment variable.
Translations WILL NOT be correct.
Path override failed for key base::DIR_APP_DICTIONARIES and path '/home/yann/CEWE/CEWE Fotowelt/qtwebengine_dictionaries'
[1205/001454.188639:WARNING:resource_bundle_qt.cpp(83)] locale_file_path.empty() for locale 
The following paths were searched for Qt WebEngine locales:
  /home/yann/CEWE/CEWE Fotowelt/translations/qtwebengine_locales
  /home/yann/.QtWebEngineProcess
but could not find the translation file for the current locale: en-US.pak
You may override the default search paths by using QTWEBENGINE_LOCALES_PATH environment variable.
Translations WILL NOT be correct.
Path override failed for key base::DIR_APP_DICTIONARIES and path '/home/yann/CEWE/CEWE Fotowelt/qtwebengine_dictionaries'
[1205/001454.192146:WARNING:resource_bundle_qt.cpp(83)] locale_file_path.empty() for locale 
fish: Job 1, './CEWE\ Fotowelt' terminated by signal SIGTRAP (Aufzeichnungs- oder Haltepunkt erreicht)

SIGTRAP. Aha. I didn’t even bother trying to write a derivation for this thing. :face_exhaling:

Concerning the locale warnings, an LLM (sorry…) suggested this, which of course didn’t help:

export QTWEBENGINE_LOCALES_PATH=$(nix build --no-link nixpkgs#qt6.qtwebengine --print-out-paths)/resources/qtwebengine_locales
export QTWEBENGINE_DICTIONARIES_PATH=$(nix build --no-link nixpkgs#qt6.qtwebengine --print-out-paths)/resources/qtwebengine_dictionaries

The .desktop file actually launches ./CEWE Fotoschau, not ./CEWE Fotowelt, but ./CEWE Fotoschau doesn’t even open the loading window.

EDIT: steam-run (from nixpkgs.steam-run-free) has it error out due to a missing libnss3 or something similar IIRC).

I don’t really know what to do now, any pointers are appreciated. Ideally, I’d like a proper reproducible derivation, probably with an FHSEnv if necessary, but anything that gets this beast to run - preferably natively - is good for now. I guess distrobox, apptainers might work somehow, or even a full-blown VM of something like Linux Mint, but I feel this should definitely be possible on NixOS natively.

Thanks in advance!

1 Like

The install script downloads an index file with the actual files to download. The index file is a CSV that marks the referenced resources as “a” for all platforms, or w64/l64/l32 for platform specific resources (so in your case, you’d want to fetch all “a” and “l64” files). To properly package this, I’d try to replicate what the installer is doing, instead of using the installer directly. Fetch all required files referenced by the index (fetch and process the index itself in a preprocessing step outside nix / update script, to not introduce an IFD) and extract them to your package’s output. Fix the library references through autoPatchelfHook (or manual patchelf where required).

1 Like

Thanks, that is a good approach for putting it in a derivation. I don’t know if libraries are the problem though, as I already found all of them but it was not enough to get it working, as described above. But maybe making a proper derivation is the way to go.

Welcome: https://gist.github.com/woffs/f35dc893cc1af9ad06c67d4d152052f4

1 Like

updated für recent 8.0.5 and nixos-25.11: https://gist.github.com/woffs/610b44b7f19616ffe351cb6ba7426b6e

steps to install:

  • download software from https://www.fotoparadies.de/bestellsoftware/download.html
  • unpack tgz
  • run perl install.pl
  • copy dm-Fotowelt-8.0.5.nix as default.nix into directory where dm-Fotowelt was installed
  • nix-build
  • ./result/bin/dm-fotowelt
  • optionally nix profile add ./result or whatever you want

did it like that since version 6.0, 5 years ago, adapting and growing the FHSEnv more or less everytime

2 Likes

Interesting. dm Fotowelt just works with my nix-ld setup from above. Or with your FHS setup there. But the original CEWE Fotobuch app doesn’t launch properly, it hangs during loading. It’s the same base software I guess so probably doesn’t matter. Thanks for the hint to use the dm version.