77 lines
2.6 KiB
Bash
77 lines
2.6 KiB
Bash
#!/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.
|
|
|
|
# Define the path to the config file and the mount point
|
|
CONFIG_FILE="/k3os/system/config.yaml"
|
|
CONFIG_DIR="/k3os/system"
|
|
|
|
# --- Function to get user input ---
|
|
get_hostname_input() {
|
|
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**"
|
|
echo "Config file location: **$CONFIG_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"
|
|
|
|
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
|
|
|
|
# 4. Report status
|
|
if [ $MODIFICATION_STATUS -eq 0 ]; then
|
|
echo ""
|
|
echo "Successfully updated the hostname in $CONFIG_FILE."
|
|
echo "The change will take effect after a **reboot**."
|
|
echo ""
|
|
echo "--- Verification (Hostname line only) ---"
|
|
grep -E "^\s*hostname:" "$CONFIG_FILE"
|
|
else
|
|
echo "Error: Failed to modify $CONFIG_FILE during step 2."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# --- Main execution ---
|
|
get_hostname_input
|
|
set_hostname "$NEW_HOSTNAME" |