Update 2024-12-17:
Mesa 25.0.0~pre20241211-1asahi0.24.04 packages are available in the Ubuntu Asahi PPA now.

Update 2024-12-13:
In case you installed hidpipe and sommelier previously, you can remove both packages now.
hidpipe has been integrated into muvm and muvm defaults to x11bridge, not depending on sommelier anymore.

For the FEX root filesystem you can download a prepared tarball here or build your own.


Recently on XDC 2024, Alyssa Rosenzweig announced support for Vulkan 1.3 in Mesa, as well as gaming in Steam, using muvm (ex krunvm) and FEX: https://asahilinux.org/2024/10/aaa-gaming-on-asahi-linux/

On 2024-12-02 Vulkan 1.4 support was announced: https://social.treehouse.systems/@AsahiLinux/113584784231664115
The Vulkan loader package in Ubuntu doesn't support Vulkan 1.4 directly yet, but the new functionality is also exposed as Vulkan 1.3 extensions.

On 2024-12-12 there was another announcement from Asahi Lina regarding x11bridge and recent improvements: https://asahilinux.org/2024/12/muvm-x11-bridging/

Vulkan

To get started, you need to run apt update && apt upgrade and should get:
mesa 25.0.0~pre20241211-1asahi0.24.04

Mesa should show Vulkan API and conformance version 1.4.x:

$ vulkaninfo --summary
...
Devices:
========
GPU0:
	apiVersion         = 1.4.303
	driverVersion      = 24.99.99
	vendorID           = 0x10005
	deviceID           = 0x0000
	deviceType         = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
	deviceName         = Apple M2 Pro (G14S B1)
	driverID           = DRIVER_ID_MESA_AGXV
	driverName         = Honeykrisp
	driverInfo         = Mesa 25.0.0-devel
	conformanceVersion = 1.4.0.0
	deviceUUID         = 3707413d-f533-836a-de77-be4a659c5xxx
	driverUUID         = 2c451509-2027-7133-95b1-5274a701bxxx
...

PPA

The packages for Steam, muvm and dependencies are not uploaded to the Ubuntu Asahi PPA yet, so we'll have to add mine as well.

sudo add-apt-repository ppa:kaazoo/ubuntu-asahi-gaming

In order to make sure the newer packages are preferred, we'll also have to increase the priority of the PPA in /etc/apt/preferences.d/kaazoo:

Package: *
Pin: release o=LP-PPA-kaazoo-ubuntu-asahi-gaming
Pin-Priority: 1001

Install Steam and dependencies

Installation from Ubuntu packages

Install steam, along with all dependencies:

$ sudo apt install steam

Install FEX from their PPA:

$ sudo add-apt-repository ppa:fex-emu/fex
$ sudo apt install fex-emu-armv8.4

FEX root fileystem

FEX needs a root filesystem based on the same Ubuntu release that is running locally, but with i386 and amd64 packages, in order to support 32 and 64 bit applications.
It's based on Ubuntu 24.10, which works on both 24.04 and 24.10 as host system.

You can download a tarball that I created or you build your own.

Use prepared tarball

Last update: 2024-12-15

$ cd ~/Downloads
$ wget https://kernelpanik.net/content/images/Stage2_ubuntu-base-24.10-base-amd64.tar.gz
$ mkdir -p ~/.fex-emu/RootFS/Ubuntu_24_10
$ tar -xvzf Stage2_ubuntu-base-24.10-base-amd64.tar.gz -C ~/.fex-emu/RootFS/Ubuntu_24_10

Afterwards, run FEXConfig and select Ubuntu_24_10 as root FS.

Build your own

A FEX root fs can be created with https://github.com/FEX-Emu/RootFS but needs to few customizations, in order to have the same mesa version in the VM as locally.

$ cd ~/Downloads
$ git clone https://github.com/kaazoo/RootFS.git
$ cd RootFS
$ ./build_image.py Configs/Ubuntu_24_10_asahi.json cache_dir rootfs_dir
$ rsync -av rootfs_dir/Stage1_RootFS/ ~/.fex-emu/RootFS/Ubuntu_24_10

Afterwards, run FEXConfig and select Ubuntu_24_10 as root FS.

Launch Steam

Run a Python wrapper to start FEXBash inside muvm and execute Steam's launch script at ~/.local/share/fex-steam/steam-launcher/bin_steam.sh

$ steam

Alternatively, we can also start Steam manually from a FEXBash shell:

