Lavalink
Lavalink copied to clipboard
Add arm64 build(s) for Docker
Description
When attempting to run the master branch docker image on an ARM machine (M1 SoC) I encountered the following issue: https://github.com/docker/for-mac/issues/5123
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
After reading through the issue I tried building an image for arm64/aarch64 by following the example in this repo. I had managed to launch the image by using the slim
version of the arm64v8/openjdk image.
FROM arm64v8/openjdk:slim
# Run as non-root user
RUN groupadd -g 322 lavalink && \
useradd -r -u 322 -g lavalink lavalink
USER lavalink
WORKDIR /opt/Lavalink
COPY Lavalink.jar Lavalink.jar
ENTRYPOINT ["java", "-Djdk.tls.client.protocols=TLSv1.1,TLSv1.2", "-Xmx4G", "-jar", "Lavalink.jar"]
It runs OpenJDK 16 while the image in this repo seems to use OpenJDK 13. I couldn't find a tag with OpenJDK 13 at arm64v8/openjdk. Honestly I have close to 0 experience with Java so I'm not sure what could be the consequences, which is why I decided to open this issue instead of trying to make a pull request.
When running the image I do get the following warning:
2021-06-03 09:12:07.409 INFO 1 --- [ main] lavalink.server.config.KoeConfiguration : OS: Linux, Arch: aarch64
2021-06-03 09:12:07.409 WARN 1 --- [ main] lavalink.server.config.KoeConfiguration : This system and architecture appears to not support native audio sending! GC pauses may cause your bot to stutter during playback.
But I guess that's still better than not being able to run it completely. I haven't managed to test audio playback on my bot yet, but I'll make sure to post here when I do. It doesn't really matter even if it stutters since I will only be running Lavalink on this ARM machine while developing. I doubt anyone will be actually running lavalink in production on an ARM chip anytime soon so this shouldn't be a problem anyway.
Okay so I actually tried playing something and I'm getting the following error:
2021-06-03 11:40:28.268 INFO 1 --- [back-1-thread-1] c.s.l.c.natives.NativeLibraryLoader : Native library libmpg123-0: loading with filter com.sedmelluq.discord.lavaplayer.natives.ConnectorNativeLibLoader$$Lambda$582/0x0000000801295d28@4016f0f7
2021-06-03 11:40:28.270 INFO 1 --- [back-1-thread-1] c.s.l.c.natives.NativeLibraryLoader : Native library connector: loading with filter null
2021-06-03 11:40:28.272 ERROR 1 --- [back-1-thread-1] c.s.l.c.natives.NativeLibraryLoader : Native library connector: loading failed.
java.lang.UnsatisfiedLinkError: Required library was not found
And a big ass backtrace
at com.sedmelluq.lava.common.natives.NativeLibraryLoader.extractLibraryFromResources(NativeLibraryLoader.java:125) ~[lava-common-1.1.2.jar!/:na]at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadInternal(NativeLibraryLoader.java:110) ~[lava-common-1.1.2.jar!/:na]
at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadWithFailureCheck(NativeLibraryLoader.java:84) ~[lava-common-1.1.2.jar!/:na]
at com.sedmelluq.lava.common.natives.NativeLibraryLoader.load(NativeLibraryLoader.java:69) ~[lava-common-1.1.2.jar!/:na]
at com.sedmelluq.discord.lavaplayer.natives.ConnectorNativeLibLoader.loadConnectorLibrary(ConnectorNativeLibLoader.java:21) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.natives.opus.OpusDecoderLibrary.getInstance(OpusDecoderLibrary.java:13) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.natives.opus.OpusDecoder.
(OpusDecoder.java:20) ~[lavaplayer-1.3.76.jar!/:na] at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.initialiseDecoder(OpusPacketRouter.java:193) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.checkDecoderNecessity(OpusPacketRouter.java:177) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.process(OpusPacketRouter.java:93) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaOpusTrackConsumer.consume(MatroskaOpusTrackConsumer.java:46) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.processFrameInBlock(MatroskaStreamingFile.java:371) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.parseClusterSimpleBlock(MatroskaStreamingFile.java:335) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.parseNextCluster(MatroskaStreamingFile.java:320) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.provideFrames(MatroskaStreamingFile.java:296) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaAudioTrack.lambda$process$0(MatroskaAudioTrack.java:39) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:275) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:249) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaAudioTrack.process(MatroskaAudioTrack.java:38) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.track.DelegatedAudioTrack.processDelegate(DelegatedAudioTrack.java:25) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.processStatic(YoutubeAudioTrack.java:57) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.process(YoutubeAudioTrack.java:49) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.execute(LocalAudioTrackExecutor.java:104) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager.lambda$executeTrack$1(DefaultAudioPlayerManager.java:348) ~[lavaplayer-1.3.76.jar!/:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:831) ~[na:na]
2021-06-03 11:40:28.273 ERROR 1 --- [back-1-thread-1] c.s.d.l.t.p.LocalAudioTrackExecutor : Error in playback of 5hEh9LiSzow
com.sedmelluq.discord.lavaplayer.tools.FriendlyException: Something went wrong when decoding the track.
at com.sedmelluq.discord.lavaplayer.tools.ExceptionTools.wrapUnfriendlyExceptions(ExceptionTools.java:44) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:293) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:249) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaAudioTrack.process(MatroskaAudioTrack.java:38) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.track.DelegatedAudioTrack.processDelegate(DelegatedAudioTrack.java:25) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.processStatic(YoutubeAudioTrack.java:57) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.process(YoutubeAudioTrack.java:49) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.execute(LocalAudioTrackExecutor.java:104) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager.lambda$executeTrack$1(DefaultAudioPlayerManager.java:348) ~[lavaplayer-1.3.76.jar!/:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:831) ~[na:na]
Suppressed: com.sedmelluq.discord.lavaplayer.tools.exception.EnvironmentInformation:
lavaplayer.version: 1.3.76
os.arch: aarch64
os.name: Linux
os.version: 5.10.25-linuxkit
java.vendor: Oracle Corporation
java.version: 16.0.1
java.runtime.version: 16.0.1+9-24
java.vm.version: 16.0.1+9-24
Caused by: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Required library was not found
at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadWithFailureCheck(NativeLibraryLoader.java:88) ~[lava-common-1.1.2.jar!/:na]
at com.sedmelluq.lava.common.natives.NativeLibraryLoader.load(NativeLibraryLoader.java:69) ~[lava-common-1.1.2.jar!/:na]
at com.sedmelluq.discord.lavaplayer.natives.ConnectorNativeLibLoader.loadConnectorLibrary(ConnectorNativeLibLoader.java:21) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.natives.opus.OpusDecoderLibrary.getInstance(OpusDecoderLibrary.java:13) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.natives.opus.OpusDecoder.
(OpusDecoder.java:20) ~[lavaplayer-1.3.76.jar!/:na] at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.initialiseDecoder(OpusPacketRouter.java:193) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.checkDecoderNecessity(OpusPacketRouter.java:177) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.process(OpusPacketRouter.java:93) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaOpusTrackConsumer.consume(MatroskaOpusTrackConsumer.java:46) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.processFrameInBlock(MatroskaStreamingFile.java:371) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.parseClusterSimpleBlock(MatroskaStreamingFile.java:335) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.parseNextCluster(MatroskaStreamingFile.java:320) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.provideFrames(MatroskaStreamingFile.java:296) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaAudioTrack.lambda$process$0(MatroskaAudioTrack.java:39) ~[lavaplayer-1.3.76.jar!/:na]
at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:275) ~[lavaplayer-1.3.76.jar!/:na]
... 10 common frames omitted
Caused by: java.lang.UnsatisfiedLinkError: Required library was not found
at com.sedmelluq.lava.common.natives.NativeLibraryLoader.extractLibraryFromResources(NativeLibraryLoader.java:125) ~[lava-common-1.1.2.jar!/:na]
at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadInternal(NativeLibraryLoader.java:110) ~[lava-common-1.1.2.jar!/:na]
at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadWithFailureCheck(NativeLibraryLoader.java:84) ~[lava-common-1.1.2.jar!/:na]
... 24 common frames omitted
It seems some libraries are missing that lavaplayer is looking for. I found something similar at https://github.com/Darkside138/DiscordSoundboard/issues/124, but it doesn't have a resolution.
Will keep looking. Any help would be appreciated.
lavaplayer needs m1 natives. I myself know not much about it. you maybe want to have a chat in the discord
@TopiSenpai sure can, do i join the JDA server or something else?
yes
Has this ever been solved?
I guess you could use these lavalink jars containing natives for lavalink and build your own image with it
https://github.com/Cog-Creators/Lavalink-Jars/releases
We don't have mac M1/aarch64e natives packaged in those releases yet but it's a planned feature that should be there soon. However we do have plain aarch64 arm natives in there.
Has there been any progress on the ARM natives or is there a jar I can add manually to my project?
as I mentioned above https://github.com/Cog-Creators/Lavalink-Jars/releases
with v3.5.0
lavalink has added support for arm in the meantime with docker builds specifically for arm64
& arm/v7