@vadi2 Do you have the suggested log file they are asking about?
IIRC The Qt framework will allow for some leeway between the version an application was built with and that being used at run-time - if you can introduce a -v or a --version command line argument into the call that starts the Mudlet application then instead of firing up the full GUI application it will behave like a good little GPL program and dump some useful information including the Qt library version it was built against and that with which it is being asked to run with...
stephen@Ripley:~/src/mudlet/build-mudlet-Desktop_Qt_5_15_2_GCC_64bit-Debug$ ./mudlet --version
mudlet 4.17.2-dev (with debug symbols, without optimisations)
Qt libraries 5.15.2 (compilation) 5.15.2 (runtime)
Copyright © 2008-2023 Mudlet developers
Licence GPLv2+: GNU GPL version 2 or later - http://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
stephen@Ripley:~/src/mudlet/build-mudlet-Desktop_Qt_5_15_2_GCC_64bit-Debug$
@SlySven I don't have them, sorry.
Yes, Qt allows some leeway, but not enough that is being asked here - hence the error. Printing the output of the CLI flags will not work because the issue happens before the binary is run unfortunately.
@vadi2 applications compiled for distribution with Steam on Linux should be compiled against one of the Steam for Linux runtime SDKs. Please consult the documentation for details: https://gitlab.steamos.cloud/steamrt/scout/sdk/-/blob/steamrt/scout/README.md
@TTimo Attempting to walk through the debian install on steamrt/sniper (The more recent release) errors:
PS C:\Users\bubth\Development\Mudlet> docker build -t mudlet-sniper .
[+] Building 7.5s (7/19) docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.70kB 0.0s
=> [internal] load metadata for registry.gitlab.steamos.cloud/steamrt/sniper/sdk:latest 0.5s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> CACHED [ 1/15] FROM registry.gitlab.steamos.cloud/steamrt/sniper/sdk:latest@sha256:e1cd959255625772ed4427f368d2a455e7f360b9e254a42d5c1491898126a3ac 0.0s
=> [internal] load build context 0.5s
=> => transferring context: 820.07kB 0.5s
=> [ 2/15] RUN apt update 3.9s
=> ERROR [ 3/15] RUN apt update && apt install --no-install-recommends -y build-essential git liblua5.1-0-dev zlib1g-dev libhunspell-dev libpcre3-dev libzip-dev libboost-dev libyajl-dev libpulse-dev libsecret-1-dev lua-rex-pcre2 lua-filesystem lua-zip lua-sql-sqli 3.1s
------
> [ 3/15] RUN apt update && apt install --no-install-recommends -y build-essential git liblua5.1-0-dev zlib1g-dev libhunspell-dev libpcre3-dev libzip-dev libboost-dev libyajl-dev libpulse-dev libsecret-1-dev lua-rex-pcre2 lua-filesystem lua-zip lua-sql-sqlite3 qt5-qmake qtmultimedia5-dev qttools5-dev luarocks ccache libpugixml-dev && rm -rf /var/lib/apt/lists/*:
0.490
0.490 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
0.490
0.601 Hit:1 http://security.debian.org/debian-security bullseye-security InRelease
0.601 Hit:2 https://repo.steampowered.com/steamrt3/apt sniper InRelease
0.611 Hit:3 http://deb.debian.org/debian bullseye InRelease
0.691 Hit:4 http://deb.debian.org/debian-debug bullseye-debug InRelease
0.775 Hit:5 http://deb.debian.org/debian-debug bullseye-proposed-updates-debug InRelease
0.947 Reading package lists...
1.677 Building dependency tree...
1.912 Reading state information...
1.938 43 packages can be upgraded. Run 'apt list --upgradable' to see them.
1.941
1.941 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
1.941
1.957 Reading package lists...
2.709 Building dependency tree...
2.951 Reading state information...
3.060 E: Unable to locate package lua-rex-pcre2
------
Dockerfile:10
--------------------
9 |
10 | >>> RUN apt update && apt install --no-install-recommends -y build-essential git liblua5.1-0-dev zlib1g-dev libhunspell-dev libpcre3-dev \
11 | >>> libzip-dev libboost-dev libyajl-dev libpulse-dev libsecret-1-dev lua-rex-pcre2 lua-filesystem lua-zip \
12 | >>> lua-sql-sqlite3 qt5-qmake qtmultimedia5-dev qttools5-dev luarocks ccache libpugixml-dev \
13 | >>> && rm -rf /var/lib/apt/lists/*
14 |
--------------------
ERROR: failed to solve: process "/bin/sh -c apt update && apt install --no-install-recommends -y build-essential git liblua5.1-0-dev zlib1g-dev libhunspell-dev libpcre3-dev libzip-dev libboost-dev libyajl-dev libpulse-dev libsecret-1-dev lua-rex-pcre2 lua-filesystem lua-zip lua-sql-sqlite3 qt5-qmake qtmultimedia5-dev qttools5-dev luarocks ccache libpugixml-dev && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100
PS C:\Users\bubth\Development\Mudlet>
Dockerfile is lifted from the source dockerfile and modified for the debian install recommendations here
Likewise, when attempting to use the scout image instead of the sniper image we've got some missing packages:
PS C:\Users\bubth\Development\Mudlet> docker build -t mudlet-scout .
[+] Building 59.4s (7/19) docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.70kB 0.0s
=> [internal] load metadata for registry.gitlab.steamos.cloud/steamrt/scout/sdk:latest 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> CACHED [ 1/15] FROM registry.gitlab.steamos.cloud/steamrt/scout/sdk:latest 0.0s
=> [internal] load build context 0.6s
=> => transferring context: 820.07kB 0.5s
=> [ 2/15] RUN apt update 39.7s
=> ERROR [ 3/15] RUN apt update && apt install --no-install-recommends -y build-essential git liblua5.1-0-dev zlib1g-dev libhunspell-dev libpcre3-dev libzip-dev libboost-dev libyajl-dev libpulse-dev libsecret-1-dev lua-rex-pcre2 lua-filesystem lua-zip lua-sql-sql 19.6s
------
> [ 3/15] RUN apt update && apt install --no-install-recommends -y build-essential git liblua5.1-0-dev zlib1g-dev libhunspell-dev libpcre3-dev libzip-dev libboost-dev libyajl-dev libpulse-dev libsecret-1-dev lua-rex-pcre2 lua-filesystem lua-zip lua-sql-sqlite3 qt5-qmake qtmultimedia5-dev qttools5-dev luarocks ccache libpugixml-dev && rm -rf /var/lib/apt/lists/*:
0.622
0.622 WARNING: apt does not have a stable CLI interface yet. Use with caution in scripts.
0.622
1.965 Hit https://repo.steampowered.com scout InRelease
1.966 Hit https://repo.steampowered.com precise InRelease
1.969 Ign http://old-releases.ubuntu.com precise InRelease
2.154 Get:1 https://repo.steampowered.com scout/main Sources [180 kB]
2.528 Hit http://old-releases.ubuntu.com precise Release.gpg
2.559 Get:2 https://repo.steampowered.com scout/main amd64 Packages [463 kB]
2.630 Get:3 https://repo.steampowered.com scout/main/debug amd64 Packages [200 kB]
2.661 Get:4 https://repo.steampowered.com scout/main i386 Packages [462 kB]
2.707 Get:5 https://repo.steampowered.com scout/main/debug i386 Packages [200 kB]
2.738 Get:6 https://repo.steampowered.com precise/steam Sources [592 B]
2.775 Get:7 https://repo.steampowered.com precise/steam amd64 Packages [1151 B]
2.805 Get:8 https://repo.steampowered.com precise/steam i386 Packages [1345 B]
2.832 Hit http://old-releases.ubuntu.com precise Release
3.124 Get:9 http://old-releases.ubuntu.com precise/main Sources [1175 kB]
6.219 Get:10 http://old-releases.ubuntu.com precise/restricted Sources [5306 B]
6.520 Get:11 http://old-releases.ubuntu.com precise/universe Sources [6239 kB]
8.253 Get:12 http://old-releases.ubuntu.com precise/multiverse Sources [188 kB]
9.097 Get:13 http://old-releases.ubuntu.com precise/main amd64 Packages [1640 kB]
12.89 Get:14 http://old-releases.ubuntu.com precise/restricted amd64 Packages [9098 B]
13.05 Get:15 http://old-releases.ubuntu.com precise/universe amd64 Packages [6167 kB]
13.94 Get:16 http://old-releases.ubuntu.com precise/multiverse amd64 Packages [152 kB]
14.33 Get:17 http://old-releases.ubuntu.com precise/main i386 Packages [1641 kB]
15.01 Get:18 http://old-releases.ubuntu.com precise/restricted i386 Packages [9108 B]
15.15 Get:19 http://old-releases.ubuntu.com precise/universe i386 Packages [6180 kB]
16.05 Get:20 http://old-releases.ubuntu.com precise/multiverse i386 Packages [155 kB]
16.47 Fetched 25.1 MB in 14s (1693 kB/s)
16.47 Reading package lists...
17.76 Building dependency tree...
17.90 Reading state information...
17.94 All packages are up to date.
17.95
17.95 WARNING: apt does not have a stable CLI interface yet. Use with caution in scripts.
17.95
18.11 Reading package lists...
19.38 Building dependency tree...
19.53 Reading state information...
19.60 E: Unable to locate package libsecret-1-dev
19.60 E: Unable to locate package lua-rex-pcre2
19.60 E: Unable to locate package lua-filesystem
19.60 E: Unable to locate package lua-zip
19.60 E: Unable to locate package lua-sql-sqlite3
19.60 E: Unable to locate package qt5-qmake
19.60 E: Unable to locate package qtmultimedia5-dev
19.60 E: Unable to locate package qttools5-dev
19.60 E: Unable to locate package libpugixml-dev
------
Dockerfile:10
--------------------
9 |
10 | >>> RUN apt update && apt install --no-install-recommends -y build-essential git liblua5.1-0-dev zlib1g-dev libhunspell-dev libpcre3-dev \
11 | >>> libzip-dev libboost-dev libyajl-dev libpulse-dev libsecret-1-dev lua-rex-pcre2 lua-filesystem lua-zip \
12 | >>> lua-sql-sqlite3 qt5-qmake qtmultimedia5-dev qttools5-dev luarocks ccache libpugixml-dev \
13 | >>> && rm -rf /var/lib/apt/lists/*
14 |
--------------------
ERROR: failed to solve: process "/bin/sh -c apt update && apt install --no-install-recommends -y build-essential git liblua5.1-0-dev zlib1g-dev libhunspell-dev libpcre3-dev libzip-dev libboost-dev libyajl-dev libpulse-dev libsecret-1-dev lua-rex-pcre2 lua-filesystem lua-zip lua-sql-sqlite3 qt5-qmake qtmultimedia5-dev qttools5-dev luarocks ccache libpugixml-dev && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100
PS C:\Users\bubth\Development\Mudlet>
I resorted to the sniper image as the base and walked through the debian install and this is where I'm at:
FROM registry.gitlab.steamos.cloud/steamrt/sniper/sdk
ARG DEBIAN_FRONTEND=noninteractive
# This breaks stuff, even though it's the "right" way to install lua-rex-pcre2 - I'm not familiar enough
# with apt sources to limit the package updates only to lua-rex-pcre2 for these, so it ended up breaking
# more things than it solved.
# Add bookworm main so we can install lua-rex-pcre2 from https://packages.debian.org/sid/lua-rex-pcre2
# RUN echo 'deb http://ftp.us.debian.org/debian bookworm main' >> /etc/apt/sources.list
# RUN gpg --keyserver keyserver.ubuntu.com --recv-keys 0E98404D386FA1D9 6ED0E7B82643E131
# RUN gpg --armor --export 0E98404D386FA1D9 | sudo apt-key add -
# RUN gpg --armor --export 6ED0E7B82643E131 | sudo apt-key add -
RUN apt update
RUN apt update && apt install --no-install-recommends -y build-essential git liblua5.1-0-dev zlib1g-dev libhunspell-dev libpcre3-dev \
libzip-dev libboost-dev libyajl-dev libpulse-dev libsecret-1-dev lua-filesystem lua-zip libqt5opengl5-dev \
lua-sql-sqlite3 qt5-qmake qtmultimedia5-dev qttools5-dev luarocks ccache libpugixml-dev \
&& rm -rf /var/lib/apt/lists/*
# Easy awy to validate that we can get things working by just manually installing lua-rex-pcre2 but
# this isn't an ideal way to manage this package since it involves downloading it directly instead
# of letting apt take care of things like amd64 vs. arm64, etc. - for now it will let us see if we
# can actually build things on the steam SDK container with sniper.
RUN wget http://ftp.us.debian.org/debian/pool/main/l/lua-rexlib/lua-rex-pcre2_2.9.1-2+b1_amd64.deb
RUN apt install -y ./lua-rex-pcre2_2.9.1-2+b1_amd64.deb
RUN luarocks install luautf8
RUN luarocks install lua-yajl
RUN luarocks install lrexlib-pcre
# Without this, clang-tidy/format doesn't find the correct c++ headers
ENV CPLUS_INCLUDE_PATH="${CPLUS_INCLUDE_PATH:+${CPLUS_INCLUDE_PATH}:}/usr/lib/gcc/x86_64-linux-gnu/9/include"
RUN useradd -ms /bin/bash mudlet
WORKDIR /home/mudlet
COPY . .
WORKDIR /home/mudlet/src
RUN qmake
RUN make -j 8
RUN make install
CMD ["build/src/mudlet"]
UPDATE: I was able to get this to successfully build - and the Qt version that it would be using looks to be Qt version 5.15.2 if you're building with the steam client. I don't have things set up to fake the display so that it will actually run
(steamrt sniper 0.20240321.82093)root@c0e36b852aec:/home/mudlet/src# qmake --version
QMake version 3.1
Using Qt version 5.15.2 in /usr/lib/x86_64-linux-gnu
When running it, it errors because the containers can't find the DISPLAY to send output to - there are some hacks for this but I haven't had time to try and get any of them working yet:
(steamrt sniper 0.20240321.82093)root@fd526a1f6b75:/home/mudlet/src# mudlet
qt.qpa.xcb: could not connect to display
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.
Aborted
(steamrt sniper 0.20240321.82093)root@fd526a1f6b75:
@bubthegreat Great stuff! Glad you got the build working. Could you try using https://github.com/Mudlet/installers/blob/master/generic-linux/make-installer.sh to put together an AppImage? Hopefully such an AppImage, when launched through the Steam environment, will pick up all of the libraries needed.
These issues all look quite specific to the Mudlet build setup. If you can identify things that are buggy or missing in the sniper sdk we'd be happy to look into it.
Note that you are not expected to be able to run your game binaries in a docker container of the sdk. You need to use the runtime for that.
In order to run the binaries in sniper you have a few options, I'd probably recommend adding a non-steam shortcut to steam, configuring it to use the sniper runtime and running it that way so you have the complete Steam environment.
Another way from the CLI is to use the run-in-sniper script that you'll find in ~/.steam/steam/steamapps/common/SteamLinuxRuntime_sniper/
@TTimo I believe the only package that was missing from the sniper image that wasn't available is the lua-rex-pcre2 package. It doesn't look like the sources have any packages for this, so I had to add this manually.
RUN wget http://ftp.us.debian.org/debian/pool/main/l/lua-rexlib/lua-rex-pcre2_2.9.1-2+b1_amd64.deb
RUN apt install -y ./lua-rex-pcre2_2.9.1-2+b1_amd64.deb
Is there an expected package resolution method you'd suggest? When I added debian main to /etc/apt/sources.list we ended up getting incompatible versions that couldn't be installed, so I have to assume the existing sources.list is a set of predefined packages - when those don't have the expected software what's the recommended way of isolating the packages needed?
We can just snag it from the ftp, but that feels too brittle for long term builds or will require additional logic for snagging the packages consistently for the right versions and the right architectures.
Will take a stab at the run-in-sniper once I have a linux distro up and running in a real VM.
Sniper is based on Debian 11, which has lua-rex-pcre (2.7.2-4.1). Ideally you'd want to use that. (https://packages.debian.org/bullseye/lua-rex-pcre)
Debian 12, (bookworm, the next one over) has lua-rex-pcre2 (2.9.1-2). (https://packages.debian.org/bookworm/lua-rex-pcre2)
It looks like that's what you are trying to use, you probably need to backport it in some way. Depending on your level of proficiency with Debian package management, that can get a little tricky (that's why using the bookworm version directly is preferable).
lua-rex-pcre should be fine to use.
Nothing extracted yet.
Your system information
tar -zcvf ~/Desktop/steam-logs.tar.gz ~/.steam/steam/logs]Please describe your issue in as much detail as possible:
We're looking to list a new Qt-based application on Steam and it is consistently failing with
undefined symbol: _ZdlPvm, version Qt_5both when running via an AppImage or when launching natively. A web search shows that the cause of this is a mismatch between the compiled Qt version and the Qt version available at runtime.Is Steam changing the Qt version available at runtime somehow here? Can we avoid this?
Steps for reproducing this issue:
Additional notes
Running the Windows via Proton does solve the issue.