#!/usr/bin/env bash
set -euo pipefail

mountpoint -q /proc/sys/fs/binfmt_misc \
    || mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc 2>/dev/null \
    || true

install -d /media/rosetta /run/rosettad
mountpoint -q /media/rosetta \
    || mount -t virtiofs -o ro,nofail rosetta /media/rosetta 2>/dev/null \
    || exit 0

[ -x /media/rosetta/rosetta ] || exit 0
[ -w /proc/sys/fs/binfmt_misc/register ] || exit 0

register_rosetta() {
    name="$1"
    magic="$2"
    mask="$3"

    if [ -e "/proc/sys/fs/binfmt_misc/${name}" ]; then
        echo -1 > "/proc/sys/fs/binfmt_misc/${name}" 2>/dev/null || true
    fi

    printf '%s\n' ":${name}:M::${magic}:${mask}:/media/rosetta/rosetta:PCF" \
        > /proc/sys/fs/binfmt_misc/register 2>/dev/null || true
}

elf_prefix='\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00'
elf_mask='\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff'
register_rosetta rosetta-x86_64 "${elf_prefix}"'\x02\x00\x3e\x00' "${elf_mask}"
register_rosetta rosetta-x86_64-pie "${elf_prefix}"'\x03\x00\x3e\x00' "${elf_mask}"
