unofficial mirror of help-guix@gnu.org 
 help / color / mirror / Atom feed
* Guix on Novena
@ 2020-09-01  9:38 Andreas Enge
  2020-09-01 16:41 ` Vagrant Cascadian
  0 siblings, 1 reply; 12+ messages in thread
From: Andreas Enge @ 2020-09-01  9:38 UTC (permalink / raw)
  To: help-guix

Hello,

I would like to put our armhf Novena board back into service for the Guix
build farm. In the past, I have been using Guix on Debian on the machine.
Has anyone had success in installing Guix "The GNU System" on a Novena?
If yes, could you point me to a write-up on what to do or otherwise help
me get going?

Thanks a lot,

Andreas



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

* Re: Guix on Novena
  2020-09-01  9:38 Guix on Novena Andreas Enge
@ 2020-09-01 16:41 ` Vagrant Cascadian
  2020-09-01 18:06   ` Andreas Enge
  0 siblings, 1 reply; 12+ messages in thread
From: Vagrant Cascadian @ 2020-09-01 16:41 UTC (permalink / raw)
  To: Andreas Enge; +Cc: help-guix

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

On 2020-09-01, Andreas Enge wrote:
> I would like to put our armhf Novena board back into service for the Guix
> build farm. In the past, I have been using Guix on Debian on the machine.
> Has anyone had success in installing Guix "The GNU System" on a Novena?
> If yes, could you point me to a write-up on what to do or otherwise help
> me get going?

I have one and had a Guix System install on it, but it's been some
months since I've booted it. There's another bug I need to test with it,
so I'll dig it out of the closet sometime soon so I can poke at the
configuration and check the latest status...

The hardest thing was always specifying all the right initrd modules in
the operating system configuration to use "linux-libre", especially as
the modules needed sometimes change between kernel versions. I've
usually had more luck with "linux-libre-arm-generic" which usually works
fine for headless systems and has more things configured as builtins.


live well,
  vagrant

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

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

* Re: Guix on Novena
  2020-09-01 16:41 ` Vagrant Cascadian
@ 2020-09-01 18:06   ` Andreas Enge
  2020-09-02 17:30     ` Vagrant Cascadian
  0 siblings, 1 reply; 12+ messages in thread
From: Andreas Enge @ 2020-09-01 18:06 UTC (permalink / raw)
  To: Vagrant Cascadian; +Cc: help-guix

On Tue, Sep 01, 2020 at 09:41:04AM -0700, Vagrant Cascadian wrote:
> I have one and had a Guix System install on it, but it's been some
> months since I've booted it. There's another bug I need to test with it,
> so I'll dig it out of the closet sometime soon so I can poke at the
> configuration and check the latest status...

Okay, if you get round to it, it would be most welcome if you could share
your experience!

Andreas



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

* Re: Guix on Novena
  2020-09-01 18:06   ` Andreas Enge
@ 2020-09-02 17:30     ` Vagrant Cascadian
  2020-09-02 18:05       ` Andreas Enge
  0 siblings, 1 reply; 12+ messages in thread
From: Vagrant Cascadian @ 2020-09-02 17:30 UTC (permalink / raw)
  To: Andreas Enge; +Cc: help-guix


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

On 2020-09-01, Andreas Enge wrote:
> On Tue, Sep 01, 2020 at 09:41:04AM -0700, Vagrant Cascadian wrote:
>> I have one and had a Guix System install on it, but it's been some
>> months since I've booted it.
...
> Okay, if you get round to it, it would be most welcome if you could share
> your experience!

I haven't finished upgrading to a more recent guix, but attached is a
slightly trimmed down config that I used as recently as March.

live well,
  vagrant

[-- Attachment #1.2: config-novena.scm --]
[-- Type: application/octet-stream, Size: 2091 bytes --]

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

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

* Re: Guix on Novena
  2020-09-02 17:30     ` Vagrant Cascadian
