#!/bin/sh
# =============================================================================
# Script Name: hostname_update.sh
# Version: 1.1
# Author: Andreas Fleckl
# Description: This script retrieves the public IP address, performs a reverse
# DNS lookup, updates the system's hostname, and restarts the
# Postfix service. It includes error handling and logging.
# =============================================================================
# Log file path
LOG_FILE="/var/log/update-hostname.log"
# Function to log messages
log_message() {
echo "$(date +"%Y-%m-%d %H:%M:%S") - $1" | tee -a "$LOG_FILE"
}
# Fetch public IP address
log_message "Fetching public IP address..."
PUBIP=$(wget -4qO- ifconfig.me | cut -d% -f1)
if [ -z "$PUBIP" ]; then
log_message "Failed to retrieve public IP address."
exit 1
fi
log_message "Public IP address: $PUBIP"
# Perform reverse DNS lookup
log_message "Performing reverse DNS lookup for IP: $PUBIP..."
PUBDNS=$(dig -x $PUBIP +short)
if [ -z "$PUBDNS" ]; then
log_message "Failed to retrieve DNS name for IP: $PUBIP."
exit 1
fi
log_message "DNS name: $PUBDNS"
# Extract hostname and remove trailing dot
HOSTNAME=$(echo $PUBDNS | awk '{print substr($0, 1, length($0)-1)}')
if [ -z "$HOSTNAME" ]; then
log_message "Failed to extract hostname from DNS name."
exit 1
fi
log_message "Extracted hostname: $HOSTNAME"
# Set hostname in /etc/mailname
log_message "Setting hostname in /etc/mailname..."
echo $HOSTNAME > /etc/mailname
if [ $? -ne 0 ]; then
log_message "Failed to set hostname in /etc/mailname."
exit 1
fi
# Update system hostname
log_message "Updating system hostname..."
hostnamectl set-hostname "$HOSTNAME"
if [ $? -ne 0 ]; then
log_message "Failed to update system hostname."
exit 1
fi
# Restart Postfix service
log_message "Restarting Postfix service..."
systemctl restart postfix
if [ $? -ne 0 ]; then
log_message "Failed to restart Postfix service."
exit 1
fi
log_message "Hostname update and Postfix restart completed successfully."