From: Maxime Devos <maximedevos@telenet.be>
To: "Léo Le Bouter" <lle-bout@zaclys.net>, guix-devel@gnu.org
Subject: Re: Specify runtime dependencies with propagated-inputs or wrapper scripts
Date: Fri, 26 Mar 2021 22:56:45 +0100 [thread overview]
Message-ID: <f194a7f7e1b7a38777568ecd840bc8219e56003d.camel@telenet.be> (raw)
In-Reply-To: <1e07eddcd0576658a2a02a952bdf569ba471f81a.camel@zaclys.net>
[-- Attachment #1: Type: text/plain, Size: 4567 bytes --]
On Fri, 2021-03-26 at 20:36 +0100, Léo Le Bouter wrote:
> Hello!
>
> I often meet problems where some packages don't work out of the box
> because they have some runtime dependencies like themes or third party
> programs.
>
> I solved these problems on occasion by making commits such as this:
> https://git.savannah.gnu.org/cgit/guix.git/commit/?id=00c1793ce8e2210e48b18422ea3e76da10541874
> - which adds a wrapper script to "bin/chromium" and includes xdg-utils
> in PATH variable.
>
> It works but it's tedious to do for each and every binary in every
> single package.
>
> I see we also have a propagated-inputs field, which looks nice but for
> some reason people advice against using it. For what reasons?
One reason is incompatibility.
Try "guix environment --ad-hoc pidgin eom", it will fail.
(At least, it used to, due to both gtk+@2 and gtk+@3 being in a
single profile, or perhaps I got the package names wrong.)
Another reason is that you lose ‘scoping’ (not sure how to name this).
Consider each project to be like a Scheme module (M). (M) can export
variables like:
<start snip>
(define-module (kitties))
(define-public binaries
`(("stuff" ,do-stuff)
("surf" ,search-kitties)))
(define do-stuff ...)
(define search-kitties ...)
(define-public documentation
`(("stuff" "TODO")
("surf" "In the beginning, there were kitties")))
[some library for adopting kittens]
<end snip>
Assume there is a module (puppies) as well, that also
has a "surf" binary. Now consider an adoption centre application
(animal-adopt), that uses the "surf" binaries from both (kitties)
and (puppies) for finding kitties and puppies. In Scheme-land,
this works just fine, without ambiguity:
(call-binary "surf" #:module '(kitties))
(call-binary "surf" #:module '(puppies))
However, this won't work if all binaries were in a single, global
hash table, instead of being defined per-module (or package in Guix-speak).
How could "animal-adopt" use both "kitties" and "puppies" if it were
to add "kitties" and "puppies" to propagated-inputs? Also, if
"animal-adopt" only has "kitties" as propagated-input, how could
a user install both "animal-adopt" and "a-browser-simply-named-surf" in their
profile?
> it is not as tedious as wrappers and I would really like to be able to specify
> runtime dependencies of packages using it without problems.
> I think we must find a solution to this runtime dependencies problem
> that is better than wrapper scripts because they are very tedious to
> create for every single binary in every single package.
This seems a difficult problem.
> Another recent example being that the caja package depends on dconf to
> change it's settings, which is not installed by default when users use
> window managers like sway.
>
> Let's find a convenient solution here that would allow us to put an end
> to these problems that affect many new users and remains obscure for
> them that they would need to add additional packages in their
> configuration (and which).
In order to discover these kind of issues earlier, it would be interesting
to create a "ambient-trouble" package, that has binaries named after
the common culprits "xdg-config", "which", "cat" (for shell scripts actually
requiring "coreutils"), maybe some others, to be used like this:
$ guix environment --ad-hoc software-to-test ambient-trouble
$ AMBIENT_TROUBLE_LOG=$HOME/ambient-trouble.log software-to-test
The fake "xdg-config", "which", "cat" ... would then write a line
to $AMBIENT_TROUBLE_LOG and return 1 (failure). In the package guidelines
we could recommend testing with "ambient-trouble". To find out current
violations, ‘someone’ could install "ambient-trouble" in their profile
and see what breaks.
Now I think of it, it should be sufficient to test with
"guix environment --pure", but it clears out too many variables
(e.g. DISPLAY is not unset, but XAUTHORITY is --- see
%precious-variables in guix/scripts/environment.scm).
Is there any reason why XAUTHORITY is unset but DISPLAY isn't?
After all, "guix environment --pure" is not that pure that it
removes process persona, removes the reference to the root & current
working directory from the process ... I don't see why keeping the
reference to the display server accessible would be any different from
keeping standard input/output/error open.
It's all I/O, the only (conceptual) difference is in representation
(text/bytes or pixels).
Greetings,
Maxime.
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 260 bytes --]
prev parent reply other threads:[~2021-03-26 21:57 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-26 19:36 Specify runtime dependencies with propagated-inputs or wrapper scripts Léo Le Bouter
2021-03-26 20:55 ` Leo Prikler
2021-03-26 21:56 ` Maxime Devos [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f194a7f7e1b7a38777568ecd840bc8219e56003d.camel@telenet.be \
--to=maximedevos@telenet.be \
--cc=guix-devel@gnu.org \
--cc=lle-bout@zaclys.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).