@ 2020-09-02 18:05       ` Andreas Enge
  2020-09-02 18:33         ` Vagrant Cascadian
  0 siblings, 1 reply; 12+ messages in thread
From: Andreas Enge @ 2020-09-02 18:05 UTC (permalink / raw)
  To: Vagrant Cascadian; +Cc: help-guix

On Wed, Sep 02, 2020 at 10:30:22AM -0700, Vagrant Cascadian wrote:
> I haven't finished upgrading to a more recent guix, but attached is a
> slightly trimmed down config that I used as recently as March.

Great, thanks!

So far, I have been upgrading the machine to Debian buster. There are
scripts to do so here, prepared by a person formerly active on the Guix
list as well:
   https://github.com/novena-next/docs
But essentially "apt-get dist-upgrade" first to stretch and then to buster
work. So the next step will be to backup the sd card using dd...

As for installing the Guix system on arm machines, I am quite lost.
The installer does not work, or does it? Apart from that, I only know
the dirty way of installing the Guix package manager and running a
"guix system init", thus interleaving the new system with Debian
remainders. Are there better ways?

In this special case of a build machine, we did not want to run the build
on the (moreover small) sd card, so we bind mounted (why that? a normal
mount would have been enough, I think) /tmp and /gnu/store from an external
hard drive. That should be handable in the standard way by a file-systems
entry, I suppose. Or maybe simply mount the complete / from the external
hard drive? That should even be compatible with the dirty "guix system init"
approach, I think.

Your thoughts are welcome.

Thanks,

Andreas



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

* Re: Guix on Novena
  2020-09-02 18:05       ` Andreas Enge
@ 2020-09-02 18:33         ` Vagrant Cascadian
  2020-09-06  8:45           ` Andreas Enge
  0 siblings, 1 reply; 12+ messages in thread
From: Vagrant Cascadian @ 2020-09-02 18:33 UTC (permalink / raw)
  To: Andreas Enge; +Cc: help-guix

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

On 2020-09-02, Andreas Enge wrote:
> On Wed, Sep 02, 2020 at 10:30:22AM -0700, Vagrant Cascadian wrote:
> As for installing the Guix system on arm machines, I am quite lost.
> The installer does not work, or does it? Apart from that, I only know
> the dirty way of installing the Guix package manager and running a
> "guix system init", thus interleaving the new system with Debian
> remainders. Are there better ways?

Most of my arm installs were done by installing the guix binary release
on Debian and then "guix system init" onto another partition, and then
marking the appropriate partition as bootable.


> In this special case of a build machine, we did not want to run the
> build on the (moreover small) sd card, so we bind mounted (why that? a
> normal mount would have been enough, I think) /tmp and /gnu/store from
> an external hard drive. That should be handable in the standard way by
> a file-systems entry, I suppose. Or maybe simply mount the complete /
> from the external hard drive? That should even be compatible with the
> dirty "guix system init" approach, I think.

Yes, I would recommend installing Guix System directly to SATA, since
u-boot can boot from SATA partitions marked bootable (either MBR or GPT
though what GPT calls it I forget), and SATA will perform better, of
course.


live well,
  vagrant

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

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

* Re: Guix on Novena
  2020-09-02 18:33         ` Vagrant Cascadian
@ 2020-09-06  8:45           ` Andreas Enge
  2020-09-06 14:23             ` Vagrant Cascadian
                               ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Andreas Enge @ 2020-09-06  8:45 UTC (permalink / raw)
  To: Vagrant Cascadian; +Cc: help-guix

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

Hello,

sorry for what are probably silly questions, I have difficulties wrapping
my head around how installation works. I am attaching my current
configuration, copy-pasted from our Overdrive machines and augmented
by snippets from yours, Vagrant.

Right now I am on Debian with Guix as package manager, running from the
SD card. After reading up through the last half year of guix-devel and
help-guix, I realise that I could have followed
   https://lists.gnu.org/archive/html/help-guix/2020-04/msg00051.html ;
