set -u _read() { # The miniprokit call in the installer redirects this script to stdin, # so we need to reconnect stdin to the tty. We can't do this for the # whole script with exec, because the shell reads the script in parts. read "${@}" 0<&1 } _select() { # Field width of the prompt numbers. select_width=$(expr ${#} : '.*') select_i= while :; do case "${select_i}" in '') select_i=0 for select_word in "${@}"; do select_i=$(expr ${select_i} + 1) printf "%${select_width}d) %s\\n" \ ${select_i} "${select_word}" done ;; *[!0-9]*) printf 'Please enter a number in range.\n' >&2 ;; *) if [ ${select_i} -gt 0 ] && \ [ ${select_i} -le ${#} ]; then shift $(expr $select_i - 1) select_result="${1}" break fi printf 'Please enter a number in range.\n' >&2 ;; esac # Prompt and read input. printf '%s' "${PS3-#? }" >&2 _read -r select_i || exit done } printf '\nConfigure the network' printf '\n=====================\n\n' printf 'Network configuration method:\n' _select 'Static' 'DHCP' if [ "x${select_result}" = 'xStatic' ]; then printf 'Network interface (e.g. "eth0"): ' _read -r netiface printf 'Network address (e.g. "192.168.1.2"): ' _read -r netaddr printf 'Network mask (e.g. "255.255.255.0"): ' _read -r netmask printf 'Network gateway (e.g. "192.168.1.1"): ' _read -r netgw cat >/etc/network/interfaces <<EOF auto lo iface lo inet loopback auto ${netiface} iface ${netiface} inet static address ${netaddr} netmask ${netmask} gateway ${netgw} EOF fi printf '\nSet up users and passwords' printf '\n==========================\n\n' while ! passwd 0<&1; do : done printf '\n' tzpkgs="$(opkg info 'tzdata-*' | sed -n 's/^Package: //p')" opkg install tzcode tzdata ${tzpkgs} printf '\nConfigure the time zone' printf '\n=======================\n\n' tz="$(tzselect 0<&2)" printf '\n' ln -sf "/usr/share/zoneinfo/${tz}" /etc/localtime seltzpkg="$(opkg search "/usr/share/zoneinfo/${tz}" | cut -d ' ' -f 1)" rmtzpkgs='' for tzpkg in ${tzpkgs}; do if ! [ "x${tzpkg}" = "x${seltzpkg}" ]; then rmtzpkgs="${rmtzpkgs} ${tzpkg}" fi done opkg remove tzcode ${rmtzpkgs} printf '\nInstallation complete!\n'