Hello,
I've just released v1.1.0 of the bootable image on GitHub, here.
As before, 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.
With this version of the image, it's now really easy to try out 64-bit applications from the Debian Stretch repository, while remaining in a familiar 32-bit (userland) Raspbian environment!
For example, say you wanted to
try out the 64-bit Chromium web browser. Begin by downloading and booting the image onto a spare microSD card, following the instructions on the project's
GitHub page.
After two minutes or so (subsequent boots are much faster), you should be presented with the usual Raspbian first-time setup wizard:
Follow this through as you
would for a standard Raspbian startup, making sure to setup networking when prompted, and to reboot when prompted, once the software update step has been completed.
When your RPi3 comes back up, select System Tools -> Terminal (64-bit), and a
container shell terminal should open. There's nothing to configure or set up; it's ready for use immediately!
Issue
sudo apt-get update in this 64-bit container shell, followed by
sudo apt-get install -y chromium, exactly as you would if using a 32-bit terminal:
Once the install completes, a menu item for your new package will
automatically appear in the host desktop (new v1.1.0 image feature ^-^):
Just click on that menu item, and your
64-bit Chromium browser will open!
And that's it! Programs you install this way have full access to your home directory, and can play video and audio on the host desktop. You can, of course,
still install and use 32-bit apps from the standard Raspbian repository, just as you would before (use a regular, 32-bit terminal window when installing these, of course!)
64-bit integration with less of the headache ^-^
Further details of how all this works under the covers may be found on the project's
GitHub page, and in my detailed tutorial,
here.
Changes in this Release
Following suggestions from
jdonald and others, this version features the following changes:
- Kernel upgraded to 4.14.97-v8-0448a1dbea0f-bis+. The bcm2835-unicam module has been included (but not loaded by default at boot).
- Added a systemd path unit and triggered script (/usr/local/bin/reflect-apps), to watch for changes to /usr/share/applications within the container. When triggered, copies all .desktop files across to the host, prefixing their names to ensure they are unique, and also modifying their Exec= stanzas (with ds64-runner or ds64-shell -c, as appropriate) to allow direct invocation from a 32-bit context. Desktop files without Type=Application are ignored, and any prior desktop files at the target location in the host, which have NoDisplay=true set, will not be overwritten. Also copies contents of /usr/share/{icons,pixmaps} from the guest into the host (to /usr/share/gdm/{icons,pixmaps}), so (most) referenced icons will resolve, and reloads the (host's) main menu, so these changes are picked up. 32-bit and 64-bit variants of the same package may co-exist; their menu items will not clash. Launching of terminal-based applications (such as htop) is also (automatically) supported.
The net effect of this script is that when a new 64-bit application is apt-get installed in the guest, a menu entry to launch it (so it can play audio, display on the desktop etc.) should 'auto-magically' get added to the 32-bit Raspbian host's main menu, complete with icon. Such items will also be automatically removed should the package subsequently be uninstalled. Please note that the script will wait for all apt-get, apt and dpkg processes to complete before making modifications.
Here's an example of installing 64-bit abiword, and then running it via the auto-created menu entry:

- Added a systemd path unit and triggered script (/usr/local/bin/reflect-passwd), to watch for changes to /etc/{passwd,shadow,group,gshadow) within the host. When triggered, reflects user data (including hashed passwords) in the 1000 <= uid < 1100 range into the container, ensuring that the primary group is also present. Removes clashing users or groups from the guest, and ensures that reflected users are members of groups cited in $USE_GROUP (see the script for details), iff such groups are present on the guest.
The net effect of this script is that if you change password or username, or create a new (regular) user on the host, it should 'auto-magically' be carried over into the guest as well. No equivalent propagation of changes from guest to host is provided.
- Made all members of the sudo group (in both host and guest) eligible for password-free invocation of all commands (not just the pi user).
- All of /home is now mapped into the container, not just /home/pi.
- Migrated 64-bit utility .desktop files from pi's ~/.local/share/applications directory, to /usr/local/share/applications, as they may now be used by other regular users, not just pi.
- Removed hardcoded 1000 uid and gid from /usr/local/bin/ds64-run and /usr/local/sbin/ds64-shell (the pi user is no longer 'special'; now any regular user you create can access the container, and launch apps from it).
- Allowed passing of parameters to ds64-shell (so it can be used to e.g. launch terminal-based 64-bit apps from the guest, such as htop etc.)
- Various other minor clean-ups.
I think these changes make the image considerably more user-friendly. If you get a chance to try it out, please let me know what you think!
Best,
sakaki
PS: if anyone out there would be interested in
maintaining this image going forward, and possibly packaging the various components within it as debs, and/or adapting it to host other 'containerized' 64-bit distros (Arch, etc.) please let me know in this thread! Debian's not really my thing ><