apparently
   guix system disk-image -e "(@ (gnu system install) novena-installation-os)"
executed on an aarch64 machine should have created a bootable SD card
image with only Guix. Something to try next time! (By the way, swapping
the micro-SD card is rather finicky on this board, and I try to avoid it).

On Wed, Sep 02, 2020 at 11:33:22AM -0700, Vagrant Cascadian wrote:
> Yes, I would recommend installing Guix System directly to SATA, since
> u-boot can boot from SATA partitions marked bootable (either MBR or GPT
> though what GPT calls it I forget), and SATA will perform better, of
> course.

So far, I am using an external USB disk, which probably is not in the
boot sequence.
This is why the configuration has this:
  (bootloader (bootloader-configuration
               (bootloader u-boot-novena-bootloader)
               (target "/dev/mmcblk1")))
to boot from the SD card. By the way, why /dev/mmcblk1, which also appears
in the installation-os? Is this valid when an additional SATA disk is plugged
in? My SD card is called /dev/mmcblk0, and there are several partitions;
do I give /dev/mmcblk0 or /dev/mmcblk0p1 as the argument?

Then later I have:
  (file-systems (cons* (file-system
                         (device (uuid "f1062993-3776-47d2-8900-9e4f1d9fc8aa")) ; /dev/sda1
                         (mount-point "/")
                         (type "ext4"))
                       %base-file-systems))
so that the store and everything else should be on the disk.

Will this separation work?

Will mounting /dev/sda1 to /mnt and issuing "guix system init config.scm /mnt"
work? (The handbook suggests to do "herd start cow-store /mnt", but I forgot
what this is needed for.) Will it populate only /mnt/gnu/store, or also
/gnu/store from the place where I call "guix system init"? Since the latter
is almost full.

Thanks for your enlightenment,

Andreas


[-- Attachment #2: redhill.scm --]
[-- Type: text/plain, Size: 3545 bytes --]

;; GuixSD configuration file for the Novena build machines.
;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;; Copyright © 2019, 2020 Andreas Enge <andreas@enge.fr`
;; Released under the GNU GPLv3 or any later version.

(use-modules (guix) (gnu) (gnu bootloader u-boot))
(use-service-modules networking mcron ssh)
(use-package-modules bootloaders screen ssh linux vim)

(define (sysadmin name full-name)
  (user-account
   (name name)
   (comment full-name)
   (group "users")
   (supplementary-groups '("wheel" "kvm"))
   (home-directory (string-append "/home/" name))))

(define %accounts
  (list (sysadmin "andreas" "Andreas Enge")
        (user-account
         (name "hydra")
         (comment "Hydra User")
         (group "users")
         (home-directory (string-append "/home/" name)))
        (user-account
         (name "bayfront")
         (comment "Bayfront Offload")
         (group "users")
         (home-directory (string-append "/home/" name)))))

(define %authorized-guix-keys
  ;; List of authorized 'guix archive' keys.
  (list (local-file "keys/guix/berlin.guixsd.org-export.pub")
        (local-file "keys/guix/bayfront.guix.info-export.pub")))

(define gc-job
  ;; Run 'guix gc' at 3AM every day.
  #~(job '(next-hour '(3)) "guix gc -F 50G"))


;; The actual machine.

(operating-system
  (host-name "redhill")
  (timezone "Europe/Paris")
  (locale "en_US.UTF-8")

  (bootloader (bootloader-configuration
               (bootloader u-boot-novena-bootloader)
               (target "/dev/mmcblk1")))
  ;; These modules are required to mount the SATA partition.
  ;; Suggested by Vagrant Cascadian; they might not actually be needed
  ;; for us.
  (initrd-modules (cons* "ahci_imx" "libata" "sd_mod"
                         %base-initrd-modules))

  (file-systems (cons* (file-system
                         (device (uuid "f1062993-3776-47d2-8900-9e4f1d9fc8aa"))
                         (mount-point "/")
                         (type "ext4"))
                       %base-file-systems))

  (users (append %accounts %base-user-accounts))
  (services (cons* (service openssh-service-type
                            (openssh-configuration
                             (permit-root-login 'without-password)
                             (authorized-keys
                              `(("andreas" ,(local-file "keys/ssh/andreas.pub"))
                                ("root" ,(local-file "keys/ssh/andreas.pub"))))))
                   (service dhcp-client-service-type)
                   (service mcron-service-type
                            (mcron-configuration
                             (jobs (list gc-job))))

                   (service agetty-service-type
                            (agetty-configuration
                             (extra-options '("-L"))
                             (tty "ttymxc1")
                             (term "screen")
                             (baud-rate "115200")))

                   (service ntp-service-type)

                   (modify-services %base-services
                     (guix-service-type config =>
                                        (guix-configuration
                                         (inherit config)
                                         (use-substitutes? #f)
                                         (max-silent-time 7200)
                                         (authorized-keys
                                          %authorized-guix-keys))))))

  (packages (cons* screen openssh u-boot-novena vim %base-packages)))

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

