#!/bin/sh PROGRAM=setup-hostname PREFIX= . $PREFIX/lib/libalpine.sh usage() { cat <<__EOF__ usage: setup-hostname [-h] [-n hostname] Sets the system hostname. options: -h Show this help -n Specify the hostname to set __EOF__ exit 1 } # http://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names valid_hostname() { # check length if [ $(echo "$1" | wc -c) -gt 63 ]; then echo "Hostname '$1' is too long." return 1 fi # check that it only contains valid chars if ! [ -z "$(echo $1 | sed 's/[0-9a-z-]//g')" ]; then echo "Hostname must only contain letters (a-z), digits (0-9) or -" return 1 fi # must not start with - case "$1" in -*) echo "Hostname must not start with a '-'"; return 1;; esac return 0 } while getopts "hn:" opt; do case $opt in h) usage;; n) HOSTNAME="$OPTARG";; esac done while true; do if [ -n "$HOSTNAME" ]; then HOST="$HOSTNAME" else HOST=`hostname` echon "Enter system hostname (short form, e.g. 'foo') [$HOST]: " default_read HOST `hostname` fi if valid_hostname "$HOST"; then break fi done mkdir -p "$ROOT/etc" echo "$HOST" > "$ROOT/etc/hostname"