#!/bin/sh # Filename: grml-hostname # Purpose: simple frontend to set hostname # Authors: (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. ################################################################################ # shellcheck disable=SC1091 . /etc/grml/script-functions check4root || exit 1 [ -n "$SUDO_USER" ] && RUNASUSER=$SUDO_USER || RUNASUSER=grml PN='grml-hostname' OLDHOSTNAME="$(hostname)" case "$1" in -h|--help) echo "Usage: $0 [hostname]">&2; exit 1 ;; esac if [ -n "$1" ] ; then NEW_HOSTNAME="$1" NONINTERACTIVE=1 else if [ -x /usr/bin/random-hostname ] ; then NEW_HOSTNAME="$(/usr/bin/random-hostname)" else NEW_HOSTNAME="$(hostname)" fi fi if [ -z "$NONINTERACTIVE" ] ; then NEW_HOSTNAME="$(dialog --stdout --title "${PN}" --extra-button --extra-label "Propose hostname" \ --inputbox "Set hostname (/etc/hostname, /etc/hosts and /etc/postfix/main.cf will be adjusted)\ \\n\\nTip: press 'Propose hostname' for another proposal" 14 70 "$NEW_HOSTNAME")" retval=$? else retval=0 fi # stupid + simplified checking for valid hostname (according to RFC 952) VALIDATE=$(echo "$NEW_HOSTNAME" | tr --delete '[:alnum:]-') if [ -n "$VALIDATE" ] ; then if [ -z "$NONINTERACTIVE" ] ; then dialog --title "${PN}" \ --msgbox "Error: invalid characters specified in hostname: '$VALIDATE' can not be used inside hostnames." \ 0 0 exec "$0" else echo "Error: invalid characters specified in hostname: '$VALIDATE' can not be used inside hostnames." >&2 exit 1 fi fi case $retval in 0) echo "$NEW_HOSTNAME" > /etc/hostname echo "$NEW_HOSTNAME" > /etc/mailname # shellcheck disable=SC1117 sed -ir "s/^\(127.0.0.1\s*\).*localhost.*/\1$NEW_HOSTNAME localhost/" /etc/hosts # shellcheck disable=SC1117 sed -ir "s/^\(::1\s*\).*ip6-localhost.*/\1ip6-localhost ip6-loopback $NEW_HOSTNAME/" /etc/hosts POSTFIX='' if [ -r /etc/postfix/main.cf ] ; then sed -i "s/^mydestination = .*/mydestination = $NEW_HOSTNAME, localhost, localhost.localdomain/" /etc/postfix/main.cf && \ sed -i "s/^myhostname = .*/myhostname = $NEW_HOSTNAME/" /etc/postfix/main.cf && POSTFIX=' Configuration of myhostname in /etc/postfix/main.cf has been adjusted as well. Do not forget to restart postfix if necessary.' fi if [ -n "$DISPLAY" ] ; then if sudo -u $RUNASUSER xauth add "$(xauth -n list | grep "${OLDHOSTNAME}/unix:0" | sed "s|${OLDHOSTNAME}/unix:0|${NEW_HOSTNAME}/unix:0|")" ; then sudo -u $RUNASUSER xauth remove "${OLDHOSTNAME}/unix:0" fi fi if [ -x /etc/init.d/avahi-daemon ] && pgrep avahi-daemon >/dev/null ; then /etc/init.d/avahi-daemon restart fi hostname "$NEW_HOSTNAME" if [ -z "$NONINTERACTIVE" ] ; then dialog --stdout --title "${PN}" --msgbox "Setting hostname to $NEW_HOSTNAME was successful.$POSTFIX" 0 0 else echo "Setting hostname to $NEW_HOSTNAME: done" fi exit 0 ;; 1) echo "Cancel pressed." ;; 3) $0 ;; 255) echo "ESC pressed." ;; esac ## END OF FILE #################################################################