Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shairport-sync errors when uncommented in snapcast config #3

Open
cranky-coder opened this issue Jan 8, 2024 · 5 comments · May be fixed by #6
Open

Shairport-sync errors when uncommented in snapcast config #3

cranky-coder opened this issue Jan 8, 2024 · 5 comments · May be fixed by #6

Comments

@cranky-coder
Copy link

I uncommented the shairport-sync so I could play with airplay but the following error occurs

docker-snapcast-snapcast-1 | 2024-01-08 15-17-19.892 [Info] (AirplayStream) (shairport[) Warning: the option -u is no longer needed and is deprecated. Debug and statistics output to STDERR is now the default. Use "--log-to-syslog" to revert.
docker-snapcast-snapcast-1 | 2024-01-08 15-17-19.893 [Info] (AirplayStream) (shairport[) fatal error: --get-coverart: unknown option
docker-snapcast-snapcast-1 | 2024-01-08 15-17-19.893 [Error] (ProcessStream) Error while reading from stderr: End of file
docker-snapcast-snapcast-1 | 2024-01-08 15-17-20.015 [Error] (AirplayStream) Error opening metadata pipe, retrying in 500ms. Error: assign: Bad file descriptor [system:9 at /usr/include/boost/asio/detail/impl/reactive_descriptor_service.ipp:120 in function 'assign']
docker-snapcast-snapcast-1 | 2024-01-08 15-17-20.015 [Error] (AsioStream) Error during async wait: Operation canceled

It would seem that there is a metadata pipe issue. From what I have seen either compiling it without the metadata stuff or addressing the metadata pipe seems to be what the suggestions are.

@sweisgerber
Copy link
Owner

sweisgerber commented Jan 20, 2024

Hey, I rebuild the image, perhaps it has been fixed in upstream by now?
I have zero experience with shairport and no apple environment at home, so I can't test anything.
I can deploy fixes in the docker environment if you got some?

@smplman
Copy link

smplman commented Jan 29, 2024

First off @sweisgerber, thank you for putting this together. I just learned about snapcast today and I was up and running in about an hour with your docker image. Thank you for your work on this!

I have the same error as described in the issue

2024-01-28 22-59-48.742 [Error] (AirplayStream) Error opening metadata pipe, retrying in 500ms. Error: assign: Bad file descriptor [system:9 at /usr/include/boost/asio/detail/impl/reactive_descriptor_service.ipp:120 in function 'assign']

After doing some googling I came across this issue badaix/snapcast#672 and I can't find anything in there that doesn't line up with what is in the container.

Commands ran on the container

root@leonidas:/# which shairport-sync
/usr/bin/shairport-sync
root@leonidas:/# shairport-sync --version
4.3.2-OpenSSL-Avahi-ALSA-pa-pw-stdout-pipe-soxr-metadata-sysconfdir:/etc
root@leonidas:/# ps -ax | grep shairport-sync
    166 ?        Sl     0:01 /usr/bin/shairport-sync --name=Snapcast --output=stdout --use-stderr --get-coverart --metadata-pipename=/tmp/shairmeta.147.5000 --port=5000
root@leonidas:/# ls /tmp
shairmeta.147.5000

The only other thing I tried was trying to use shairport-sync from the path instead of /usr/bin/shairport-sync inside of snapserver.conf as follows

source = airplay://shairport-sync?name=shairport

I'm not sure if this a configuration issue or an issue with how shairport-sync is compiled. I will keep digging and if I find anything I will let you all know.

@smplman
Copy link

smplman commented Jan 29, 2024

I may have found the issue. shairport-sync seems to require avahi along with debus support. I tried to add the APKs from what I found here https://github.com/mikebrady/shairport-sync-docker/blob/master/Dockerfile#L66 but since we are not building shairport-sync i'm not sure where the dbus config files should come from.

I also found this robotastic/trunk-recorder#450 (comment) about trying to run avahi on the host and running the container in privileged mode. I was not able to get the avahi-daemon to run on my local Debian host so was not able to test it.

It does seem possible to get avahi running in this container, but I think it would be better if it were configurable so that people that don't want AirPlay don't have to install it.

I will continue to play around with building avahi into the container and if I can get it to work will PR some changes.

@smplman
Copy link

smplman commented Feb 4, 2024

I have found the root of the issue, but I'm not sure the best way to fix it. Two things need to be done in the docker file, installing dbus and making a directory that it needs.

RUN apk add dbus
RUN mkdir -p /var/run/dbus

Once that is done there is currently nothing to start dbus and avahi-daemon. I found this mikebrady/shairport-sync#320 (comment) which gave me a clue to what needs to happen next. If I sh into the container and run these commands shairpot-sync runs correctly with snapcast.

dbus-daemon --config-file=/usr/share/dbus-1/system.conf
avahi-daemon -D
kill {PID of s6-supervise svc-snapclient}

I would imagine that the sairport-sync apk would handle this automatically, but maybe avahi and dbus are optional for running standalone without snapcast.

I will keep messing with and see if I can find a good way to dockerize all of this.

@sweisgerber
Copy link
Owner

There's s6-overlay in those images (as they are based on linuxserver.io base images).

The service startup scipts are here:
https://github.com/sweisgerber/docker-snapcast/tree/main/root/etc/s6-overlay/s6-rc.d
There are already 2 services (snapclient & server), which you could use as an example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants