Nonguix Installation Diary

Similar to others’ posts, this is to capture the process I’m taking to install the non-free Guix ISO. As of now, it is unsuccessful. Error reports without verbose error messages are worthless, so I will be including those soon to this very-rough draft.

Systems: a HP desktop with LinuxMint 22.3 and Guix 1.4.0, a Thinkpad L13 Yoga laptop, dual-booting Lubuntu 24.04 and Guix System 1.5.0. The goal is to get nonfree Guix System on the Thinkpad so that I can use its Intel wifi card.

So far, with 8 days / 22 logged hours on this, innumerable errors of different types have popped up.

Building the ISO from the shell script in this release on desktop LinuxMint / Guix 1.4.0 fails because of 1.4.0 dependencies. Updating Guix to 1.5.0 (using the official tarball, after removing 1.4.0) failed for forgotten reasons (if this is the best way to do this, I’ll try again and record the error).

Switching to attempts with Guix System 1.5.0 itself, I tried to augment the channels.scm and config.scm to reach the nonguix channels and to include the nonfree linux kernel, initrd, and linux-firmware per the instructions in the Nonguix Gitlab. This is where I spent most of my time, and every attempt puked on a different package. Eventually the system became unusable until I cleared cache.

The last try was to run the build-iso.sh on the laptop’s Guix System 1.5.0 itself. This got the closest to success, but ran into RAM issues (Thinkpad only has 8G). Increasing swap space and removing explicit packages from installer.scm helped with this, but package failures similar to the previous step occurred.

Current attempt is to install the very old ISO from here directly. Let it run all night, and it’s hung up on “mounting to /mnt”.

I cannot wait for this post to soon include [SOLVED]!

[SOLVED]!!!

Chalk it up to user error for the most part. I ended up going this route:

  • install vanilla Guix System
  • adding in nonguix channels; pulling
  • reconfiguring, with a plain ol config.scm
  • updating config.scm to grab nonlibre kernel and iwlwifi-firmware, then reconfiguring.

The first pull and the second reconfigure took several attempts to complete successfully, but it’s all working now. The second reconfigure’s successful run took about two hours once it got going, and my poor little laptop became boiling hot.

(Pictured: mood, right now)

Try to find the parts that get compiled and try to use precompiled versions.
For example I still compile the kernel but I stopped using Firefox and replaced it with IceCat :wink:

Seems to be an officially licensed nonguix moment at this point with the substitution server situation lol. I’m starting to accept the idea that i might just have to get used to compiling my kernel. Only takes around half an hour on my main pc, but my laptop takes atleast 1,5 hours or something. I should probably look into making my server a build machine once i get the courage to install guix on there. It has a bit of an older cpu in it compared to my main pc but it does have 12 cores, so i’m guessing it would take about half an hour as well to compile a kernel.

Guix has epiphany as a choice.

Note that guix makes it really easy to make your most powerful machine a local substitute server for the laptop. The deets are in this blogpost on futurile.

I have this in my system config :

     ;; Make compiled Guix packages available on LAN to reduce load on public substitute servers.
     (service guix-publish-service-type
              (guix-publish-configuration
               (host "0.0.0.0")
               (port 7777)
               (advertise? #t))))

When pulling on my other system I see it is dynamically added and it pulls from there.

Yes! That’s what i wanted to setup as well, but i wasn’t sure how to exactly go about it yet, so i could definitely use that blogpost. It looks like a setup like that should also work when you’re hosting your own wireguard vpn right? that way you could also pull packages from a commit that you’ve compiled on the server to the laptop when you’re away from home.

That should work fine within the limitations of wireguard, firewalls, NAT etc. I chickened out and just setup a tailscale network to let them figure it out to do the mesh connections and that seems to work for pulling from the substitute server. I am also running a cuirass server, mainly to run CI for my personal channel, but now I try to make it a substitute server for my machines over wireguard/tailscale.