diff options
author | P. J. McDermott <pj@pehjota.net> | 2014-07-21 01:05:22 (EDT) |
---|---|---|
committer | P. J. McDermott <pj@pehjota.net> | 2014-07-21 01:05:22 (EDT) |
commit | 1fdd884913f7ed6bd8ff5a08d4e719a413b8d315 (patch) | |
tree | 0d8ddf791437acd60c96a18b110ae1d8d52af6f5 /installers/data | |
parent | 859aebf94835201b3f1ab20d5e5b3444f666d230 (diff) |
installers/pc: New installer for PC platforms
Diffstat (limited to 'installers/data')
-rw-r--r-- | installers/data/pc.sh | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/installers/data/pc.sh b/installers/data/pc.sh new file mode 100644 index 0000000..4cd8d09 --- /dev/null +++ b/installers/data/pc.sh @@ -0,0 +1,96 @@ +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' |