* Re: Guix on Novena
  2020-09-06  8:45           ` Andreas Enge
@ 2020-09-06 14:23             ` Vagrant Cascadian
  2020-09-07 20:12               ` Andreas Enge
  2020-09-07 12:11             ` Andreas Enge
  2020-09-08 10:56             ` Andreas Enge
  2 siblings, 1 reply; 12+ messages in thread
From: Vagrant Cascadian @ 2020-09-06 14:23 UTC (permalink / raw)
  To: Andreas Enge; +Cc: help-guix

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

On 2020-09-06, Andreas Enge wrote:
> On Wed, Sep 02, 2020 at 11:33:22AM -0700, Vagrant Cascadian wrote:
>> Yes, I would recommend installing Guix System directly to SATA, since
>> u-boot can boot from SATA partitions marked bootable (either MBR or GPT
>> though what GPT calls it I forget), and SATA will perform better, of
>> course.
>
> So far, I am using an external USB disk, which probably is not in the
> boot sequence.

From the u-boot prompt:

  printenv boot_targets

Should output something like:

  mmc1 mmc0 sata0 usb0 pxe

Doing:

  setenv boot_targets usb0

Might get it to boot from usb only... I've also had occasional troubles
with some USB ports on the novena, so you might need to move it between
ports to find one that works consistantly.


> This is why the configuration has this:
>   (bootloader (bootloader-configuration
>                (bootloader u-boot-novena-bootloader)
>                (target "/dev/mmcblk1")))
> to boot from the SD card. By the way, why /dev/mmcblk1, which also appears
> in the installation-os? Is this valid when an additional SATA disk is plugged
> in? My SD card is called /dev/mmcblk0, and there are several partitions;
> do I give /dev/mmcblk0 or /dev/mmcblk0p1 as the argument?

The bootloader needs to be installed on the raw SD device, not a
partition, so /dev/mmcblk0 or /dev/mmcblk1 (or if you're installing the
bootloader using an sd-to-usb adapter, /dev/sd{a,b...}).

I'm not sure if the bootloader can be installed on the full-sized SD
slot, but certainly works with the annoying microSD slot. Sometimes the
enumeration of the device number may vary from one kernel version or
even boot to the next (though it's gotten more stable in recent years).

I forget off the top of my head how you can pass a no-op to the boot
configuration to just generate the extlinux.conf that is used by u-boot,
but that's also an option to relying on the existing boot loader,
presuming it supports all the features you need to boot (e.g. u-boot's
distro_boot support).


> Then later I have:
>   (file-systems (cons* (file-system
>                          (device (uuid "f1062993-3776-47d2-8900-9e4f1d9fc8aa")) ; /dev/sda1
>                          (mount-point "/")
>                          (type "ext4"))
>                        %base-file-systems))
> so that the store and everything else should be on the disk.
>
> Will this separation work?

Should be fine, yes.


> Will mounting /dev/sda1 to /mnt and issuing "guix system init config.scm /mnt"
> work? (The handbook suggests to do "herd start cow-store /mnt", but I forgot
> what this is needed for.) Will it populate only /mnt/gnu/store, or also
> /gnu/store from the place where I call "guix system init"? Since the latter
> is almost full.

Someone else will have to answer this; it's been too long since I've
installed that way.

Thanks for working on getting some armhf build machines going!


After nearly a full day of building guile-static, I finally managed to
get the novena installation updated to a recent guix, running
linux-libre@5.8 (as well as testing 5.4 and various
linux-libre-arm-generic builds).


live well,
  vagrant

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

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

* Re: Guix on Novena
  2020-09-06  8:45           ` Andreas Enge
  2020-09-06 14:23             ` Vagrant Cascadian
@ 2020-09-07 12:11             ` Andreas Enge
  2020-09-08 10:56             ` Andreas Enge
  2 siblings, 0 replies; 12+ messages in thread
From: Andreas Enge @ 2020-09-07 12:11 UTC (permalink / raw)
  To: Vagrant Cascadian; +Cc: help-guix

Replying to self:

On Sun, Sep 06, 2020 at 10:45:22AM +0200, Andreas Enge wrote:
> Will mounting /dev/sda1 to /mnt and issuing "guix system init config.scm /mnt"
> work? (The handbook suggests to do "herd start cow-store /mnt", but I forgot
> what this is needed for.) Will it populate only /mnt/gnu/store, or also
> /gnu/store from the place where I call "guix system init"? Since the latter
> is almost full.

Indeed this is a big problem: Everything is first stored in the local store:
The linux source, the deblobbing scripts, the deblobbed linux-libre source,
and so on; including a copy of guix as well as a grafted copy of guix.
Deduplication should help a little, but it appears only at the end of the
build. And being too generous with "guix gc" risks wasting hours of
compilation time. Instead I should have been more generous and replaced the
old micro-SD card :)

On Sun, Sep 06, 2020 at 07:23:33AM -0700, Vagrant Cascadian wrote:
> Thanks for working on getting some armhf build machines going!

Well, it had been working previously with Guix on Debian, but the Novena
support has improved so much over the years that I wanted to try the full
Guix experience. If I do not manage, I can still do a Guix on Debian...

Andreas



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

* Re: Guix on Novena
  2020-09-06 14:23             ` Vagrant Cascadian
