v2.48.6 makes Signal crash on aarch64 (v2.48.4 works)
Closed this issue ยท 17 comments
I am on Asahi Linux (Arch Linux Arm), running signal-desktop-beta since 2,5 years without any problems.
Signal v7.32.0-beta.1 still worked.
Signal v7.33.0-beta.1 started to crash on startup.
Between those two beta releases ringrtc was upgraded from 2.48.3 to 2.48.6.
Let's find out: If I built the latest beta from yesterday (v7.34.0-beta.2
) with ringrtc downgraded to ringrtc 2.48.4 signal beta works. If I keep 2.48.6 it crashes.
So something in this diff v2.48.4...v2.48.6 causes a crash.
For the record: The Asahi linux is basically just Arch Linux ARM (aarch64) with a 16kb kernel page size if this is relevant:
$ getconf PAGESIZE
16384
Do you know whats going on?
Finally, the crash:
$ signal-desktop-beta
signal-desktop-beta: /usr/lib/libxkbcommon.so.0: no version information available (required by signal-desktop-beta)
/usr/lib/signal-desktop-beta/signal-desktop-beta: /usr/lib/libxkbcommon.so.0: no version information available (required by /usr/lib/signal-desktop-beta/signal-desktop-beta)
/usr/lib/signal-desktop-beta/signal-desktop-beta: /usr/lib/libxkbcommon.so.0: no version information available (required by /usr/lib/signal-desktop-beta/signal-desktop-beta)
Set Windows Application User Model ID (AUMID) { AUMID: 'org.whispersystems.signal-desktop-beta' }
NODE_ENV production
NODE_CONFIG_DIR /usr/lib/signal-desktop-beta/resources/app.asar/config
NODE_CONFIG {}
ALLOW_CONFIG_MUTATIONS undefined
HOSTNAME mkurz-macbook-pro
NODE_APP_INSTANCE undefined
SUPPRESS_NO_CONFIG_WARNING undefined
SIGNAL_ENABLE_HTTP undefined
userData: /home/mkurz/.config/Signal Beta
config/get: Successfully read user config file
config/get: Successfully read ephemeral config file
getLogger: Logger not yet initialized!
crashReporter: enabled
making app single instance
Unhandled Error: Error: /usr/lib/signal-desktop-beta/resources/app.asar.unpacked/node_modules/@signalapp/ringrtc/build/linux/libringrtc-arm64.node: undefined symbol: pulse_rust_init
at process.func [as dlopen] (node:electron/js2c/node_init:2:2559)
at Module._extensions..node (node:internal/modules/cjs/loader:1602:18)
at Object.func [as .node] (node:electron/js2c/node_init:2:2786)
at Module.load (node:internal/modules/cjs/loader:1295:32)
at Module._load (node:internal/modules/cjs/loader:1111:12)
at c._load (node:electron/js2c/node_init:2:16955)
at Module.require (node:internal/modules/cjs/loader:1318:19)
at require (node:internal/modules/helpers:179:18)
at Object.<anonymous> (/usr/lib/signal-desktop-beta/resources/app.asar/node_modules/@signalapp/ringrtc/dist/ringrtc/Native.js:33:19)
at Module._compile (node:internal/modules/cjs/loader:1484:14)
Unhandled Error: Error: /usr/lib/signal-desktop-beta/resources/app.asar.unpacked/node_modules/@signalapp/ringrtc/build/linux/libringrtc-arm64.node: undefined symbol: pulse_rust_init
at process.func [as dlopen] (node:electron/js2c/node_init:2:2559)
at Module._extensions..node (node:internal/modules/cjs/loader:1602:18)
at Object.func [as .node] (node:electron/js2c/node_init:2:2786)
at Module.load (node:internal/modules/cjs/loader:1295:32)
at Module._load (node:internal/modules/cjs/loader:1111:12)
at c._load (node:electron/js2c/node_init:2:16955)
at Module.require (node:internal/modules/cjs/loader:1318:19)
at require (node:internal/modules/helpers:179:18)
at Object.<anonymous> (/usr/lib/signal-desktop-beta/resources/app.asar/node_modules/@signalapp/ringrtc/dist/ringrtc/Native.js:33:19)
at Module._compile (node:internal/modules/cjs/loader:1484:14)
Unhandled Error
Error: /usr/lib/signal-desktop-beta/resources/app.asar.unpacked/node_modules/@signalapp/ringrtc/build/linux/libringrtc-arm64.node: undefined symbol: pulse_rust_init
at process.func [as dlopen] (node:electron/js2c/node_init:2:2559)
at Module._extensions..node (node:internal/modules/cjs/loader:1602:18)
at Object.func [as .node] (node:electron/js2c/node_init:2:2786)
at Module.load (node:internal/modules/cjs/loader:1295:32)
at Module._load (node:internal/modules/cjs/loader:1111:12)
at c._load (node:electron/js2c/node_init:2:16955)
at Module.require (node:internal/modules/cjs/loader:1318:19)
at require (node:internal/modules/helpers:179:18)
at Object.<anonymous> (/usr/lib/signal-desktop-beta/resources/app.asar/node_modules/@signalapp/ringrtc/dist/ringrtc/Native.js:33:19)
at Module._compile (node:internal/modules/cjs/loader:1484:14)
Note: Until making app single instance
the log is 1:1 the same also if signal does not crash with 2.48.4)
I'm running into the same issue with the latest Signal 7.33.0 which was released yesterday. Getting the same error on Ubuntu 22.04 arm64 (CI logs here):
ERROR: /home/circleci/project/node_modules/@signalapp/ringrtc/build/linux/libringrtc-arm64.node: undefined symbol: pulse_rust_init
This is easy to reproduce:
- Clone https://github.com/signalapp/Signal-Desktop/releases/tag/v7.33.0 on an arm64 Ubuntu 22.04 instance
- Run
npm install && npm run build --publish=never
- Run
npm run test-node
- Error shows up
Good to know I am not alone.
Another report (they downgraded to 2.48.4 as a workaround meanwhile):
What happens if you try installing the libpulse0
package? I believe that could be the issue; probably something wasn't declared quite correctly in our package.json.
(Edit: You may also need something that provides the pulse interface -- e.g. pipewire-pulse -- in the future, but we haven't turned that on yet.)
Oh, wait a sec... I misread the error; if it's specifically pulse_rust_init
that's not found, that's a different link error, and one I need to investigate a bit.
I suspect there is a bug in a dependency we're linking against when cross-compiling for aarch64 linux on an x64 linux box (which is how we produce the aarch64 build of ringrtc), and I have a theory of what the bug is.
I do not have an aarch64 linux device at hand, so it's a bit challenging to test, but I will try to see if any colleagues have one.
I maintain the openSUSE package and i think i know what the problem is. Since we build w/o internet access, this manifested early as a build error instead of producing a corrupt binary.
See mozilla/cubeb-rs#109 for an explanation and possible workaround.
I believe that's a separate issue; I think the problem here is that we don't have the arm64 pulse library available when building.
No, it's exactly that issue. pulse_rust_init comes from https://github.com/mozilla/cubeb-pulse-rs which is missing when building offline, and broken in subtle ways when building online.
fyi, if it matters somehow, I do have libpulse
and pipewire-pulse
installed:
click to expand
$ pacman -Q | grep -iE 'libpulse|pipewire-pulse'
libpulse 17.0-3
pipewire-pulse 1:1.2.6-1
$ pacman -Ql libpulse
libpulse /etc/
libpulse /etc/pulse/
libpulse /etc/pulse/client.conf
libpulse /usr/
libpulse /usr/bin/
libpulse /usr/bin/pacat
libpulse /usr/bin/pactl
libpulse /usr/bin/padsp
libpulse /usr/bin/pamon
libpulse /usr/bin/paplay
libpulse /usr/bin/parec
libpulse /usr/bin/parecord
libpulse /usr/include/
libpulse /usr/include/pulse/
libpulse /usr/include/pulse/cdecl.h
libpulse /usr/include/pulse/channelmap.h
libpulse /usr/include/pulse/context.h
libpulse /usr/include/pulse/def.h
libpulse /usr/include/pulse/direction.h
libpulse /usr/include/pulse/error.h
libpulse /usr/include/pulse/ext-device-manager.h
libpulse /usr/include/pulse/ext-device-restore.h
libpulse /usr/include/pulse/ext-stream-restore.h
libpulse /usr/include/pulse/format.h
libpulse /usr/include/pulse/gccmacro.h
libpulse /usr/include/pulse/glib-mainloop.h
libpulse /usr/include/pulse/introspect.h
libpulse /usr/include/pulse/mainloop-api.h
libpulse /usr/include/pulse/mainloop-signal.h
libpulse /usr/include/pulse/mainloop.h
libpulse /usr/include/pulse/operation.h
libpulse /usr/include/pulse/proplist.h
libpulse /usr/include/pulse/pulseaudio.h
libpulse /usr/include/pulse/rtclock.h
libpulse /usr/include/pulse/sample.h
libpulse /usr/include/pulse/scache.h
libpulse /usr/include/pulse/simple.h
libpulse /usr/include/pulse/stream.h
libpulse /usr/include/pulse/subscribe.h
libpulse /usr/include/pulse/thread-mainloop.h
libpulse /usr/include/pulse/timeval.h
libpulse /usr/include/pulse/utf8.h
libpulse /usr/include/pulse/util.h
libpulse /usr/include/pulse/version.h
libpulse /usr/include/pulse/volume.h
libpulse /usr/include/pulse/xmalloc.h
libpulse /usr/lib/
libpulse /usr/lib/cmake/
libpulse /usr/lib/cmake/PulseAudio/
libpulse /usr/lib/cmake/PulseAudio/PulseAudioConfig.cmake
libpulse /usr/lib/cmake/PulseAudio/PulseAudioConfigVersion.cmake
libpulse /usr/lib/libpulse-mainloop-glib.so
libpulse /usr/lib/libpulse-mainloop-glib.so.0
libpulse /usr/lib/libpulse-mainloop-glib.so.0.0.6
libpulse /usr/lib/libpulse-simple.so
libpulse /usr/lib/libpulse-simple.so.0
libpulse /usr/lib/libpulse-simple.so.0.1.1
libpulse /usr/lib/libpulse.so
libpulse /usr/lib/libpulse.so.0
libpulse /usr/lib/libpulse.so.0.24.3
libpulse /usr/lib/pkgconfig/
libpulse /usr/lib/pkgconfig/libpulse-mainloop-glib.pc
libpulse /usr/lib/pkgconfig/libpulse-simple.pc
libpulse /usr/lib/pkgconfig/libpulse.pc
libpulse /usr/lib/pulseaudio/
libpulse /usr/lib/pulseaudio/libpulsecommon-17.0.so
libpulse /usr/lib/pulseaudio/libpulsedsp.so
libpulse /usr/share/
libpulse /usr/share/bash-completion/
libpulse /usr/share/bash-completion/completions/
libpulse /usr/share/bash-completion/completions/pacat
libpulse /usr/share/bash-completion/completions/pactl
libpulse /usr/share/bash-completion/completions/padsp
libpulse /usr/share/bash-completion/completions/paplay
libpulse /usr/share/bash-completion/completions/parec
libpulse /usr/share/bash-completion/completions/parecord
libpulse /usr/share/bash-completion/completions/pulseaudio
libpulse /usr/share/man/
libpulse /usr/share/man/man1/
libpulse /usr/share/man/man1/pacat.1.gz
libpulse /usr/share/man/man1/pactl.1.gz
libpulse /usr/share/man/man1/padsp.1.gz
libpulse /usr/share/man/man1/pamon.1.gz
libpulse /usr/share/man/man1/paplay.1.gz
libpulse /usr/share/man/man1/parec.1.gz
libpulse /usr/share/man/man1/parecord.1.gz
libpulse /usr/share/man/man5/
libpulse /usr/share/man/man5/pulse-client.conf.5.gz
libpulse /usr/share/vala/
libpulse /usr/share/vala/vapi/
libpulse /usr/share/vala/vapi/libpulse-mainloop-glib.deps
libpulse /usr/share/vala/vapi/libpulse-mainloop-glib.vapi
libpulse /usr/share/vala/vapi/libpulse-simple.deps
libpulse /usr/share/vala/vapi/libpulse-simple.vapi
libpulse /usr/share/vala/vapi/libpulse.deps
libpulse /usr/share/vala/vapi/libpulse.vapi
libpulse /usr/share/zsh/
libpulse /usr/share/zsh/site-functions/
libpulse /usr/share/zsh/site-functions/_pulseaudio
per mozilla/cubeb-rs#109 (comment) upgradeing to cubeb-sys 0.17.1 should fix that (I haven't checked)
It's even more broken as it will need severe downstream patches rather than a manual vendor step, see my comment below. Avoid 0.17.1 for now
I have a local patch that fixes the aarch64 crash. The offline build issue is separate.
The problem with aarch64 in general is that cubeb-rs's cubeb-sys/build.rs only builds cubeb-pulse-rs if it finds the pulse library for the target architecture, and the cross-compilation setup we have did not install that library for arm64. My local patch uses an arm runner to build instead of cross-compiling, and I've verified locally (in a linux arm VM) that this fixes the crash.
v2.48.7 will fix this once it is integrated into Desktop (there's an unrelated API change that requires a matching change in the Desktop client).
Desktop release won't be until next week at this point, but in case you manually want to test with 2.48.7, the relevant API change patch will look roughly like:
diff --git a/ts/services/calling.ts b/ts/services/calling.ts
index 0448247c0..008073009 100644
--- a/ts/services/calling.ts
+++ b/ts/services/calling.ts
@@ -7,6 +7,7 @@ import type {
CallId,
DeviceId,
GroupCallObserver,
+ SpeechEvent,
PeekInfo,
UserId,
VideoFrameSource,
@@ -1478,6 +1479,9 @@ export class CallingClass {
endedReason,
});
},
+ onSpeechEvent: (_groupCall: GroupCall, event: SpeechEvent) => {
+ log.info('GroupCall#onSpeechEvent', event);
+ },
};
}
I am also experiencing this bug
I can confirm using the patch and v2.48.7 does fix the problem for me as well
Signal Desktop 7.34.0-beta.3 has the relevant changes.
7.34.0-beta.3 works for me again, thanks!