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.

Attachment: pgpmiKplig_iy.pgp
Description: OpenPGP digital signature

Reply via email to