From eb18f65e855f255fbcd08e0dfe9544d542de4d3d Mon Sep 17 00:00:00 2001 From: dingenbohs Date: Thu, 30 Oct 2025 14:40:40 +0000 Subject: [PATCH] Update 'k3os/set_hostname.sh' --- k3os/set_hostname.sh | 78 ++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 50 deletions(-) diff --git a/k3os/set_hostname.sh b/k3os/set_hostname.sh index f23b471..ec1da3a 100644 --- a/k3os/set_hostname.sh +++ b/k3os/set_hostname.sh @@ -1,14 +1,22 @@ #!/bin/bash -# Script to set the hostname in the k3os config.yaml file. -# It handles the read-only filesystem constraint of a running k3OS system. +# Script to set the hostname for k3OS by writing directly to the hostname file. +# This script requires root privileges and prompts the user for the new hostname. -# Define the path to the config file and the mount point -CONFIG_FILE="/k3os/system/config.yaml" -CONFIG_DIR="/k3os/system" +HOSTNAME_FILE="/var/lib/rancher/k3os/hostname" + +# --- Function to check for root/sudo privileges --- +check_privileges() { + if [[ $EUID -ne 0 ]]; then + echo "Error: This script must be run with root/sudo privileges." + echo "Please run: sudo $0" + exit 1 + fi +} # --- Function to get user input --- get_hostname_input() { + # Loop until a non-empty hostname is provided while true; do read -r -p "Enter the desired new hostname: " NEW_HOSTNAME if [ -n "$NEW_HOSTNAME" ]; then @@ -19,61 +27,31 @@ get_hostname_input() { done } -# --- Function to modify the config file --- -set_hostname() { +# --- Function to write the hostname to the file --- +write_hostname() { local NEW_HOSTNAME="$1" - # Note the two spaces for YAML indentation under 'k3os:' - local HOSTNAME_ENTRY=" hostname: $NEW_HOSTNAME" - echo "Attempting to set hostname to: **$NEW_HOSTNAME**" - echo "Config file location: **$CONFIG_FILE**" + echo "Attempting to write new hostname: **$NEW_HOSTNAME** to **$HOSTNAME_FILE**" - # 1. Remount the filesystem as read/write (rw) - echo "Attempting to remount $CONFIG_DIR as read/write..." - if ! mount -o remount,rw "$CONFIG_DIR"; then - echo "Error: Failed to remount $CONFIG_DIR as read/write. Aborting." - exit 1 - fi - echo "Filesystem successfully remounted as read/write." - - # 2. Modify the config file (same logic as before) - if ! grep -q "^k3os:" "$CONFIG_FILE"; then - echo "'k3os:' block not found. Appending the block and hostname." - echo -e "\nk3os:\n$HOSTNAME_ENTRY" >> "$CONFIG_FILE" + # Write the new hostname, ensuring no extra whitespace or newlines + echo -n "$NEW_HOSTNAME" > "$HOSTNAME_FILE" - elif grep -q "^k3os:" "$CONFIG_FILE" && grep -q "^\s\+hostname:" "$CONFIG_FILE"; then - echo "Existing hostname found. Replacing the entry." - sed -i "/^\s*hostname:/c\\$HOSTNAME_ENTRY" "$CONFIG_FILE" - - else - echo "'k3os:' block found, but no hostname entry. Appending the entry." - sed -i "/^k3os:/a\\$HOSTNAME_ENTRY" "$CONFIG_FILE" - fi - - local MODIFICATION_STATUS=$? - - # 3. Remount the filesystem back to read-only (ro) - echo "Remounting $CONFIG_DIR back to read-only..." - if ! mount -o remount,ro "$CONFIG_DIR"; then - echo "Warning: Failed to remount $CONFIG_DIR back to read-only. Proceeding..." - fi - - echo -e "$HOSTNAME_ENTRY" > /var/lib/rancher/k3os/hostname - - # 4. Report status - if [ $MODIFICATION_STATUS -eq 0 ]; then + # Check if the write operation was successful + if [ $? -eq 0 ]; then + echo "Success: The new hostname has been written to $HOSTNAME_FILE." echo "" - echo "Successfully updated the hostname in $CONFIG_FILE." - echo "The change will take effect after a **reboot**." + echo "--- Verification ---" + echo "File content: $(cat "$HOSTNAME_FILE")" echo "" - echo "--- Verification (Hostname line only) ---" - grep -E "^\s*hostname:" "$CONFIG_FILE" + echo "Action Required: A **system reboot is necessary** for the new hostname to take effect." + echo "You can reboot now using the 'reboot' command." else - echo "Error: Failed to modify $CONFIG_FILE during step 2." + echo "Error: Failed to write to $HOSTNAME_FILE. Check file permissions or disk status." exit 1 fi } # --- Main execution --- +check_privileges get_hostname_input -set_hostname "$NEW_HOSTNAME" \ No newline at end of file +write_hostname "$NEW_HOSTNAME" \ No newline at end of file