Hi, I´m using the proprietary oneplay-dvd to play DVDs, which installs fine with rpm. To support distributions, which use and install pulseaudio by default, they include their own versions of the necessary libraries, like liborc, libglib and whatelse they need. However these libraries have to statically link to libpulse, although they are supporting plain alsa output. So pulseaudio does not have to run, but libpulse has to be present. I stripped down pulseaudio of anything unnecessary, so that it is now built with USE="glib orc" and nothing else. However I´m not sure, whether pulseaudio does not pull in more dependencies, than a libpulse ebuild would require. If this would be the case, an additional media-libs/libpulse ebuild would be useful, so that I could depclean any overhead. If you would like to test this out, you could use the trial version of oneplay-dvd. Note, that it uses Wibu´s CodeMeter as copy protection. Reproducible: Always Steps to Reproduce: 1. Try to execute a binary, which uses libraries statically linking to libpulse. Actual Results: Error while loading shared libraries. Expected Results: Clean startup. $ emerge --info Portage 2.2.14 (python 2.7.9-final-0, !../../var/lib/layman/distros/profiles/CLD/amd64, gcc-4.8.3, glibc-2.19-r1, 3.18.2-calculate x86_64) ================================================================= System uname: Linux-3.18.2-calculate-x86_64-AMD_Turion-tm-X2_Ultra_DualCore_Mobile_ZM-84-with-gentoo-14.12.1 KiB Mem: 3788116 total, 1252484 free KiB Swap: 4882428 total, 4882332 free Timestamp of tree: Fri, 16 Jan 2015 08:00:01 +0000 ld GNU ld (Gentoo 2.24 p1.4) 2.24 ccache version 3.1.9 [disabled] app-shells/bash: 4.2_p53 dev-java/java-config: 2.2.0 dev-lang/perl: 5.18.2-r2 dev-lang/python: 2.7.9-r1 dev-util/ccache: 3.1.9-r4 dev-util/cmake: 2.8.12.2-r1 dev-util/pkgconfig: 0.28-r1 sys-apps/baselayout: 2.2 sys-apps/openrc: 0.12.4 sys-apps/sandbox: 2.6-r1 sys-devel/autoconf: 2.69 sys-devel/automake: 1.11.6-r1, 1.13.4 sys-devel/binutils: 2.24-r3 sys-devel/gcc: 4.8.3 sys-devel/gcc-config: 1.7.3 sys-devel/libtool: 2.4.2-r1 sys-devel/make: 4.0-r1 sys-kernel/linux-headers: 3.16 (virtual/os-headers) sys-libs/glibc: 2.19-r1::calculate Repositories: gentoo distros calculate Installed sets: @custom ACCEPT_KEYWORDS="amd64" ACCEPT_LICENSE="*" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-O2 -march=native -pipe" CHOST="x86_64-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo" CXXFLAGS="-O2 -march=x86-64 -pipe" DISTDIR="/var/calculate/remote/distfiles" EMERGE_DEFAULT_OPTS=" --binpkg-respect-use=y --quiet-build=n --with-bdeps=y" FCFLAGS="-O2 -pipe" FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles getbinpkg merge-sync news parallel-fetch parallel-install preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch usersandbox usersync" FFLAGS="-O2 -pipe" GENTOO_MIRRORS="http://mirror.yandex.ru/gentoo-distfiles http://distfiles.gentoo.org" LANG="de_DE.UTF-8" LDFLAGS="-Wl,--as-needed" MAKEOPTS="-j3" PKGDIR="/var/calculate/remote/packages/CLD/x86_64" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages" PORTAGE_TMPDIR="/var/calculate/tmp" PORTDIR="/usr/portage" PORTDIR_OVERLAY="/var/lib/layman/distros /var/lib/layman/calculate" USE="3dnow 3dnowext X a52 aac acl acpi alsa amd64 amr audiofile avi berkdb bittorrent bluetooth bzip2 cairo cdda cddb cdparanoia cdr chm cli consolekit cpudetection cracklib crypt css cue cups cxx dbus djvu dri dv dvd dvdr dvdread ebook encode exif faac ffmpeg flac flash foomaticdb fortran ftp gd gdbm gif gphoto2 gpm gtk iconv id3tag ieee1394 imagemagick ios ipod ipv6 irc jabber jingle jpeg jpeg2k kde libnotify libwww logrotate lzo mad matroska mbox mikmod mmx mmxext mng modules mp3 mpeg mplayer multilib musepack ncurses networkmanager nfs nls nptl nsplugin ogg oggvorbis openal opencore-amr openexr opengl openmp oscar pam pcre pdf png policykit portaudio ppp qt3support qt4 quicktime raw rdesktop readline real samba scanner sdl semantic-desktop session smp speex spell srt sse sse2 sse3 sse4.1 sse4.2 sse4a sse5 ssl ssse3 svg tcpd tga theora tiff truetype udev unicode usb userlocales v4l v4l2 vaapi vcd vdpau vhosts vorbis wavpack webkit webp wimax win32codecs wmf wxwindows x264 xanim xcomposite xinerama xpm xv xvid xvmc yahoo zlib" ABI_X86="64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" CAMERAS="* ptp2" CL="builder client desktop console consolegui" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" DRACUT_MODULES="dmraid dmsquash-live plymouth lvm mdraid nfs" ELIBC="glibc" FOO2ZJS_DEVICES="*" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ublox ubx" GRUB_PLATFORMS="efi-64 efi-32 pc" INPUT_DEVICES="keyboard mouse evdev mutouch synaptics" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="en bg de es es_ES fr it pl pt pt_BR ro ru ru_RU uk" LIRC_DEVICES="devinput" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-5" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7" RUBY_TARGETS="ruby20" THEMES="CLD" USERLAND="GNU" VIDEO_CARDS="fbdev glint intel mach64 mga nouveau nv r128 radeon savage sis tdfx trident vesa via vmware nouveau nvidia i915 i965 r100 r200 r300 r600 radeonhd dummy v4l" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account" USE_PYTHON="2.7" Unset: CPPFLAGS, CTARGET, INSTALL_MASK, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, SYNC Note: The calculate overlay does not include media-sound/pulseaudio, so I´m filing it here.
We don't generally split packages unless there is an advantage that surpasses the cost of extra maintenance.
Well, I assume then, that it depends on how high the advantage of support for binary packages hard linking to libpulse is measured. As these binary packages are usually proprietary, thus not in the portage tree, where USE flags could change the libpulse dependency, I guess, that this advantage is not measured too high. I wouldn´t mind a resolve as won´t fix, but still think, that this is actually a valid request. Should there be lots of binaries (e.g. Steam games optionally supporting pulseaudio) linking to libpulse in the future, the advantage might be reconsidered. For now it would be fine by me leaving a crippled pulseaudio package installed. I just thought there might be interest in this, because the libpulse package is available in Debian and Redhat repositories and the users could use such a package for similar use cases.
Binary distributions can split packages a lot more easily than we do. Would it be satisfactory as a middle ground to provide static-libs from the pulseaudio ebuild directly ?
That would be fine. Thanks.
With upcoming 15.0 version you can build pulseaudio with "-daemon" USE flag to disable pulseaudio daemon part, have a look at pulseaudio-14.99.2_pre Upstream issue https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1185 Upstream change (Meson build system) https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/540
That's great, but for a clean split package we also need a way to build the daemon without libpulse (making it link to an already available system-lib of libpulse if needed); not just libpulse without daemon.
The bug has been referenced in the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9d6f88e10e942ae8e3a475e1e842ce1c423d70ec commit 9d6f88e10e942ae8e3a475e1e842ce1c423d70ec Author: Mart Raudsepp <leio@gentoo.org> AuthorDate: 2021-09-24 18:08:30 +0000 Commit: Mart Raudsepp <leio@gentoo.org> CommitDate: 2021-09-24 18:15:57 +0000 media-sound/pulseaudio: Add metapackage for pulseaudio split packages Bug: https://bugs.gentoo.org/536780 Package-Manager: Portage-3.0.20, Repoman-3.0.2 Signed-off-by: Mart Raudsepp <leio@gentoo.org> media-sound/pulseaudio/pulseaudio-15.0-r100.ebuild | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=26646b27529e13f7beb0c78fac339e1d78bf07d4 commit 26646b27529e13f7beb0c78fac339e1d78bf07d4 Author: Mart Raudsepp <leio@gentoo.org> AuthorDate: 2021-09-24 18:07:09 +0000 Commit: Mart Raudsepp <leio@gentoo.org> CommitDate: 2021-09-24 18:15:57 +0000 media-sound/pulseaudio-daemon: Add split package for pulseaudio daemon Bug: https://bugs.gentoo.org/536780 Package-Manager: Portage-3.0.20, Repoman-3.0.2 Signed-off-by: Mart Raudsepp <leio@gentoo.org> media-sound/pulseaudio-daemon/Manifest | 1 + .../pulseaudio-daemon/files/15.0-daemon-only.patch | 277 ++++++++++++++++++ ...pulseaudio-15.0-xice-xsm-xtst-daemon-only.patch | 25 ++ .../pulseaudio-daemon/files/pulseaudio.conf.d | 6 + .../pulseaudio-daemon/files/pulseaudio.init.d-5 | 80 ++++++ .../pulseaudio-daemon/files/pulseaudio.service | 10 + .../pulseaudio-daemon/files/pulseaudio.tmpfiles | 1 + media-sound/pulseaudio-daemon/metadata.xml | 66 +++++ .../pulseaudio-daemon-15.0.ebuild | 320 +++++++++++++++++++++ 9 files changed, 786 insertions(+) https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=dfd146a6aceb118f1d4f9751ae071f13a7624ffb commit dfd146a6aceb118f1d4f9751ae071f13a7624ffb Author: Mart Raudsepp <leio@gentoo.org> AuthorDate: 2021-09-24 18:00:27 +0000 Commit: Mart Raudsepp <leio@gentoo.org> CommitDate: 2021-09-24 18:15:56 +0000 media-libs/libpulse: Add split package for pulseaudio libraries Bug: https://bugs.gentoo.org/536780 Package-Manager: Portage-3.0.20, Repoman-3.0.2 Signed-off-by: Mart Raudsepp <leio@gentoo.org> media-libs/libpulse/Manifest | 1 + media-libs/libpulse/files/15.0-no-aec.patch | 45 +++++ ...pulseaudio-15.0-xice-xsm-xtst-daemon-only.patch | 25 +++ media-libs/libpulse/libpulse-15.0.ebuild | 189 +++++++++++++++++++++ media-libs/libpulse/metadata.xml | 17 ++ profiles/package.mask | 6 + 6 files changed, 283 insertions(+)
Now we have proper libpulse/pulseaudio-daemon split with 15.99.1 version. Once that is unmasked, what's left to do here?
Now that we have a modern PipeWire version available, I think, there's only one thing that remains after media-libs/libpulse, media-sound/pulseaudio-daemon and the now meta package media-sound/pulseaudio is unmasked. That is, preferably but not necessarily ensure that either media-video/pipewire or media-sound/pulseaudio-daemon is actually installed along with media-libs/libpulse, so that it's actually working out of the box. And for PipeWire by default media-video/pipewire would of course be the first choice of the two. This could most obviously and least intrusively be done via >=media-sound/pulseaudio-15.99.1 by adding || ( media-video/pipewire[bluetooth?] >=media-sound/pulseaudio-daemon-${PV}[bluetooth?,glib?,jack?,native-headset?,ofono-headset?] ) and removing the daemon IUSE entirely or by making PipeWire required when when daemon IUSE is disabled. Or it could be turned into daemon? ( || ( media-video/pipewire[bluetooth?] >=media-sound/pulseaudio-daemon-${PV}[bluetooth?,glib?,jack?,native-headset?,ofono-headset?] ) ) Personally I think it would be acceptable to just remove the daemon IUSE and if someone really does not want either daemon, they can use package.provided but perhaps that's too drastic, since packgae.provided is assumed to mean that it's not Gentoo supported configuration. Finally, if someone wanted to be fancy, ofono-headset IUSE could be mapped to pulling net-misc/ofono as a dependency along media-video/pipewire but I'm not sure if a correct assumption that just because someone used oFono with PulseAudio, they still need it with PipeWire as well. And jack IUSE could be mapped to media-video/pipewire[jack-client] but it should be noted that upstream has recently declared that backend as at least feature frozen if not essentially unmaintained, so it's not currently certain if we will not end up masking that flag.
(In reply to Niklāvs Koļesņikovs from comment #9) ... > That is, preferably but not necessarily ensure that either > media-video/pipewire or media-sound/pulseaudio-daemon is actually installed > along with media-libs/libpulse, so that it's actually working out of the > box. And for PipeWire by default media-video/pipewire would of course be the > first choice of the two. This is still a problem if you want audio with pulseaudio-daemon and screen capture with pipewire. Is there any way around that?
I don't think it is worth pursuing that option for the effort required.
OK another use case I can think of is alsa-only audio with pipewire for screen capture only, can this be done?
pipewire-pulse supports pasuspender for situations when one really wants to run on bare ALSA but, in stark contrast to PulseAudio, PipeWire already releases devices it's not using at that moment, so just not using audio via PipeWire will allow ALSA to directly open the /dev/snd/* nodes. On top of that one could INSTALL_MASK=/etc/alsa/conf.d/99-pipewire-default.conf and then even ALSA default will not be the PipeWire plugin (or, if pipewire-alsa IUSE is not set, then one would need to mask the PulseAudio's plugin with it's very similarly named plugin).
Well no, I mean a user with strong preference for pure alsa, but with a desire to have screen capture working. This probably has nothing to do with pasuspender workflow, since the tool will not be available as well. IIRC pipewire will still somehow interact with mixer devices even if it will not use PCMs for playback, so guess an option to disable this completely will be useful?
Sorry just noticed this is wrong place to discuss audio use cases, probably this one fits https://bugs.gentoo.org/744622
It might be enough to use pavucontrol or another similar tool once to put the device(s) into the Pro Audio profile which will among other things stop PipeWire from changing ALSA mixer controls. It can even be done from CLI (which I expect you'd have ask about next) though the operation is probably a bit of a ritual without the nice GUI tools. Also I was under the impression that the particular issue was pretty much limited to /usr/bin/pipewire and /usr/bin/pulseaudio clashing with one another (which itself is not a smart or probably even supported configuration). The only type of application that I would expect to clash in a similar fashion would be a DAW and those are predominantly either JACK (pw-jack) or PulseAudio (pipewire-pulse) based. And, again, I believe using the Pro Audio profile would be sufficient to stop it from happening.
The bug has been referenced in the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d4c081daccde5db94acf5894ba2653188ad6cea0 commit d4c081daccde5db94acf5894ba2653188ad6cea0 Author: Sam James <sam@gentoo.org> AuthorDate: 2022-04-29 00:57:06 +0000 Commit: Sam James <sam@gentoo.org> CommitDate: 2022-04-29 00:57:06 +0000 profiles: unmask split pulseaudio packages This is a move towards making it easier for users to choose between pulseaudio and pipewire for their audio needs. We now have: - media-sound/pulseaudio (a transitory metapackage, installs no files, just enforces deps with USE flags); - media-libs/libpulse (the pulseaudio libraries, needed by clients using pulseaudio's protocol to speak to pipewire, but is not the pulseaudio daemon) - media-sound/pulseaudio-daemon (the pulseaudio daemon, to be used instead of pipewire if desired) While these are technically RC/pre-releases (and I have a strong reluctance against keywording those usually), we have a good relationship with upstream who report they've been quiet developmentwise since these tags, these versions have been tested & work well, and this will help to improve the experience for Gentoo users in choosing which audio server they want. So, all in all, a win. Bug: https://bugs.gentoo.org/536780 Bug: https://bugs.gentoo.org/744622 Bug: https://bugs.gentoo.org/827546 Bug: https://bugs.gentoo.org/841494 Signed-off-by: Sam James <sam@gentoo.org> profiles/package.mask | 6 ------ 1 file changed, 6 deletions(-)