#!/bin/sh set -u # This should be maintained in order of compatibility, i.e. each arch can also # run programs built for the arches before it. ARCHES='i686 amd64' main() { local opt= local host_arch= local host_plat= local mirror= local install_arch= while getopts 'a:P:m:' opt; do case ${opt} in a) host_arch="${OPTARG}";; P) host_plat="${OPTARG}";; m) mirror="${OPTARG}";; ?) print_usage >&2 exit 1 ;; esac done shift $(($OPTIND - 1)) if [ ${#} -ne 1 ]; then print_usage >&2 exit 1 fi root="${1}" install_arch="$(detect_arch)" if [ "x${host_arch}" = 'x' ]; then host_arch="${install_arch}" else validate_arch "${host_arch}" fi check_arch_compat "${install_arch}" "${host_arch}" if [ "x${host_plat}" = 'x' ]; then host_plat='dev' fi "${0%installers/inst-pc.sh}./miniprokit.sh" install \ -a "${host_arch}" -P "${host_plat}" \ ${mirror:+-m} ${mirror} "${root}" "${0%installers/inst-pc.sh}./miniprokit.sh" shell "${root}" \ <"${0%inst-pc.sh}data/pc.sh" } print_usage() { printf 'Usage: %s [-a ] [-P ] [-m ] \n' "${0}" } error() { local status=${1} local fmt="${2}" shift 2 printf "Error: ${fmt}\n" "${@}" >&2 exit ${status} } detect_arch() { local uname_m= local uname_s= local arch= uname_m="$( (uname -m) 2>/dev/null)" || uname_m='?' uname_s="$( (uname -s) 2>/dev/null)" || uname_s='?' case "${uname_m}:${uname_s}" in 'i686:Linux') arch='i686-linux-glibc';; 'x86_64:Linux') arch='amd64-linux-glibc';; '?:?') error 2 'Architecture unknown';; *) error 2 'Architecture unsupported';; esac printf '%s\n' "${arch}" } validate_arch() { local arch="${1}" local arches= arches=" ${ARCHES} " if [ "x${arches#* ${arch} }" = "x${arches}" ]; then error 2 'Unknown architecture "%s"' "${arch}" fi } check_arch_compat() { local install_arch="${1}" local host_arch="${2}" local arches= if [ "x${install_arch}" = "x${host_arch}" ]; then return 0 fi arches="$(printf ' %s ' ${ARCHES})" if [ "x${arches#* ${host_arch} * ${install_arch} }" = "x${arches}" ] then error 2 'Cannot install a system of architecture %s on %s %s' \ "${host_arch}" 'a system of architecture' \ "${install_arch}" fi } main "${@}"