On Wed, 26 Nov 2025 23:43:16 +0200 Roman Riabenko via <[email protected]> wrote: > There are some images for small SBCs in gnu/system/images. I assume > that there is more interest in development for 64 bit ARM, so it is a > safer bet to choose it. I also think so.
Here's what I learned trying to add support for a computer
(rock-4c-plus) and/or by using the ARM port:
- You really need to do the installation with an image. For my server,
I installed it years ago and I didn't do an image at that time and
the result is that 'guix system reconfigure' broke the boot at some
point. So only select computers with an image or consider contributing
an image for the computer you want in Guix.
- Images should support BTRFS, ext{2,3,4}, F2FS, FAT, and swap
partitions.
Guix can still boot if it doesn't find the swap.
XFS could probably be added with the latest xfsprogs.
Adding LUKS support may be doable with cryptsetup-reencrypt but it
might also require consideration on if the API of images needs to be
changed or not as a LUKS partition needs to contain a filesystem
somehow.
For adding support for other filesystem (exfat, NILFS2, etc) you will
need to add support upstream in their tools (like exfat-utils /
exfat-progs) to create them from a directory somehow without root and
without mounting anything and reuse that in Guix.
- Encrypting the rootfs is probably doable but way way harder. You might
need to boot on GRUB somehow to be able to do that, and so you might
need to have u-boot be configured to support UEFI, and have u-boot
load GRUB, which supports LUKS1. And there is the problem that you
need to generate images for the first installation, so you'll need to
find a way to convert an existing installation to be encrypted.
- Some/all images ship with linux-libre-arm64-generic, and it
boots fine but personally I miss some modules (like wireguard).
- It is possible to use regular linux-libre / linux-libre-lts instead
but you need to find the list of modules to load at boot. I'm in the
process of doing that for the 64bit ARM computers I have but it will
take some time. I also hope that the patches will be accepted.
- Also note that not every build system supports cross compilation, so
depending on your needs you might need to first build an image that
boots and then use 'guix system reconfigure'.
- Guix uses upstream u-boot configuration as much as possible, so if
you want configuration changes you will need to upstream them in
u-boot instead of Guix, but this is also relatively easy to do
anyway.
And Guix also wants the u-boot images to support a wide variety of
boot medias, so far with what I tested I could easily install Guix on
an USB key and the bootloader on a microSD for instance, but that
might depend on your board.
- Since Guix depends on Linux as well, your board needs to be well
supported by Linux as well. For instance I've a rock-4c-plus and it
has an M2 connector for SSDs. To make patches for switching its image
to linux-libre, a friend lent me an SSD and at the end I've learned
that upstream Linux didn't support this m2 connector yet. I still
need to get an eMMC for this computer to finish the patches.
- eMMCs are usually way faster than microSD. It might also be
interesting in having onboard storage somehow (either a flash chip or
an eMMC with boot partitions) as later on this could make booting way
easier: if someone manage to put u-boot there and have it configured
to use UEFI, you could simply use GRUB as usual on ARM (with efi-raw
images), and not have to care anymore about board specific bootloaders
and so on.
What is next in my TODO list is to move my server from the rockpro64to
the rock-4c-plus, add an image for the rockpro64 in Guix, and continue
working on patches to find all the modules required to boot for all the
cases (eMMC, MicroSD, USB key on USB2.0, on USB 3.0, etc).
Denis.
pgpmiKplig_iy.pgp
Description: OpenPGP digital signature