@ 2020-09-07 20:12               ` Andreas Enge
  0 siblings, 0 replies; 12+ messages in thread
From: Andreas Enge @ 2020-09-07 20:12 UTC (permalink / raw)
  To: Vagrant Cascadian; +Cc: help-guix

On Sun, Sep 06, 2020 at 07:23:33AM -0700, Vagrant Cascadian wrote:
> I'm not sure if the bootloader can be installed on the full-sized SD
> slot, but certainly works with the annoying microSD slot. Sometimes the
> enumeration of the device number may vary from one kernel version or
> even boot to the next (though it's gotten more stable in recent years).

I tried the (micro-)SD card with an adapter in the big slot, and my board
does not boot from it out of the box.

And the current SD card is too small to hold enough of Guix to do a
"guix system init". Moreover, when trying to copy it via dd, an error
occurs, which is always suspicious... So I will have to buy a new card.
I am sure there is an envelope somewhere with a bunch of micro-SD
cards, but I do not quite remember where.

Maybe it is time to put this project on hold for a few days, also given
the little power the machine has... I feel like I am putting more energy
into getting it set up than we will get out of its package building power.

Andreas



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

* Re: Guix on Novena
  2020-09-06  8:45           ` Andreas Enge
  2020-09-06 14:23             ` Vagrant Cascadian
  2020-09-07 12:11             ` Andreas Enge
