Building Spot from source on Raspberry Pi
Spot is a Spotify client for desktop and mobile Linux, developed using Rust, GTK4 and libadwaita.Spot on GitHub
I wanted to install and use it on a Raspberry Pi as a part of a larger project. Although a flatpak is available, it seems slower than natively built.
Device and OS
I used Raspberry Pi 3B running 64-bit Raspbian with desktop. 64-bit Raspbian Lite should work too.Note: When I tried to build Spot on a 32-bit OS, it still compiled, but crashed on launch with a widget-related error.
Raspberry Pi operating systems
Instead of building Spot yourself, you can get a flatpak, but it appeared to work slower for me. Flatpak is only available for 64-bit OSes on ARM devices, too.
Spot on Flatpak
Setup and prerequisites
Expand swap
Compiling GTK4 for Rust and building the final Spot binary requires about 2.5 GB of memory. I had to expand the swap size to at least 2 GB.Disable swap:
# dphys-swapfile swapoffEdit the swap file settings:
# nano /etc/dphys-swapfileIn the file, set
CONF_SWAPSIZE=2048Save and close.
Set up the new swap:
# dphys-swapfile setup(this will take a few minutes)
Turn swap back on:
# dphys-swapfile swaponReboot for a good measure.
After rebooting, check for available swap space:
$ free -h
Add the testing repo
Spot is built with GTK4 and libadwaita, both of which are only available in Debian's testing repo.WARNING: Update before you add the testing repo. I know I am violating one of the Debian fundamentals and making a FrankenDebian, but it will be a while until those packages are available on bullseye.
Don't Break Debian
Update your current install if you haven't done so:
# apt update && apt upgrade # rebootAppend the bookworm repo to the sources
# echo "deb http://deb.debian.org/debian bookworm main contrib non-free" >> /etc/apt/sources.list # apt update
Install Rust
WARNING: Running scripts directly from the web is a very dumb idea, but in this case, I trust Rust developers$ curl --proto '=https' -sSf https://sh.rustup.rs | sh
Install dependencies
Note: ninja-build is not the same package as ninja, and can cause conflicts# apt install libgtk-4-dev libadwaita-1-dev meson ninja-build libssl-dev libasound2-dev libpulse-dev libtls-dev appstream-utilBuild process also requires an updated version of CC:
# apt install gcc --upgrade
Build Spot
Spot on GitHub# apt install git $ git clone https://github.com/xou816/spot $ cd spot $ meson setup target -Dbuildtype=release -Doffline=false --prefix="$HOME/.local" $ ninja install -C target -j1 -l1And give it a few hours... depending on your device, amount of RAM and SD card speed.
Keyring
Spot uses GNOME keyring to store username and password. Simplest way to work with the keyring is to install Seahorse (aka Passwords and Keys)# apt install seahorseOpen Seahorse, create a new password keyring, set it as default, and unlock it. Sign into Spot, which will create an entry in the default keyring. As long as the keyring is unlocked, Spot can use the provided username, password and token.
Hints and Troubleshooting
You can monitor current CPU and memory load using `top` or `htop` commands in a separate terminal.If your build fails with SIGKILL, most likely, Raspberry Pi is out of memory.