unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#35217] gnu: u-boot: Update to 2019.04.
@ 2019-04-10  7:39 Vagrant Cascadian
       [not found] ` <87zhox33vu.fsf@ponder>
  0 siblings, 1 reply; 5+ messages in thread
From: Vagrant Cascadian @ 2019-04-10  7:39 UTC (permalink / raw)
  To: 35217

[-- Attachment #1: Type: text/plain, Size: 5790 bytes --]


* gnu/packages/bootloaders (u-boot): Update to 2019.04.
  [source]: Add patch.
  (u-boot-novena): Update dynamic patch to handle variable rename.
  (u-boot-am335x-evm): New variable.
  (u-boot-am335x-boneblack): Deprecate variable.
  (u-boot-novena): Fix typo in description.
* gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch: New file.
* gnu/local.mk (dist_patch_DATA): Update accordingly.
---
 gnu/local.mk                                  |  1 +
 gnu/packages/bootloaders.scm                  | 18 ++++---
 ...boot-fix-mkimage-header-verification.patch | 48 +++++++++++++++++++
 3 files changed, 61 insertions(+), 6 deletions(-)
 create mode 100644 gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 6c39c3fef5..d8b74c0650 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1307,6 +1307,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/totem-meson-easy-codec.patch		\
   %D%/packages/patches/tuxpaint-stamps-path.patch		\
   %D%/packages/patches/twinkle-include-qregexpvalidator.patch	\
+  %D%/packages/patches/u-boot-fix-mkimage-header-verification.patch	\
   %D%/packages/patches/unzip-CVE-2014-8139.patch		\
   %D%/packages/patches/unzip-CVE-2014-8140.patch		\
   %D%/packages/patches/unzip-CVE-2014-8141.patch		\
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index d6ef7d52b5..6064e699f8 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -378,7 +378,7 @@ tree binary files.  These are board description files used by Linux and BSD.")
 (define u-boot
   (package
     (name "u-boot")
-    (version "2019.01")
+    (version "2019.04")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -386,7 +386,10 @@ tree binary files.  These are board description files used by Linux and BSD.")
                     "u-boot-" version ".tar.bz2"))
               (sha256
                (base32
-                "08hwsmh5xsb1gcxsv8gvx00bai938dm5y3889n8jif3a8rd7xgah"))))
+                "1vwv4bgbl7fjcm073zrphn17hnz5h5h778f88ivdsgbb2lnpgdvn"))
+              (patches
+               (search-patches 
+                "u-boot-fix-mkimage-header-verification.patch"))))
     (native-inputs
      `(("bc" ,bc)
        ("bison" ,bison)
@@ -577,8 +580,11 @@ board-independent tools.")))
 (define-public u-boot-malta
   (make-u-boot-package "malta" "mips64el-linux-gnuabi64"))
 
-(define-public u-boot-beagle-bone-black
-  (make-u-boot-package "am335x_boneblack" "arm-linux-gnueabihf"))
+(define-public u-boot-am335x-evm
+  (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf"))
+
+(define-public u-boot-am335x-boneblack
+  (deprecated-package "u-boot-am335x-boneblack" u-boot-am335x-evm))
 
 (define-public (make-u-boot-sunxi64-package board triplet)
   (let ((base (make-u-boot-package board triplet)))
@@ -637,7 +643,7 @@ board-independent tools.")))
 also initializes the boards (RAM etc).
 
 This U-Boot is built for Novena.  Be advised that this version, contrary
-to Novena upstream, does not load u-boot.img from the first patition.")
+to Novena upstream, does not load u-boot.img from the first partition.")
       (arguments
        (substitute-keyword-arguments (package-arguments base)
          ((#:phases phases)
@@ -647,7 +653,7 @@ to Novena upstream, does not load u-boot.img from the first patition.")
                ;; allowing it to be installed at a device offset.
                (lambda _
                  (substitute* "configs/novena_defconfig"
-                   (("CONFIG_SPL_FAT_SUPPORT=y") "# CONFIG_SPL_FAT_SUPPORT is not set"))
+                   (("CONFIG_SPL_FS_FAT=y") "# CONFIG_SPL_FS_FAT is not set"))
                  #t)))))))))
 
 (define-public u-boot-cubieboard
diff --git a/gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch b/gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch
new file mode 100644
index 0000000000..a24519d2f4
--- /dev/null
+++ b/gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch
@@ -0,0 +1,48 @@
+From da8dc3e61bab213b322eafeffa2802585508f288 Mon Sep 17 00:00:00 2001
+From: Jordan Hand <jordanhand22@gmail.com>
+Date: Tue, 9 Apr 2019 10:36:09 -0700
+Subject: [PATCH] fdt: Fix mkimage list to try every header type
+Origin: https://patchwork.ozlabs.org/patch/1082572/
+
+Signed-off-by: Jordan Hand <jorhand@microsoft.com>
+---
+ tools/mkimage.c | 23 +++++++++++++++--------
+ 1 file changed, 15 insertions(+), 8 deletions(-)
+
+diff --git a/tools/mkimage.c b/tools/mkimage.c
+index 2899adff81..d1e1a6743d 100644
+--- a/tools/mkimage.c
++++ b/tools/mkimage.c
+@@ -403,14 +403,21 @@ int main(int argc, char **argv)
+ 			exit (EXIT_FAILURE);
+ 		}
+ 
+-		/*
+-		 * scan through mkimage registry for all supported image types
+-		 * and verify the input image file header for match
+-		 * Print the image information for matched image type
+-		 * Returns the error code if not matched
+-		 */
+-		retval = imagetool_verify_print_header_by_type(ptr, &sbuf,
+-				tparams, &params);
++		if (params.fflag) {
++			/*
++			 * Verifies the header format based on the expected header for image
++			 * type in tparams
++			 */
++			retval = imagetool_verify_print_header_by_type(ptr, &sbuf,
++					tparams, &params);
++		} else {
++			/**
++			 * When listing the image, we are not given the image type. Simply check all
++			 * image types to find one that matches our header
++			 */
++			retval = imagetool_verify_print_header(ptr, &sbuf,
++					tparams, &params);
++		}
+ 
+ 		(void) munmap((void *)ptr, sbuf.st_size);
+ 		(void) close (ifd);
+-- 
+2.20.1
+
-- 
2.20.1


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 227 bytes --]

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

* [bug#35217] gnu: u-boot: Update to 2019.04.
       [not found] ` <87zhox33vu.fsf@ponder>
@ 2019-04-10 22:22   ` Vagrant Cascadian
  2019-04-15 21:02     ` Danny Milosavljevic
  0 siblings, 1 reply; 5+ messages in thread
From: Vagrant Cascadian @ 2019-04-10 22:22 UTC (permalink / raw)
  To: 35217

[-- Attachment #1: Type: text/plain, Size: 1629 bytes --]

> On 2019-04-10, Vagrant Cascadian wrote:
> * gnu/packages/bootloaders (u-boot): Update to 2019.04.
...
>   (u-boot-am335x-evm): New variable.
>   (u-boot-am335x-boneblack): Deprecate variable.

The am335x-boneblack configuration was dropped from upstream.

The am335x-evm image is considerably larger than the am335x-boneblack
images, which leads to issues when installing at a device offset, as it
will overwrite the first partition unless the first partition starts
significantly later than most tools (parted, cfdisk) default of sector
2048 (beagleboard.org images start the first partition at sector 8192).

The embedded-os-installation code should probably check to make sure
they aren't trampling the first partition if installing to the raw
device offset.

Alternately, it's possible to copy the u-boot.img onto the first FAT
partition of the microSD/eMMC, which will be loaded instead of the
offset. But that takes some rethinking of how to install the bootloader
(which would be good to not diverge from upstream for other platforms,
such as u-boot-novena).

I've unsuccessfully tried to make a minimal variant of the am335x-evm
that only supports the beaglebone black, by removing the other device
trees, which made it considerably smaller, but not small enough.
Disabling NAND and related features might still be possible, but I
haven't managed to get a configuration that compiles.

So there's no clear upgrade path for existing beaglebone black installs.

The upside to all this is that am335x-evm supports multiple boards!

In light of all that, I'm not sure what a proper way forward is...


live well,
  vagrant

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 227 bytes --]

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

* [bug#35217] gnu: u-boot: Update to 2019.04.
  2019-04-10 22:22   ` Vagrant Cascadian
@ 2019-04-15 21:02     ` Danny Milosavljevic
  2019-04-16  4:46       ` Vagrant Cascadian
  0 siblings, 1 reply; 5+ messages in thread
From: Danny Milosavljevic @ 2019-04-15 21:02 UTC (permalink / raw)
  To: Vagrant Cascadian; +Cc: 35217

[-- Attachment #1: Type: text/plain, Size: 1800 bytes --]

Hi Vagrant,

On Wed, 10 Apr 2019 15:22:18 -0700
Vagrant Cascadian <vagrant@debian.org> wrote:

> > On 2019-04-10, Vagrant Cascadian wrote:
> > * gnu/packages/bootloaders (u-boot): Update to 2019.04.  
> ...
> >   (u-boot-am335x-evm): New variable.
> >   (u-boot-am335x-boneblack): Deprecate variable.  
> 
> The am335x-boneblack configuration was dropped from upstream.
> 
> The am335x-evm image is considerably larger than the am335x-boneblack
> images, which leads to issues when installing at a device offset, as it
> will overwrite the first partition unless the first partition starts
> significantly later than most tools (parted, cfdisk) default of sector
> 2048 (beagleboard.org images start the first partition at sector 8192).
> 
> The embedded-os-installation code should probably check to make sure
> they aren't trampling the first partition if installing to the raw
> device offset.

That would make the parted bindings a hard dependency, probably even
build-side.  But I think that would still be better than the alternative:
destroying user filesystems.

> Alternately, it's possible to copy the u-boot.img onto the first FAT
> partition of the microSD/eMMC, which will be loaded instead of the
> offset. But that takes some rethinking of how to install the bootloader
> (which would be good to not diverge from upstream for other platforms,
> such as u-boot-novena).

Yeah, I think sooner or later it's going to come to this.  Might as well
bite the bullet now.

> In light of all that, I'm not sure what a proper way forward is...

Yeah, sounds like a bad situation with no nice solution that allows
updating of existing installations.  In that case, keeping existing
installations on the old version would be preferrable to breaking
them.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* [bug#35217] gnu: u-boot: Update to 2019.04.
  2019-04-15 21:02     ` Danny Milosavljevic
@ 2019-04-16  4:46       ` Vagrant Cascadian
  2019-04-29 10:35         ` bug#35217: " Danny Milosavljevic
  0 siblings, 1 reply; 5+ messages in thread
From: Vagrant Cascadian @ 2019-04-16  4:46 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: 35217


[-- Attachment #1.1: Type: text/plain, Size: 2862 bytes --]

On 2019-04-15, Danny Milosavljevic wrote:
> On Wed, 10 Apr 2019 15:22:18 -0700
> Vagrant Cascadian <vagrant@debian.org> wrote:
>
>> > On 2019-04-10, Vagrant Cascadian wrote:
>> > * gnu/packages/bootloaders (u-boot): Update to 2019.04.  
>> ...
>> >   (u-boot-am335x-evm): New variable.
>> >   (u-boot-am335x-boneblack): Deprecate variable.  
>> 
>> The am335x-boneblack configuration was dropped from upstream.
>> 
>> The am335x-evm image is considerably larger than the am335x-boneblack
>> images, which leads to issues when installing at a device offset, as it
>> will overwrite the first partition unless the first partition starts
>> significantly later than most tools (parted, cfdisk) default of sector
>> 2048 (beagleboard.org images start the first partition at sector 8192).
>> 
>> The embedded-os-installation code should probably check to make sure
>> they aren't trampling the first partition if installing to the raw
>> device offset.
>
> That would make the parted bindings a hard dependency, probably even
> build-side.  But I think that would still be better than the alternative:
> destroying user filesystems.

Could do some math; e.g. the offset is 768, first sector is 2048. So if
2048-768-(size-of-in-sectors u-boot.img) >> 0, it should be ok. Better
checking that done currently, at least.

But more sophisticated, of course, would be checking the actual layout
of the partition table... some targets (pine64+/pinebook) have offsets
that conflict with GPT partition tables, for example.


>> Alternately, it's possible to copy the u-boot.img onto the first FAT
>> partition of the microSD/eMMC, which will be loaded instead of the
>> offset. But that takes some rethinking of how to install the bootloader
>> (which would be good to not diverge from upstream for other platforms,
>> such as u-boot-novena).
>
> Yeah, I think sooner or later it's going to come to this.  Might as well
> bite the bullet now.

Hmmm...


>> In light of all that, I'm not sure what a proper way forward is...
>
> Yeah, sounds like a bad situation with no nice solution that allows
> updating of existing installations.  In that case, keeping existing
> installations on the old version would be preferrable to breaking
> them.

Short of that, here's an updated u-boot 2019.04 patch that:

- Generates a u-boot-am335x-boneblack package with a slightly modified
  am335x_evm configuration removing extra device-trees; that *should* be
  small enough to fit with the common partition tables (but so far
  untested). It theoretically has about 80k of wiggle-room for
  u-boot.img to grow before it becomes a problem again.

- Better commented patch fixing mkimage to pass test-imagetools test
  suite. Patch was accepted in at least one of the maintainer trees
  upstream.

live well,
  vagrant


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-gnu-u-boot-Update-to-2019.04.patch --]
[-- Type: text/x-diff, Size: 7486 bytes --]

From 2d9f80129801475002f6368074356a5eff9f24b4 Mon Sep 17 00:00:00 2001
From: Vagrant Cascadian <vagrant@debian.org>
Date: Mon, 18 Feb 2019 04:01:23 +0000
Subject: [PATCH] gnu: u-boot: Update to 2019.04.

* gnu/packages/bootloaders (u-boot): Update to 2019.04.
  [source]: Add patch.
  (u-boot-novena): Update dynamic patch to handle variable rename.
  (u-boot-am335x-evm): New variable.
  (u-boot-am335x-boneblack): Build with modified am335x-evm config.
  (u-boot-novena): Fix typo in description.
* gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch: New file.
* gnu/local.mk (dist_patch_DATA): Update accordingly.
---
 gnu/local.mk                                  |  1 +
 gnu/packages/bootloaders.scm                  | 39 +++++++++++--
 ...boot-fix-mkimage-header-verification.patch | 57 +++++++++++++++++++
 3 files changed, 91 insertions(+), 6 deletions(-)
 create mode 100644 gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index df96b98f07..660e96c856 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1308,6 +1308,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/totem-meson-easy-codec.patch		\
   %D%/packages/patches/tuxpaint-stamps-path.patch		\
   %D%/packages/patches/twinkle-include-qregexpvalidator.patch	\
+  %D%/packages/patches/u-boot-fix-mkimage-header-verification.patch	\
   %D%/packages/patches/unzip-CVE-2014-8139.patch		\
   %D%/packages/patches/unzip-CVE-2014-8140.patch		\
   %D%/packages/patches/unzip-CVE-2014-8141.patch		\
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index d6ef7d52b5..a2ac151978 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -378,7 +378,7 @@ tree binary files.  These are board description files used by Linux and BSD.")
 (define u-boot
   (package
     (name "u-boot")
-    (version "2019.01")
+    (version "2019.04")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -386,7 +386,10 @@ tree binary files.  These are board description files used by Linux and BSD.")
                     "u-boot-" version ".tar.bz2"))
               (sha256
                (base32
-                "08hwsmh5xsb1gcxsv8gvx00bai938dm5y3889n8jif3a8rd7xgah"))))
+                "1vwv4bgbl7fjcm073zrphn17hnz5h5h778f88ivdsgbb2lnpgdvn"))
+              (patches
+               (search-patches 
+                "u-boot-fix-mkimage-header-verification.patch"))))
     (native-inputs
      `(("bc" ,bc)
        ("bison" ,bison)
@@ -577,8 +580,32 @@ board-independent tools.")))
 (define-public u-boot-malta
   (make-u-boot-package "malta" "mips64el-linux-gnuabi64"))
 
-(define-public u-boot-beagle-bone-black
-  (make-u-boot-package "am335x_boneblack" "arm-linux-gnueabihf"))
+(define-public u-boot-am335x-boneblack
+  (let ((base (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf")))
+    (package
+      (inherit base)
+      (name "u-boot-am335x-boneblack")
+      (description "U-Boot is a bootloader used mostly for ARM boards. It
+also initializes the boards (RAM etc).
+
+This U-Boot is built for the BeagleBone Black, which was removed upstream,
+adjusted from the am335x_evm build with several device trees removed so that
+it fits within common partitioning schemes.")
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'patch-defconfig
+               ;; Patch out other devicetrees to build image small enough to
+               ;; fit within typical partitioning schemes where the first
+               ;; partition begins at sector 2048.
+               (lambda _
+                 (substitute* "configs/am335x_evm_defconfig"
+                   (("CONFIG_OF_LIST=.*$") "CONFIG_OF_LIST=\"am335x-evm am335x-boneblack\"\n"))
+                 #t)))))))))
+
+(define-public u-boot-am335x-evm
+  (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf"))
 
 (define-public (make-u-boot-sunxi64-package board triplet)
   (let ((base (make-u-boot-package board triplet)))
@@ -637,7 +664,7 @@ board-independent tools.")))
 also initializes the boards (RAM etc).
 
 This U-Boot is built for Novena.  Be advised that this version, contrary
-to Novena upstream, does not load u-boot.img from the first patition.")
+to Novena upstream, does not load u-boot.img from the first partition.")
       (arguments
        (substitute-keyword-arguments (package-arguments base)
          ((#:phases phases)
@@ -647,7 +674,7 @@ to Novena upstream, does not load u-boot.img from the first patition.")
                ;; allowing it to be installed at a device offset.
                (lambda _
                  (substitute* "configs/novena_defconfig"
-                   (("CONFIG_SPL_FAT_SUPPORT=y") "# CONFIG_SPL_FAT_SUPPORT is not set"))
+                   (("CONFIG_SPL_FS_FAT=y") "# CONFIG_SPL_FS_FAT is not set"))
                  #t)))))))))
 
 (define-public u-boot-cubieboard
diff --git a/gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch b/gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch
new file mode 100644
index 0000000000..063677db4a
--- /dev/null
+++ b/gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch
@@ -0,0 +1,57 @@
+From 48b52117235928cfd7ef1ec5c3f2cff5d7b03862 Mon Sep 17 00:00:00 2001
+From: Jordan Hand <jordanhand22@gmail.com>
+Date: Wed, 10 Apr 2019 09:46:32 -0700
+Subject: [PATCH,v2] fdt: Fix mkimage list to try every header type
+Origin: https://patchwork.ozlabs.org/patch/1083495/
+
+Image type is not supplied to `mkimage -l`. For this reason, we cannot
+use imagetool_verify_print_header_by_type. Instead, this patch uses
+imagetool_verify_print_header to look through all header types to find
+one where image validation succeeds.
+
+This patch fixes failures in test/image/test-imagetools.sh
+
+Signed-off-by: Jordan Hand <jorhand@microsoft.com>
+Tested-by: Alex Kiernan <alex.kiernan@gmail.com>
+Tested-by: Vagrant Cascadian <vagrant@debian.org>
+---
+ tools/mkimage.c | 23 +++++++++++++++--------
+ 1 file changed, 15 insertions(+), 8 deletions(-)
+
+diff --git a/tools/mkimage.c b/tools/mkimage.c
+index 2899adff81..76c3406d37 100644
+--- a/tools/mkimage.c
++++ b/tools/mkimage.c
+@@ -403,14 +403,21 @@ int main(int argc, char **argv)
+ 			exit (EXIT_FAILURE);
+ 		}
+ 
+-		/*
+-		 * scan through mkimage registry for all supported image types
+-		 * and verify the input image file header for match
+-		 * Print the image information for matched image type
+-		 * Returns the error code if not matched
+-		 */
+-		retval = imagetool_verify_print_header_by_type(ptr, &sbuf,
+-				tparams, &params);
++		if (params.fflag) {
++			/*
++			 * Verifies the header format based on the expected header for
++			 * image type in tparams
++			 */
++			retval = imagetool_verify_print_header_by_type(ptr, &sbuf,
++					tparams, &params);
++		} else {
++			/**
++			 * When listing the image, we are not given the image type. Simply check all
++			 * image types to find one that matches our header
++			 */
++			retval = imagetool_verify_print_header(ptr, &sbuf,
++					tparams, &params);
++		}
+ 
+ 		(void) munmap((void *)ptr, sbuf.st_size);
+ 		(void) close (ifd);
+-- 
+2.20.1
+
-- 
2.20.1


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 227 bytes --]

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

* bug#35217: gnu: u-boot: Update to 2019.04.
  2019-04-16  4:46       ` Vagrant Cascadian
@ 2019-04-29 10:35         ` Danny Milosavljevic
  0 siblings, 0 replies; 5+ messages in thread
From: Danny Milosavljevic @ 2019-04-29 10:35 UTC (permalink / raw)
  To: Vagrant Cascadian; +Cc: 35217-done

[-- Attachment #1: Type: text/plain, Size: 84 bytes --]

Thanks!  Pushed to guix master as commit 6b99afeef89233b71d113a63cf04a6b4b49a4679.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

end of thread, other threads:[~2019-04-29 10:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-10  7:39 [bug#35217] gnu: u-boot: Update to 2019.04 Vagrant Cascadian
     [not found] ` <87zhox33vu.fsf@ponder>
2019-04-10 22:22   ` Vagrant Cascadian
2019-04-15 21:02     ` Danny Milosavljevic
2019-04-16  4:46       ` Vagrant Cascadian
2019-04-29 10:35         ` bug#35217: " Danny Milosavljevic

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