#!/bin/bash # # /usr/lib/initscripts/arch-binfmt # # Configure additional binary formats at boot # shopt -s nullglob declare -a binfmt_d # files given has argv supersede config files if (( $# > 0 )); then for arg; do [[ -r "$arg" ]] && binfmt_d+=("$arg"); done else binfmt_d=( /usr/lib/binfmt.d/*.conf /etc/binfmt.d/*.conf /run/binfmt.d/*.conf ) fi # check there is file to load (( ${#binfmt_d[@]} > 0 )) || exit 1 # mount binfmt_misc if api filesystem is missing mountpoint -q /proc/sys/fs/binfmt_misc || mount -t binfmt_misc binfmt /proc/sys/fs/binfmt_misc # files declared later in the binfmt_d array will override earlier # Example: `/etc/binfmt.d/foo.conf' supersedes `/usr/lib/binfmt.d/foo.conf'. declare -A fragments for path in "${binfmt_d[@]}"; do [[ -f $path ]] && fragments[${path##*/}]=$path done for path in "${fragments[@]}"; do while read -r line; do [[ ${line:0:1} == '#' ]] && continue printf "%s" "$line" > /proc/sys/fs/binfmt_misc/register done < "$path" done : # vim: set ts=2 sw=2 noet: