unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* make packagers life easier
@ 2015-03-15 17:00 Tomáš Čech
  2015-03-16 17:01 ` Ludovic Courtès
  2015-03-17 12:01 ` Sree Harsha Totakura
  0 siblings, 2 replies; 5+ messages in thread
From: Tomáš Čech @ 2015-03-15 17:00 UTC (permalink / raw)
  To: guix-devel

Hello Guix,

I'd like to share some thoughts about packaging to find I'm doing it
wrong or show that there is room for improvements. I don't think that
the proposed improvements are hard to implement (from algorithmic POV)
and I'm aware that all the things can be solved on my side, but that
is not the point.

Stop after/before phase
=======================

What it can help with?

- download sources of package without constructing URL
- prepare sources for creating or applying patch
- when preparing configure parameters you can stop right after
  configuration phase

How to implement?
- inject always failing phase into phases list

Another level of this feature could be even continuing of the build.


Ommit developed package from generations
========================================

How it can help?

When I work on packages I have to take care of handling generations
even when I don't care. It complicates removing old package builds
using `guix gc -d' and it is unwanted burden.

How to implement?
I'm not exactly sure, but not creating new generation with the package
could be sufficient.



Improve output of the build
===========================

What I miss?

Mostly one particular and obvious thing - after successful build print
the path of newly created store in well visible, easy-to-mouse and
easy-to-parse way.

example:

New store created: /gnu/store/s0meb0r1ngandl000ngh4shlead1ngt0-package-1.0/

Right now I need to dig that from any build message above.



And in future it would be nice to add some colors to output. It helps
with orientation speed a lot.

Thanks for reading,

S_W

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: make packagers life easier
  2015-03-15 17:00 make packagers life easier Tomáš Čech
@ 2015-03-16 17:01 ` Ludovic Courtès
  2015-03-16 18:39   ` Andreas Enge
  2015-03-17 12:01 ` Sree Harsha Totakura
  1 sibling, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2015-03-16 17:01 UTC (permalink / raw)
  To: guix-devel

Hi!

Tomáš Čech <sleep_walker@gnu.org> skribis:

> Stop after/before phase
> =======================
>
> What it can help with?
>
> - download sources of package without constructing URL
> - prepare sources for creating or applying patch

I think ‘guix build -S foo’ does exactly that, doesn’t it?

> - when preparing configure parameters you can stop right after
>  configuration phase
>
> How to implement?
> - inject always failing phase into phases list

I’d like to read what others think because I’m probably biased, but my
first reaction is that (1) I’ve rarely if ever felt the need for this,
(2) adding a failing phase is easy to do by hand, and (3) it would be
hard to implement this generically currently (phases are not exposed.)

> Ommit developed package from generations
> ========================================

Hmm, what do you mean?  For a package to end up in your profile, you
have to explicitly install it.  So I’m really not sure what you mean
here.

> When I work on packages I have to take care of handling generations
> even when I don't care. It complicates removing old package builds
> using `guix gc -d' and it is unwanted burden.

I rarely do ‘guix gc -d’; I rather let the GC collect garbage by itself,
once it a while.  :-)

> Improve output of the build
> ===========================
>
> What I miss?
>
> Mostly one particular and obvious thing - after successful build print
> the path of newly created store in well visible, easy-to-mouse and
> easy-to-parse way.

Successful ‘guix build’ invocations always print the resulting file
name(s) as the last line(s) to stdout, such that one can always do
things like:

  ls $(guix build foo)

Is it what you want, or did you mean something else?

Thanks for the suggestions!

Ludo’.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: make packagers life easier
  2015-03-16 17:01 ` Ludovic Courtès
@ 2015-03-16 18:39   ` Andreas Enge
  0 siblings, 0 replies; 5+ messages in thread
From: Andreas Enge @ 2015-03-16 18:39 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

On Mon, Mar 16, 2015 at 06:01:15PM +0100, Ludovic Courtès wrote:
> > How to implement?
> > - inject always failing phase into phases list
> I’d like to read what others think because I’m probably biased, but my
> first reaction is that (1) I’ve rarely if ever felt the need for this,
> (2) adding a failing phase is easy to do by hand, and (3) it would be
> hard to implement this generically currently (phases are not exposed.)

Agreed. One thing that works when one adds a customised phase is to let
it finish with #f. Of course, if everything is standard, one needs to
add such a phase, which is a bit of typing. Maybe with Taylan's new syntax,
it has become easier.

Andreas

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: make packagers life easier
  2015-03-15 17:00 make packagers life easier Tomáš Čech
  2015-03-16 17:01 ` Ludovic Courtès