$ muvm -ti FEXBash
$ ~/.local/share/fex-steam/steam-launcher/bin_steam.sh

Manual installation of dependencies (deprecated)

Steam is a bit more complicated, as it depends on multiple components, which are not all packaged in Ubuntu yet.
We'll install them to /usr/local for now.

Virglrenderer

apt install virglrenderer should install virglrenderer 1.0.1~asahi-20240925-1asahi1.24.04

Sommelier

Based on https://src.fedoraproject.org/rpms/chromiumos-platform/blob/rawhide/f/chromiumos-platform.spec

$ mkdir -p asahi
$ cd asahi
$ git clone https://chromium.googlesource.com/chromiumos/platform2.git sommelier
$ cd sommelier
$ git checkout 67bc17ea79b4ff1b449053e5fcf3375ff6b30690
$ cd sommelier/vm_tools/sommelier

$ wget https://src.fedoraproject.org/rpms/chromiumos-platform/raw/rawhide/f/0001-Revert-sommelier-bump-up-CROSS_DOMAIN_MAX_IDENTIFIER.patch
$ wget https://src.fedoraproject.org/rpms/chromiumos-platform/raw/rawhide/f/0002-vm_tools-sommelier-align-mem-operations-to-16K.patch
$ wget https://src.fedoraproject.org/rpms/chromiumos-platform/raw/rawhide/f/0003-vm_tools-sommelier-don-t-call-to-fixup_plane0.patch
$ wget https://src.fedoraproject.org/rpms/chromiumos-platform/raw/rawhide/f/0004-vm_tools-sommelier-Do-not-assert-on-unsued-wayland-i.patch
$ patch -p3 <0001-Revert-sommelier-bump-up-CROSS_DOMAIN_MAX_IDENTIFIER.patch 
$ patch -p3 <0002-vm_tools-sommelier-align-mem-operations-to-16K.patch 
$ patch -p3 <0003-vm_tools-sommelier-don-t-call-to-fixup_plane0.patch 
$ patch -p3 <0004-vm_tools-sommelier-Do-not-assert-on-unsued-wayland-i.patch

$ mkdir build
$ meson -Dxwayland_path=/usr/bin/Xwayland -Dgamepad=true -Dquirks=true -Dwith_tests=false build
$ ninja -C build
$ sudo cp build/sommelier /usr/local/bin/sommelier

Rust

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
$ . "$HOME/.cargo/env"

Instead of using rustup, you could also install the rust-1.80-all package.

libkrunfw 4.5.1

$ cd asahi
$ git clone https://github.com/containers/libkrunfw.git
$ cd libkrunfw
$ git checkout v4.5.1
$ make
$ sudo make install

libkrun 1.9.8

$ cd asahi
$ git clone https://github.com/containers/libkrun.git
$ cd libkrun
$ git checkout v1.9.8
$ echo '    println!("cargo:rustc-link-arg=-L/usr/local/lib64");' >> src/libkrun/build.rs
$ GPU=1 VIRGL_RESOURCE_MAP2=1 BLK=1 NET=1 SND=1 make
$ sudo make install

muvm 0.1.3

$ cd asahi
$ git clone https://github.com/AsahiLinux/muvm.git
$ cd muvm
$ echo '    println!("cargo::rustc-link-arg=-L/usr/local/lib64");' >> crates/krun-sys/build.rs
$ sed -i 's/"--glamor",/"--glamor",\n        "--xwayland-path=\/usr\/bin\/Xwayland"/' crates/muvm/src/guest/sommelier.rs
$ sed -i 's/"resolv.conf", None/"resolv.conf", Some("nameserver 9.9.9.9\\n")/' crates/muvm/src/guest/mount.rs
$ cargo build --release
$ sudo cp target/release/muvm /usr/local/bin/
$ sudo cp target/release/muvm-guest /usr/local/bin/
$ sudo cp target/release/muvm-server /usr/local/bin/

hidpipe

$ cd asahi
$ git clone https://github.com/AsahiLinux/hidpipe.git
$ cd hidpipe
$ cargo build --release
$ sudo cp target/release/hidpipe-client /usr/local/bin/
$ sudo cp target/release/hidpipe-server /usr/local/bin/

Steam

Based on https://pagure.io/fedora-asahi/steam/blob/main/f/steam.spec

$ cd asahi
$ git clone https://pagure.io/fedora-asahi/steam.git
$ sudo apt install python3-pyqt6