mirror of
https://github.com/zerotier/edge.git
synced 2026-05-22 16:25:05 -07:00
70 lines
1.3 KiB
Bash
Executable File
70 lines
1.3 KiB
Bash
Executable File
#!/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"
|