@ 2020-09-08 10:56             ` Andreas Enge
  2020-09-08 12:30               ` Efraim Flashner
  2 siblings, 1 reply; 12+ messages in thread
From: Andreas Enge @ 2020-09-08 10:56 UTC (permalink / raw)
  To: Vagrant Cascadian; +Cc: help-guix

On Sun, Sep 06, 2020 at 10:45:22AM +0200, Andreas Enge wrote:
>    guix system disk-image -e "(@ (gnu system install) novena-installation-os)"
> executed on an aarch64 machine should have created a bootable SD card
> image with only Guix.

I could not resist and gave it a try, however it failed (very late, after
building the kernel and qemu) with this message:
==================================
2 of 16 tests failed
Please report to bug-guile@gnu.org
==================================
make[4]: *** [Makefile:797: check-TESTS] Error 1
make[4]: Leaving directory '/tmp/guix-build-guile-1.8.8.drv-0/guile-1.8.8/test-suite/standalone'

Do we really still depend on guile-1.8.8? I doubt the guile maintainers
will fix this bug... Maybe building the package on a real armhf machine will
work.

Andreas



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

* Re: Guix on Novena
  2020-09-08 10:56             ` Andreas Enge
@ 2020-09-08 12:30               ` Efraim Flashner
  0 siblings, 0 replies; 12+ messages in thread
From: Efraim Flashner @ 2020-09-08 12:30 UTC (permalink / raw)
  To: Andreas Enge; +Cc: Vagrant Cascadian, help-guix

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

On Tue, Sep 08, 2020 at 12:56:22PM +0200, Andreas Enge wrote:
> On Sun, Sep 06, 2020 at 10:45:22AM +0200, Andreas Enge wrote:
> >    guix system disk-image -e "(@ (gnu system install) novena-installation-os)"
> > executed on an aarch64 machine should have created a bootable SD card
> > image with only Guix.
> 
> I could not resist and gave it a try, however it failed (very late, after
> building the kernel and qemu) with this message:
> ==================================
> 2 of 16 tests failed
> Please report to bug-guile@gnu.org
> ==================================
> make[4]: *** [Makefile:797: check-TESTS] Error 1
> make[4]: Leaving directory '/tmp/guix-build-guile-1.8.8.drv-0/guile-1.8.8/test-suite/standalone'
> 
> Do we really still depend on guile-1.8.8? I doubt the guile maintainers
> will fix this bug... Maybe building the package on a real armhf machine will
> work.
> 
> Andreas
> 

ah, fdisk. One of 6 packages still using guile-1.8.

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

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

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

end of thread, other threads:[~2020-09-08 12:37 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-01  9:38 Guix on Novena Andreas Enge
2020-09-01 16:41 ` Vagrant Cascadian
2020-09-01 18:06   ` Andreas Enge
2020-09-02 17:30     ` Vagrant Cascadian
2020-09-02 18:05       ` Andreas Enge
2020-09-02 18:33         ` Vagrant Cascadian
2020-09-06  8:45           ` Andreas Enge
2020-09-06 14:23             ` Vagrant Cascadian
2020-09-07 20:12               ` Andreas Enge
2020-09-07 12:11             ` Andreas Enge
2020-09-08 10:56             ` Andreas Enge
2020-09-08 12:30               ` Efraim Flashner

unofficial mirror of help-guix@gnu.org 

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://yhetil.org/guix-user/0 guix-user/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 guix-user guix-user/ https://yhetil.org/guix-user \
		help-guix@gnu.org
	public-inbox-index guix-user

Example config snippet for mirrors.
Newsgroups are available over NNTP:
	nntp://news.yhetil.org/yhetil.gnu.guix.user
	nntp://news.gmane.io/gmane.comp.gnu.guix.user


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git