balena-io-experimental / balena-sound

Build a single or multi-room streamer for an existing audio device using a Raspberry Pi! Supports Bluetooth, Airplay and Spotify Connect
https://balena.io/blog/turn-your-old-speakers-or-hi-fi-into-bluetooth-receivers-using-only-a-raspberry-pi/
MIT License
2.39k stars 427 forks source link

Use a pre-built librespot image #613

Closed andrewn closed 1 year ago

andrewn commented 1 year ago

I have no idea why the librespot building isn't working (implemented in PR #610) causing issues #611 and #612.

Option 1:

I think we should switch to the pre-built images of v0.4.2.

There's a list of architectures here.

I used this script and have been running on a Pi model 3 A+ for a few months.

Option 2:

Open a PR to revert commit 9f8c623c7c6778e19ce20a99e4b0029bb85e316b.

@maggie0002 it's up to you. Sorry about messing things up :-(

(fixes #611, #612)

MrJynxZ commented 1 year ago

andrewm, thank you. where do you run the script ? from the Raspberry Pi or on the CLI ?

maggie44 commented 1 year ago

@andrewn, it's all part of the process, IoT has many layers and we can't always test them all. :)

Have we tried installing the package via cargo (https://crates.io/crates/librespot) or from the Alpine testing library (https://pkgs.alpinelinux.org/packages?name=librespot&branch=edge&repo=&arch=&maintainer=)? I'm wondering why it was originally decided to build it from scratch. For the Alpine library I think we could add in the testing library just for that one package, rather than have to change the whole base image. According to the inline note in the file the same build process is used in balenaSound as in Alpine Testing anyway:

# Build process from: https://git.alpinelinux.org/aports/tree/testing/librespot/APKBUILD

https://github.com/andrewn/balena-sound/commit/c8043286427c646d8f18cee29077c2f26b11235d#diff-c1f4f23e9cc472697ce0fa6ea1cd9aadb8906e73f767ce4cc889655d2fb550b1L3

docker run -it alpine sh 
/ # apk add librespot
fetch https://dl-cdn.alpinelinux.org/alpine/v3.17/main/aarch64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.17/community/aarch64/APKINDEX.tar.gz
ERROR: unable to select packages:
  librespot (no such package):
    required by: world[librespot]
/ # apk add librespot=0.4.2-r1 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing/
fetch http://dl-cdn.alpinelinux.org/alpine/edge/testing/aarch64/APKINDEX.tar.gz
(1/3) Installing alsa-lib (1.2.8-r0)
(2/3) Installing libgcc (12.2.1_git20220924-r4)
(3/3) Installing librespot (0.4.2-r1)
Executing librespot-0.4.2-r1.pre-install
Executing busybox-1.35.0-r29.trigger
OK: 12 MiB in 18 packages

I don't mind using the new images you have built if you think that's better? It is tried and tested after all, and could help make the build times quicker than the cargo option.

maggie44 commented 1 year ago

Had a quick look in to some of those options, it seems it is more difficult to pin to a specific version when using the testing library. Maybe it is better we lean towards the tried and tested method of the pre build images like it is in your PR we just merged?

andrewn commented 1 year ago

Have we tried installing the package via cargo (https://crates.io/crates/librespot) or from the Alpine testing library (https://pkgs.alpinelinux.org/packages?name=librespot&branch=edge&repo=&arch=&maintainer=)?

It seems the Alpine testing library is built for the alsa-backend and not pulse-audio.

I did try installing from cargo and didn't get very far. This is probably my lack of Rust/Cargo knowledge though.