Re: Sound devices under vservers?

Andrew Ruthven <[email protected]>
Newsgroups gmane.linux.vserver
Message-ID <[email protected]>
Hye,

On Wed, 2016-09-07 at 18:57 +0200, Herbert Poetzl wrote:
> On Wed, Sep 07, 2016 at 11:33:48PM +1200, Andrew Ruthven wrote:
> > 
> > I run slimserver and squeezelite within a vserver, and until
> > recently they've worked nicely. But now squzeelite (which
> > actually plays the music out a soundcard) has stopped working.
> The files in /dev/snd within the container still match what is
> > on the hypervisor.
> 
> There is no hypervisor in Linux-VServer.
> There is a kernel and a host system and a number of guests.

Yeah, I was just stealing the language from elsewhere. ;)

> > 
> > Running strace when I start squeezelite gives me:
> 
> > 
> > open("/dev/snd/controlC0", O_RDONLY|O_CLOEXEC) = 4
> > fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
> > ioctl(4, SNDRV_CTL_IOCTL_CARD_INFO or UI_DEV_CREATE,
> > 0x7ffcc50789d0) =
> > -1 ENOTTY (Inappropriate ioctl for device)
> 
> Try to run squeezelite with strace in a chroot into the guest
> and see if the result differs. 
> 
> If you get the same result, then the isolation (Linux-VServer 
> is not involved). 
> 
> If it works inside the chroot but fails inside the guest, then
> you might have insufficient capabilities.

Okay, fails within a chroot as well. Relevant lines:

From the host (setting LD_LIBRARY_PATH to pick up the libraries within
the guest):

open("/dev/snd/controlC0", O_RDONLY|O_CLOEXEC) = 4
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
ioctl(4, SNDRV_CTL_IOCTL_CARD_INFO or UI_DEV_CREATE, 0x7ffc646fd6d0) =
0
close(4)                                = 0

Within a chroot:

open("/dev/snd/controlC0", O_RDONLY|O_CLOEXEC) = 4
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
ioctl(4, SNDRV_CTL_IOCTL_CARD_INFO or UI_DEV_CREATE, 0x7ffd93373400) =
-1 ENOTTY (Inappropriate ioctl for device)
close(4)                                = 0

Within the guest:

open("/dev/snd/controlC0", O_RDONLY|O_CLOEXEC) = 4
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
ioctl(4, SNDRV_CTL_IOCTL_CARD_INFO or UI_DEV_CREATE, 0x7ffd6119bd40) =
-1 ENOTTY (Inappropriate ioctl for device)
close(4)

Aw crap. Turns out the minor numbers were different for
/dev/snd/controlC0 between the host and the guest. I had initially
looked at those and thought they matched, guess I read them wrong.

I guess I should add a step to my start script for the guest to always
copy over the contents of /dev/snd.  ;)  Actually, now it's a bind
mount.

Sorry to distract folks, but I thought I'd respond with the details and
the cause in case other folks hit it.

Cheers,
Andrew

-- 
Andrew Ruthven, Wellington, New Zealand
MIITP, ITCP

At work: [email protected]
At home: [email protected]
Cloud  : NZs only real cloud - https://catalyst.net.nz/cloud
GPG fpr: C603 FC4E 600F 1CEC D1C8  D97C 4B53 D931 E4D3 E863
LCA2017: The Future of Open Source, Hobart, AU - http://linux.conf.au
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.