Easily run 64-bit Debian Buster packages on a Raspbian system: new RPi4 / RPi3 image released (systemd-nspawn, LXDE)
Posted: Tue Jan 29, 2019 1:35 am
Hello,
12 September 2019: an updated, v1.3.0 release of the bootable image is now available, which adds RPi4 compatibility, uses a Raspbian Buster host OS, and runs under the official 64-bit kernel; please see here for further details.
as maintainer of the gentoo-on-rpi3-64bit image, I not infrequently receive email requests from users who:
Note: the question here is not whether people really need the capability to run 64-bit software on their RPi3; perhaps many don't, but enough genuinely do (mongodb-3.2 users etc.) that I've chosen to run with it in what follows.
The system I ended up building looks as follows:
Basically, you get 64-bit capability as and when you need it, without most of the headache ^-^
Here's a screenshot of the hybrid system in use, on an RPi3B+:

As of today, I've released this as a bootable image on GitHub, here.
You can burn the image (~925MiB compressed) to a microSD card (>=8GB), then boot your RPi3 from it directly (the root partition will be automatically resized to fill the card on first boot, per the standard Raspbian flow). Full instructions for download and use are provided on the project's GitHub page. 64-bit Firefox-ESR (as shown in the above screenshot) is pre-installed on the 64-bit guest (and may be launched from the Internet menu in Raspbian), as proof that full-scale 64-bit apps can usefully be deployed on this kind of hybrid system.
I've also posted a tutorial covering how to create such an image step-by-step, here.
hth, feedback welcome!
sakaki
Acknowledgement: The idea of this came from Crazyhead90's Raspbian-desktop-64bitkernel-pi3bplus image (64-bit kernel + 32-bit userland OS), and this post by jdonald (which suggests a chroot into a 64-bit guest from such a setup). I've just extended jdonald's idea to use the Linux containers technology leveraged by systemd-nspawn, and tied it all together in what I hope is a reasonably user-friendly way ^-^
[1] Shorthand for the trinity of namespacing, seccomp-bpf and capabilities, the common kernel facilities leveraged by "concessionaire" apps like systemd-nspawn, firejail and docker (of course, other facilities such as cgroups are also used).
Edit: fix minor typo
12 September 2019: an updated, v1.3.0 release of the bootable image is now available, which adds RPi4 compatibility, uses a Raspbian Buster host OS, and runs under the official 64-bit kernel; please see here for further details.
as maintainer of the gentoo-on-rpi3-64bit image, I not infrequently receive email requests from users who:
- don't want to give up on their familiar Raspbian desktop, repos, and tools;
- don't want to have to build packages from source (during setup or maintenance);
- would like to retain the ability to easily upgrade their Raspbian system going forward;
- but still need to run a few (possibly GUI-based) 64-bit-only packages on their RPi3.
Note: the question here is not whether people really need the capability to run 64-bit software on their RPi3; perhaps many don't, but enough genuinely do (mongodb-3.2 users etc.) that I've chosen to run with it in what follows.
The system I ended up building looks as follows:
- A 64-bit kernel (since under ARMv8a this is required to allow mixed-mode 64/32-bit userspace);
- An (almost) vanilla 32-bit Raspbian Stretch with desktop as the userspace host OS (for familiarity);
- A 64-bit (aarch64) Debian Stretch userspace guest OS booted inside a lightweight systemd-nspawn container (to provide an easy, safe and familiar 64-bit playground, without going all the way down the KVM wormhole ^-^).
- display on the Raspbian desktop;
- can play audio; and
- have access to the pi user's home directory.
Basically, you get 64-bit capability as and when you need it, without most of the headache ^-^
Here's a screenshot of the hybrid system in use, on an RPi3B+:

As of today, I've released this as a bootable image on GitHub, here.
You can burn the image (~925MiB compressed) to a microSD card (>=8GB), then boot your RPi3 from it directly (the root partition will be automatically resized to fill the card on first boot, per the standard Raspbian flow). Full instructions for download and use are provided on the project's GitHub page. 64-bit Firefox-ESR (as shown in the above screenshot) is pre-installed on the 64-bit guest (and may be launched from the Internet menu in Raspbian), as proof that full-scale 64-bit apps can usefully be deployed on this kind of hybrid system.
I've also posted a tutorial covering how to create such an image step-by-step, here.
hth, feedback welcome!
sakaki
Acknowledgement: The idea of this came from Crazyhead90's Raspbian-desktop-64bitkernel-pi3bplus image (64-bit kernel + 32-bit userland OS), and this post by jdonald (which suggests a chroot into a 64-bit guest from such a setup). I've just extended jdonald's idea to use the Linux containers technology leveraged by systemd-nspawn, and tied it all together in what I hope is a reasonably user-friendly way ^-^
[1] Shorthand for the trinity of namespacing, seccomp-bpf and capabilities, the common kernel facilities leveraged by "concessionaire" apps like systemd-nspawn, firejail and docker (of course, other facilities such as cgroups are also used).
Edit: fix minor typo