bug-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#46942: ci.guix.gnu.org is slow from my system


From: raid5atemyhomework
Subject: bug#46942: ci.guix.gnu.org is slow from my system
Date: Sat, 06 Mar 2021 00:23:36 +0000

Hi zimoun,

Thanks, this is a definite improvement and I have set both systems to use it as 
the first item in `substitute-server`. I'll make a patch for the manual at 
least, then close this issue once that patch is accepted.

So I was thinking of modifying the installer so at least some page offers up 
options for mirrors. However, because of the way the installer works, it would 
have to be done by `(gnu installer services)`, which does not use 
`modify-services` on the base service list.

What the installer expects is that services will have their own `(service 
<type> <config>)` entry, without modifying the base service type.

What I *want* to do would be to have an extensible 
`guix-substitute-url-service-type`.  Unfortunately the existing 
`guix-service-type` accepts a list of build directories to `chroot`.

So here's a sketch:

* Create a new `guix-daemon-service-type` and move most of the 
`guix-service-type` code into it.
  * This is extensible; extensions provide a procedure which accepts a 
`<guix-configuration>` record and outputs a `<guix-configuration>` record.
  * `(compose (cut apply compose <>))`
  * `(extend (lambda (config modifier) (modifier config)))`
* Create a new `guix-build-chroot-service-type` which just extends 
`guix-daemon-service-type`:
  * `(service-extension guix-daemon-service-type (lambda (build-chroots) 
(lambda (guix-config) (guix-configuration (inherit guix-config) 
(chroot-directories (append (guix-configuration-chroot-directories guix-config) 
build-chroots))))))`
* `(define-deprecated guix-service-type guix-build-chroot-service-type)`
  * I mean seriously why does Guix assume only one configuration field of a 
base system service is usefully extensible, it seems to me that the general 
pattern should be that basic system service types should be extensible by a 
procedure that accepts an existing configuration record and returns a modified 
configuration record, then just define individual service types for each 
list-of-foo field of the configuration record to make a convenient way to 
extend such lists.
* Create a new `guix-substitute-url-service-type` similar to 
`guix-build-chroot-service-type`, which prepends a list of substitute URLs to 
the one in the configuration.

Then finally in the installer side:

* in `(gnu installer services)` add something like:
  * `(system-service (name (G_ "https://mirrors.sjtug.sjtu.edu.cn/guix/ (SJTUG, 
China)")) (type 'substitute-url) (snippet '((simple-service 
guix-substitute-url-service-type (list 
"https://mirrors.sjtug.sjtu.edu.cn/guix/";)))))`
  * `(system-service (name (G_ "https://ci.guix.gnu.org (Guix, Germany) - no 
mirror") (type 'substitute-url) (snippet '())))`
* In `(gnu installer newt services)`, add a page for substitute URL mirrors, 
probably a `run-listbox-selection-page`.
  * `(G_ "You can select a mirror that is nearer to you for faster updating of 
packages. The main Guix substitute server, https://ci.guix.gnu.org/, will 
always be set as a fallback, so even if the mirror goes down, you can still 
upgrade from the main Guix substitute server.")`

Is that something that has any chance of getting accepted into Guix? I'd rather 
not do any coding unless this has any chance at all of getting merged in.

Thanks
raid5atemyhomework





reply via email to

[Prev in Thread] Current Thread [Next in Thread]