145 lines
5.2 KiB
Plaintext
145 lines
5.2 KiB
Plaintext
|
#!/bin/bash
|
||
|
|
||
|
# Colors
|
||
|
RED='\033[0;31m'
|
||
|
GREEN='\033[0;32m'
|
||
|
BLUE='\033[1;34m'
|
||
|
NC='\033[0m' # No Color
|
||
|
|
||
|
# Ask for and set the hostname
|
||
|
echo -e "${BLUE}Enter the hostname:${NC}"
|
||
|
read -r new_hostname
|
||
|
|
||
|
# Detect the network interface
|
||
|
network_interface=$(nmcli -t -f DEVICE connection show --active | head -n 1)
|
||
|
|
||
|
# Ask for and set the IP address
|
||
|
echo -e "${BLUE}Enter the IP address (eg.: 10.11.x.x/24):${NC}"
|
||
|
read -r ip_address
|
||
|
|
||
|
# Ask for and set the DNS server
|
||
|
default_dns1="10.11.23.10"
|
||
|
default_dns2="10.11.23.18"
|
||
|
echo -e "${BLUE}Enter the DNS server (default: $default_dns1, $default_dns2):${NC}"
|
||
|
read -r dns_server
|
||
|
dns_server=${dns_server:-"$default_dns1 $default_dns2"}
|
||
|
|
||
|
# Ask if Btrfs compression should be enabled
|
||
|
if [[ $(df -T / | awk 'NR==2 {print $2}') == "btrfs" ]]; then
|
||
|
echo -e "${BLUE}Do you want to enable Btrfs compression? (y/n):${NC}"
|
||
|
read -r enable_compression
|
||
|
fi
|
||
|
|
||
|
if [[ "$enable_compression" == "y" || "$enable_compression" == "Y" ]]; then
|
||
|
# Ask for the use case
|
||
|
echo -e "${BLUE} the use case:${NC}"
|
||
|
echo "1. Databases, File Storage, etc (recommended compression level: 15)"
|
||
|
echo "2. Real-time compression (recommended compression level: 3)"
|
||
|
echo "3. Custom compression level"
|
||
|
read -r use_case
|
||
|
|
||
|
# Set the recommended compression level based on the use case
|
||
|
case "$use_case" in
|
||
|
1) compression_level=15 ;;
|
||
|
2) compression_level=3 ;;
|
||
|
3) echo -e "${BLUE}Enter the custom compression level (1-15):${NC}"
|
||
|
read -r compression_level ;;
|
||
|
*) echo -e "${RED}Invalid use case. Exiting script.${NC}"; exit 1 ;;
|
||
|
esac
|
||
|
fi
|
||
|
|
||
|
# Ask if CheckMK Agent should be installed
|
||
|
echo -e "${BLUE}Do you want to install the CheckMK Agent? (y/n):${NC}"
|
||
|
read -r install_checkmk_agent
|
||
|
|
||
|
# Ask if ports and services should be opened
|
||
|
echo -e "${BLUE}Do you want to open any ports or services? (y/n):${NC}"
|
||
|
read -r open_ports_services
|
||
|
|
||
|
if [[ "$open_ports_services" == "y" || "$open_ports_services" == "Y" ]]; then
|
||
|
# Ask for and set the services to open
|
||
|
echo -e "${BLUE}Enter the services to open (comma-separated):${NC}"
|
||
|
read -r services
|
||
|
|
||
|
# Ask for and set the ports to open
|
||
|
echo -e "${BLUE}Enter the ports to open (comma-separated):${NC}"
|
||
|
read -r ports
|
||
|
fi
|
||
|
|
||
|
# Apply Changes
|
||
|
echo -e "${BLUE}Are you sure you want to apply the changes? This may cause a loss of SSH connection. (y/n):${NC}"
|
||
|
read -r answer
|
||
|
|
||
|
# Check the user's response
|
||
|
if [[ "$answer" == "y" || "$answer" == "Y" ]]; then
|
||
|
# Comment out the script execution line in .bashrc
|
||
|
sed -i '/~\/firstrun\.sh/s/^/#/' ~/.bashrc
|
||
|
hostnamectl set-hostname "$new_hostname"
|
||
|
|
||
|
nmcli device modify "$network_interface" ipv4.dns "$dns_server" > /dev/null
|
||
|
nmcli device modify "$network_interface" ipv6.method ignore > /dev/null
|
||
|
nmcli device modify "$network_interface" ipv4.addresses "$ip_address" ipv4.method manual > /dev/null
|
||
|
|
||
|
# Modify /etc/hosts file
|
||
|
ip_address=$(echo "$ip_address" | sed 's/.\{3\}$//')
|
||
|
if grep "$ip_address" /etc/hosts > /dev/null 2>&1; then
|
||
|
echo "IP address already exists in /etc/hosts"
|
||
|
else
|
||
|
# Add IP address and hostname after the "127.0.0.1 localhost" entry
|
||
|
sed -i '1a\'"$ip_address\t$new_hostname" /etc/hosts
|
||
|
|
||
|
if [ $? -eq 0 ]; then
|
||
|
echo "IP address and hostname added to /etc/hosts"
|
||
|
else
|
||
|
echo "Failed to add IP address and hostname to /etc/hosts"
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Modify Btrfs compression settings in /etc/fstab
|
||
|
if [[ "$enable_compression" == "y" || "$enable_compression" == "Y" ]]; then
|
||
|
if ! grep -q "compress=zstd" /etc/fstab; then
|
||
|
sed -i "/btrfs/s/defaults/defaults,compress=zstd:$compression_level/" /etc/fstab
|
||
|
else
|
||
|
sed -i "/btrfs/s/compress=zstd:[0-9]*/compress=zstd:$compression_level/" /etc/fstab
|
||
|
fi
|
||
|
else
|
||
|
if grep -q "compress=zstd" /etc/fstab; then
|
||
|
sed -i "/btrfs/s/,compress=zstd:[0-9]*//" /etc/fstab
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if [[ "$install_checkmk_agent" == "y" || "$install_checkmk_agent" == "Y" ]]; then
|
||
|
# Run the CheckMK Agent installation script
|
||
|
bash Scripts/install_checkmk_agent.sh
|
||
|
fi
|
||
|
|
||
|
if [[ "$open_ports_services" == "y" || "$open_ports_services" == "Y" ]]; then
|
||
|
# Open the specified services
|
||
|
IFS=',' read -ra service_array <<< "$services"
|
||
|
for service in "${service_array[@]}"; do
|
||
|
firewall-cmd --add-service="$service" --permanent > /dev/null
|
||
|
done
|
||
|
|
||
|
# Open the specified ports
|
||
|
IFS=',' read -ra port_array <<< "$ports"
|
||
|
for port in "${port_array[@]}"; do
|
||
|
firewall-cmd --add-port="$port"/tcp --permanent > /dev/null
|
||
|
done
|
||
|
|
||
|
firewall-cmd --reload > /dev/null 2>&1
|
||
|
fi
|
||
|
|
||
|
# Open port 6556/tcp for CheckMK Agent if it was installed
|
||
|
if [[ "$install_checkmk_agent" == "y" || "$install_checkmk_agent" == "Y" ]]; then
|
||
|
firewall-cmd --add-port=6556/tcp --permanent > /dev/null 2>&1
|
||
|
firewall-cmd --reload > /dev/null 2>&1
|
||
|
else
|
||
|
firewall-cmd --remove-port=6556/tcp --permanent > /dev/null 2>&1
|
||
|
firewall-cmd --reload > /dev/null 2>&1
|
||
|
fi
|
||
|
|
||
|
echo -e "${GREEN}Changes applied successfully.${NC}"
|
||
|
else
|
||
|
echo -e "${RED}Changes not applied. Exiting script.${NC}"
|
||
|
exit 0
|
||
|
fi
|