#!/bin/sh PROGRAM=setup-hostname PREFIX= . $PREFIX/lib/libalpine.sh usage() { cat <<__EOF__ usage: setup-hostname [-h] [HOSTNAME] Sets the system hostname. options: -h Show this help Sets hostname to HOSTNAME or prompt if unspecified. __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) name="$OPTARG";; esac done shift $(( $OPTIND - 1 )) if [ -z "$name" ] && [ $# -eq 1 ]; then name="$1" fi # if name is set, then we run non-interactively if [ -n "$name" ] && ! valid_hostname "$name"; then exit 1 fi HOST="$name" while [ -z "$name" ]; do HOST=$(hostname) echon "Enter system hostname (short form, e.g. 'foo') [$HOST]: " default_read HOST "$HOST" if valid_hostname "$HOST"; then break fi done mkdir -p "$ROOT/etc" echo "$HOST" > "$ROOT/etc/hostname"