@ 2015-03-17 12:01 ` Sree Harsha Totakura
  2015-03-17 16:12   ` Ludovic Courtès
  1 sibling, 1 reply; 5+ messages in thread
From: Sree Harsha Totakura @ 2015-03-17 12:01 UTC (permalink / raw)
  To: guix-devel; +Cc: Grothoff, Christian

On 03/15/2015 06:00 PM, Tomáš Čech wrote:
> 
> How to implement?
> - inject always failing phase into phases list
> 
> Another level of this feature could be even continuing of the build.

I have a similar feature request.  Long time ago when I was packaging
gnunet and curl, I had to spend a lot of time trying to understand why
`make check` phase fails in the build environment.  More often than not,
I had to extensively study the test cases and the testing mechanism
being used to understand and then resolve the failures, much to my
chagrin, by trail-and-error as I did not have access to the build
environment.

Sure, `guix build -K` helped to some extent but there were some
hard-to-debug cases which only failed in the build environment due to
separate network and filesystem namespaces.

I discussed this with Christian and his suggestion was to implement a
debug shell which the guix builder will bail out to when a phase fails.
 The packager can then examine the environment right at the moment where
the failure happens.

I know that since the build happens in a separate namespace this can be
hard to implement, but one idea is to configure the build environments
network namespace to accept connections from localhost and spawn sshd
when the build fails.

WDYT?

Regards,
Sree

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: make packagers life easier
  2015-03-17 12:01 ` Sree Harsha Totakura
@ 2015-03-17 16:12   ` Ludovic Courtès
  0 siblings, 0 replies; 5+ messages in thread
From: Ludovic Courtès @ 2015-03-17 16:12 UTC (permalink / raw)
  To: Sree Harsha Totakura; +Cc: guix-devel, Grothoff, Christian

Sree Harsha Totakura <sreeharsha@totakura.in> skribis:

> I have a similar feature request.  Long time ago when I was packaging
> gnunet and curl, I had to spend a lot of time trying to understand why
> `make check` phase fails in the build environment.  More often than not,
> I had to extensively study the test cases and the testing mechanism
> being used to understand and then resolve the failures, much to my
> chagrin, by trail-and-error as I did not have access to the build
> environment.
>
> Sure, `guix build -K` helped to some extent but there were some
> hard-to-debug cases which only failed in the build environment due to
> separate network and filesystem namespaces.

On GuixSD, there are few differences between the build environment and
the “real” environment, which makes ‘guix build -K’ probably more
useful.  Notable differences are that the real environment has network
access and /bin/sh.

The /bin/sh thing is usually easily fixed.  Problems related to separate
network name spaces can be more difficult as you noticed, although it’s
also always possible to run ‘strace’ in the build process or some Guile
snippet to get a better understanding of what’s going on.

However, when using Guix on another distro, then of course, in addition
to /bin/sh and networking, you get an FHS tree, which makes a
significant difference compared to the build environment.

> I discussed this with Christian and his suggestion was to implement a
> debug shell which the guix builder will bail out to when a phase fails.
>  The packager can then examine the environment right at the moment where
> the failure happens.
>
> I know that since the build happens in a separate namespace this can be
> hard to implement, but one idea is to configure the build environments
> network namespace to accept connections from localhost and spawn sshd
> when the build fails.
>
> WDYT?

I think it’s a nice idea, but it’s easier said than done.  :-)

An option would be to make do without the daemon’s help.  But then, do
we add lsh/OpenSSH as a dependency of every build?  And more
importantly, can we actually open connections available from the
outside?

The other option is to handle it within the daemon, which would do all
the container-with-ssh-daemon setup by itself when needed.  That seems a
bit heavyweight to do there, and perhaps more investment than desirable
in this C++ code base.

If container support was librarified, akin to what David suggested for
GSoC¹, it would be easy for users to start a container that is really
comparable to that created by guix-daemon.  Then that would make this
sort of debugging much easier, among other benefits.

My 2¢,
Ludo’.

¹ http://www.gnu.org/software/soc-projects/ideas-2015.html#guix

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-03-17 16:13 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-15 17:00 make packagers life easier Tomáš Čech
2015-03-16 17:01 ` Ludovic Courtès
2015-03-16 18:39   ` Andreas Enge
2015-03-17 12:01 ` Sree Harsha Totakura
2015-03-17 16:12   ` Ludovic Courtès

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).