Indeed, this works well on a Mac using Parallels for virtualisation.
I’d like to add that there’s a workaround and you can work with the app store. You create the app as usual and you see it stop (failing). Then you convert it to custom app and make sure it says something like
platform: linux/arm64
instead of linux/amd64. I just tested this with the open-speed-test app.
As long as the image/container has an arm64 version you’re good, most of the popular apps/containers have support for both amd/arm 64-bit, whereas 32-bit arm containers are fading away
As long as the image/container has an arm64 version you’re good…
Yup. It’s not a technical limitation. It’s just that some architecture assumptions were baked in and I need to find them and parameterize them.
I’m actually finding that containers do indeed work. That was not the case on one of the earlier builds I tested on. So, this is progress.
The apps might be hit or miss. I can fix the architecture it’s trying to provision, but in the end it really depends on if the app properly supports aarch64.
Thank you very much for going through all of this work. I don’t have any suitable ARM hardware to test this on but perhaps one day!
I was listening to the TrueNAS Tech Talk episode in which you were discussing porting challenges and having to get into the assembly-level depths of Debian. I have an inkling of your pain: I work at a large Internet web portal that you’ve heard of and one of my tasks has been to modify an awful lot of native code with assumptions to portable code. I salute you!
Just came over here from the TrueNAS Tech Talk episode that aired today, Saturday, August 23, 2025.
@Joel0 , congratulations on getting this working. I’m guessing it wasn’t nearly as straightforward as you made it sound.
I’m hopeful we’ll start seeing more commodity desktop/workstation-level ARM hardware that would be suitable to use as a TrueNAS server now that SystemReady standard seems to really be taking off.
I need to go back and educate myself about why Uboot and other non-UEFI bootloaders historically became the norm on ARM systems. The lack of anything standardized (and in particular, the lack of UEFI) has seeminly needlessly fragmented OS compatibility on ARM SBC devices for at least a decade. At least it can be done on a Raspberry Pi 5, but I’m still missing an understanding of why that’s not the default behavior. Raspberry Pi’s standard bootloader really doesn’t feel like a better experience.
Heh. I didn’t get a chance to adequately express how many weekends I was fighting back and forth with the builds to get everything working.
I’m no expert in the history of Arm, U-Boot, and UEFI, but I can speculate. My understanding is that EFI arose from Itanium, which was for workstations and servers. So EFI had to be full-featured to support modular hardware and provide controls to the end user. In the early days of Arm, its low power consumption made it a popular choice for embedded devices. I assume U-Boot is lighter weight and satisfied all the needs of many embedded devices, so it became a more popular choice and was easier to implement.
I don’t know much about the Raspberry Pi 5, but I can see the appeal for the older pre-UEFI style and the attitude of “we’ve always done it this way.” Writing the OS directly to the SD card is easier than writing the installer iso to a flash drive and booting from that to install it. I always prefer UEFI, but I’m just saying I can see the other side.
As someone who has has extensively used OpenMediaVault over the last two years on Rockchip boards with Armbian’s flavor of Debian I’m excited to try this on real hardware and report back.
Going to also attempt to run it on a CM5 with a NAS enclosure I’ve been testing lately.
I’ll post the full setup guide on my blog later, I’m re-doing it a couple times to make sure I have the right order of operations, as UEFI on the Pi is still a bit annoying
I was trying to run the above image link for TrueNAS on arm on a proxmox instance that I am running on Orange Pi 5 Max. This proxmox is a proxmox-port for arm devices.
I was assuming that with UEFI, I would be able to run this TrueNAS arm build on it. However it did not boot from the image. I checked this same VM config with an arm64 debian image and it did boot from the debian image on the same VM.
I would expect it to work in Proxmox. Do you know if SecureBoot is enabled? That needs to be disabled. Do you have any boot messages that could help me identify what went wrong?
@geerlingguy
I’m trying to run this on my Raspberry Pi 5 (8GB model) with the Penta SATA HAT. After changing the PCI Express link speed from Gen 2 to Gen 3, I can see both of my SATA SSDs in the UEFI menu. My goal is to create a mirrored TrueNAS boot pool. However, the TrueNAS installer only detects the microSD card that contains the UEFI firmware—it doesn’t see the SSDs.
I realized I’m using a different UEFI build than the one you referenced in your post. I’ll swap it out this evening and retest.
@Joel0
In the meantime, is there anything else you’d recommend?
UEFI build I used: ansleythompson/blueberry
UEFI build @geerlingguy used: NumberOneGit/rpi5-uefi
It’s also great that the TrueNAS team showed this in the video.
However, what are the plans that the official source tree adopts this and runs multi-platform? Because, if that’s not happening, then we’re talking about a one-time effort that shows that it could be done, and in a few weeks it’s back to being history. e.g. Goldeneye nightlies aren’t available as ARM, which means this hasn’t been absorbed into the official code base…
There are plans to get these changes incorporated upstream, but don’t read too much into that for whether it will be officially supported. Only time will tell.
My fork is a bit more than a one time effort. I’ve set up CI jobs to pull from upstream daily. The upstream is already on Halfmoon, which is why the Goldeye nightlies are gone temporarily. I just need time to set up more CI jobs; there are no code changes needed.
Even if I were to abandon this project, everything I’ve done is open source, including my CI scripts. It would take somebody else only a small amount of effort to rebase the changes and potentially resolve a few minor conflicts. I have faith in the community that I’m not the only one capable of doing this, and I’ve pushed us past the hardest roadblock.