From cde76fb60745d9505d873efc49163cfe1db5341b Mon Sep 17 00:00:00 2001 From: dingenbohs Date: Thu, 30 Oct 2025 14:14:57 +0000 Subject: [PATCH] Add 'k3os/set_hostname.sh' --- k3os/set_hostname.sh | 67 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 k3os/set_hostname.sh diff --git a/k3os/set_hostname.sh b/k3os/set_hostname.sh new file mode 100644 index 0000000..e9b4820 --- /dev/null +++ b/k3os/set_hostname.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +# Script to set the hostname in the k3os config.yaml file using only standard tools (sed, grep). + +# Define the path to the config file +CONFIG_FILE="/k3os/system/config.yaml" + +# --- 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 + break + else + echo "Error: Hostname cannot be empty. Please enter a valid name." + fi + done +} + +# --- Function to modify the config file --- +set_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** in **$CONFIG_FILE**" + + # 1. Check if the 'k3os:' block exists + if ! grep -q "^k3os:" "$CONFIG_FILE"; then + echo "'k3os:' block not found. Appending the block and hostname." + # Append the k3os block and the new hostname entry + echo -e "\nk3os:\n$HOSTNAME_ENTRY" >> "$CONFIG_FILE" + + # 2. Check if a 'hostname' entry already exists under 'k3os:' + # Checks for the 'k3os:' block AND an indented 'hostname:' line + elif grep -q "^k3os:" "$CONFIG_FILE" && grep -q "^\s\+hostname:" "$CONFIG_FILE"; then + echo "Existing hostname found. Replacing the entry." + # Use sed to replace the existing hostname line under k3os + # /^\s*hostname:/ matches any line starting with optional spaces followed by 'hostname:' + sed -i "/^\s*hostname:/c\\$HOSTNAME_ENTRY" "$CONFIG_FILE" + + # 3. 'k3os:' exists but 'hostname:' does not. + else + echo "'k3os:' block found, but no hostname entry. Appending the entry." + # Use sed to insert the new hostname entry immediately after the 'k3os:' line + # The 'a\' command appends text after the matched line + sed -i "/^k3os:/a\\$HOSTNAME_ENTRY" "$CONFIG_FILE" + fi + + # Check the exit status of the previous command + if [ $? -eq 0 ]; then + echo "Successfully updated the hostname in $CONFIG_FILE." + echo "The change will take effect after a reboot." + echo "" + echo "--- Verification (Hostname line only) ---" + # Print the modified line for verification + grep -E "^\s*hostname:" "$CONFIG_FILE" + else + echo "Failed to modify $CONFIG_FILE." + exit 1 + fi +} + +# --- Main execution --- +get_hostname_input +set_hostname "$NEW_HOSTNAME" \ No newline at end of file