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