iyzs...@member.fsf.org (宋文武) skribis:

> l...@gnu.org (Ludovic Courtès) writes:
>
>> Andy Wingo <wi...@igalia.com> skribis:
>>
>>> On Mon 07 Mar 2016 22:11, l...@gnu.org (Ludovic Courtès) writes:
>>>
>>>> Andy Wingo <wi...@pobox.com> skribis:
>>>>
>>>>> I installed gnome using
>>>>>
>>>>>   guix package --profile=/tmp/foo-profile -i gnome
>>>>>
>>>>> There is a lot of stuff there.  If gnome-desktop-service extends
>>>>> profile-service-type with gnome, will that not "pollute" a lot of
>>>>> profiles?  Attached is a listing of that profile.
>>>>> […]
> These mostly come from ‘nautilus’, which propagated ‘gtk+’.
> I think it’s ok to remove ‘gtk+’ from it, since it’s an application
> after all, and adding input ‘gtk+’ to other (libnautilus using) packages
> is trivial.

Pulseaudio also propagates a few things.

>>>> Good point, this sounds undesirable (and shows that some packages would
>>>> benefit from separate outputs—e.g., “doc” output for xcb.)
> It seems that multiple outputs doesn’t help here.

Multiple outputs do help here: propagating libxcb:out only propagates
libxcb:out, and not libxcb:doc.

> For example, install ‘gtk+:doc’ into the profile will bring all
> propagated-inputs of ‘gtk+’ into profile too, because
> propagated-inputs aren’t per output…

Right, it’s a limitation that we could fix.

It’s rarely a problem though, because usually when you install the “doc”
or “debug” output, you also want the rest, including propagated inputs.

> IIUC, in nix, it’s handled by writing files to specified output:
> ‘$out/nix-support/propagated-build-inputs’
> ‘$out/nix-support/propagated-native-build-inputs’
> ‘$out/nix-support/propagated-user-env-packages’
>
> And only items in ‘propagated-user-env-packages’ are included when
> install into the profile.

Two things here:

  • Back in the day, I couldn’t think of a situation where it would make
    sense for ‘propagated-inputs’ to be different from
    ‘propagated-user-env-packages’ (at the time, the latter was little
    known so in practice people had to install dependencies by
    themselves.)  So in Guix I chose to have just one.

  • I found the ‘nix-support’ trick (that is, having high-level
    information on the build side) kind of hacky, which is why this
    information is solely on the build side in Guix.  This is what
    allows higher-level functionality such as --search-paths to be
    implemented on the host side.

    OTOH, things like <http://bugs.gnu.org/22138> could be more easily
    addressed if all the info was already on the build side.

> I think we should make propagated things per output too.

Yes.

>> Right.  I think we should rewrite the ‘gnome’ meta-package in terms of
>> ‘union-build’ and explicitly include only bin/ and share/.
> Install a ‘meta’ package should have same effect as install all the
> individuals.  If it’s a union and filter from other packages, I won’t
> think it ‘meta’ anymore :-)

Right.  :-)

> Ideally, for every file in a purity profile, we know the reason why it
> exist.  Maybe it’s possible to implement by using services?  If packages
> could declare extensions and extend each other, when install packages
> into the profile, those services extensions are fold together.  I think:
>
> - by default, an empty profile only cares ‘bin’.
>   install man-db to it, will add an extension which cares for ‘share/man’.
>
> - now install glibc into it, since glibc doesn’t have ‘share/man’,
>   it only extend the ‘bin’ extension, so its binaries are added to the
>   profile.
>   
> - then install gcc into the profile, it care for ‘include’ and ‘lib’,
>   and have ‘share/man’, its manpages and headers and libraries of glibc
>   will appear.
>
> - at this point, remove man-db from profile will remove the gcc manpages
>   from it too.
>
> Then I dream what’s cool is that we could know and show users more
> information if all the relations between packages are coded explicitly
> by services extensions:
>
> - query (guix package –-show) man-db:
>    name: man-db
>    extensions:
>      man-page: interest ‘share/man’
>
> - install gcc:
>    The following package will be extended:
>      man-db (man-page)
>    The following package extend gcc:
>      glibc (header library)
>
> And perhaps other things ;-)

Interesting ideas!  There are connections with how search paths work
currently.

Anyway, what do you think would be the best way to avoid “profile
pollution” with the GNOME meta-package?

Thanks,
Ludo’.

Reply via email to