Update 2025-04-13_15:16:39
This commit is contained in:
108
lxc_create_container.sh
Executable file
108
lxc_create_container.sh
Executable file
@ -0,0 +1,108 @@
|
||||
#!/bin/bash
|
||||
# =============================================================================
|
||||
# Script Name: lxc_create_container.sh
|
||||
# Version: 1.1
|
||||
# Description: This script creates a new LXC container from a template, assigns
|
||||
# a unique MAC address, updates the hostname and /etc/hosts file,
|
||||
# and verifies internet access.
|
||||
# =============================================================================
|
||||
|
||||
# Prompt for the new container hostname
|
||||
read -e -p "LXCHOSTNAME: " LXCHOSTNAME
|
||||
export LXCHOSTNAME
|
||||
|
||||
# Check if the template container is running and stop it if necessary
|
||||
if lxc-info -n template | grep -q 'RUNNING'; then
|
||||
echo "Stopping the template container..."
|
||||
if ! lxc-stop -n template; then
|
||||
echo "Failed to stop the template container."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Template container is not running."
|
||||
fi
|
||||
|
||||
# Copy the template to create a new container with the given hostname
|
||||
echo "Creating a new container with hostname: $LXCHOSTNAME..."
|
||||
if ! lxc-copy -n template -N "$LXCHOSTNAME"; then
|
||||
echo "Failed to copy the template container."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Function to generate a unique MAC address
|
||||
generate_unique_hwaddr() {
|
||||
local hwaddr
|
||||
local existing_hwaddrs
|
||||
while : ; do
|
||||
hwaddr=$(printf '00:16:3e:%02x:%02x:%02x\n' $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)))
|
||||
existing_hwaddrs=$(grep "lxc.net.0.hwaddr" /var/lib/lxc/*/config | grep "$hwaddr")
|
||||
if [ -z "$existing_hwaddrs" ]; then
|
||||
# MAC address is unique
|
||||
echo "$hwaddr"
|
||||
return
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Generate a unique MAC address
|
||||
NEW_HWADDR=$(generate_unique_hwaddr)
|
||||
|
||||
# Path to the LXC configuration file
|
||||
CONFIG_FILE="/var/lib/lxc/$LXCHOSTNAME/config"
|
||||
|
||||
# Replace the existing hwaddr line
|
||||
echo "Updating MAC address in $CONFIG_FILE to $NEW_HWADDR..."
|
||||
if ! sed -i "/^lxc.net.0.hwaddr/c\lxc.net.0.hwaddr = $NEW_HWADDR" "$CONFIG_FILE"; then
|
||||
echo "Failed to update MAC address in $CONFIG_FILE."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Start the new container
|
||||
echo "Starting the new container..."
|
||||
if ! lxc-start -n "$LXCHOSTNAME"; then
|
||||
echo "Failed to start the container $LXCHOSTNAME."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Wait for the container to start
|
||||
sleep 5
|
||||
|
||||
# Change the hostname inside the container
|
||||
echo "Changing the hostname inside the container..."
|
||||
if ! lxc-attach -n "$LXCHOSTNAME" -- bash -c "echo '$LXCHOSTNAME' > /etc/hostname" || \
|
||||
! lxc-attach -n "$LXCHOSTNAME" -- hostname "$LXCHOSTNAME"; then
|
||||
echo "Failed to set the hostname inside the container."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Update /etc/hosts
|
||||
echo "Updating /etc/hosts inside the container..."
|
||||
if ! lxc-attach -n "$LXCHOSTNAME" -- bash -c "echo '127.0.0.1 $LXCHOSTNAME' >> /etc/hosts"; then
|
||||
echo "Failed to update /etc/hosts inside the container."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ensure the container has internet access (optional)
|
||||
echo "Checking internet connectivity inside the container..."
|
||||
if ! lxc-attach -n "$LXCHOSTNAME" -- ping -c 4 google.com; then
|
||||
echo "Container $LXCHOSTNAME does not have internet access."
|
||||
fi
|
||||
echo
|
||||
|
||||
# Stop and restart the container
|
||||
echo "Restarting the container..."
|
||||
if ! lxc-stop -n "$LXCHOSTNAME" || ! lxc-start -n "$LXCHOSTNAME"; then
|
||||
echo "Failed to restart the container $LXCHOSTNAME."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Display the MAC addresses to verify the changes
|
||||
echo "Displaying the MAC addresses to verify the changes..."
|
||||
grep lxc.net.0.hwaddr /var/lib/lxc/*/config
|
||||
|
||||
# Wait and list containers to ensure they are running
|
||||
sleep 9
|
||||
echo "Listing all containers..."
|
||||
lxc-ls -f
|
||||
|
||||
echo "LXC container setup completed successfully."
|
Reference in New Issue
Block a user