141 lines
3.5 KiB
Bash
141 lines
3.5 KiB
Bash
#!/bin/bash
|
|
|
|
# NAS Setup Script - Version 1.0
|
|
#
|
|
# This script automates the setup of a NAS system with various services.
|
|
# It is designed to run on multiple Linux distributions, including:
|
|
# - Ubuntu
|
|
# - Debian
|
|
# - Fedora
|
|
# - Arch Linux
|
|
# - openSUSE
|
|
#
|
|
# Disclaimer:
|
|
# This script is provided "as is", without warranty of any kind, express or implied,
|
|
# including but not limited to the warranties of merchantability, fitness for a particular purpose,
|
|
# and noninfringement. In no event shall the authors or copyright holders be liable for any claim,
|
|
# damages, or other liability, whether in an action of contract, tort, or otherwise, arising from,
|
|
# out of, or in connection with the software or the use or other dealings in the software.
|
|
#
|
|
# Usage:
|
|
# Run this script with root privileges on a fresh installation of a supported Linux distribution.
|
|
# Ensure you have an active internet connection before starting the setup.
|
|
#
|
|
# Author: Sebastian Palencsár
|
|
# License: MIT License
|
|
# (c) 2025 Sebastian Palencsár
|
|
|
|
# Import configuration and functions
|
|
source "$(dirname "$0")/config/defaults.sh"
|
|
source "$(dirname "$0")/lib/logging.sh"
|
|
source "$(dirname "$0")/lib/network.sh"
|
|
source "$(dirname "$0")/lib/docker.sh"
|
|
source "$(dirname "$0")/lib/security.sh"
|
|
source "$(dirname "$0")/lib/internet.sh"
|
|
source "$(dirname "$0")/lib/nfs.sh"
|
|
source "$(dirname "$0")/lib/netdata.sh"
|
|
source "$(dirname "$0")/lib/firewall.sh"
|
|
source "$(dirname "$0")/lib/unattended-upgrades.sh"
|
|
source "$(dirname "$0")/lib/vaultwarden.sh"
|
|
source "$(dirname "$0")/lib/jellyfin.sh"
|
|
source "$(dirname "$0")/lib/portainer.sh"
|
|
|
|
# Logging configuration
|
|
exec > >(tee -a "${LOG_FILE}") 2>&1
|
|
|
|
# Improved error handling
|
|
handle_error() {
|
|
"$@"
|
|
local status=$?
|
|
if [ $status -ne 0 ]; then
|
|
log_error "Error executing $* (exit code: $status)"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Detect Linux distribution
|
|
detect_distro() {
|
|
if [ -f /etc/os-release ]; then
|
|
. /etc/os-release
|
|
DISTRO=$ID
|
|
else
|
|
log_error "Unsupported Linux distribution."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Main script execution
|
|
log_info "NAS Setup Script started."
|
|
|
|
detect_distro
|
|
check_internet_connection
|
|
|
|
case $DISTRO in
|
|
ubuntu|debian)
|
|
check_ubuntu_version
|
|
;;
|
|
fedora|arch|opensuse)
|
|
# Add specific checks here if needed
|
|
;;
|
|
*)
|
|
log_error "Unsupported Linux distribution: $DISTRO"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
check_system_requirements
|
|
|
|
load_or_create_config
|
|
|
|
update_system
|
|
|
|
configure_network
|
|
configure_ssh
|
|
setup_samba
|
|
configure_firewall
|
|
|
|
secure_shared_memory
|
|
install_fail2ban
|
|
configure_automatic_updates
|
|
setup_basic_monitoring
|
|
|
|
if ask_yes_no "Do you want to install Docker?"; then
|
|
install_docker
|
|
fi
|
|
|
|
if ask_yes_no "Do you want to install additional components?"; then
|
|
install_additional_components
|
|
else
|
|
log_info "Installation of additional components skipped."
|
|
fi
|
|
|
|
if ask_yes_no "Do you want to install NFS?"; then
|
|
install_nfs
|
|
fi
|
|
|
|
if ask_yes_no "Do you want to install Netdata for advanced monitoring?"; then
|
|
install_netdata
|
|
fi
|
|
|
|
if ask_yes_no "Do you want to install Vaultwarden?"; then
|
|
install_vaultwarden
|
|
fi
|
|
|
|
if ask_yes_no "Do you want to install Jellyfin?"; then
|
|
install_jellyfin
|
|
fi
|
|
|
|
if ask_yes_no "Do you want to install Portainer?"; then
|
|
install_portainer
|
|
fi
|
|
|
|
cleanup
|
|
|
|
log_info "Setup completed. User $NEW_USER has been created with sudo and Samba access. Installation of optional components completed."
|
|
show_progress 100 100 "Setup completed"
|
|
|
|
log_info "Please reboot your system to ensure all changes take effect."
|
|
if ask_yes_no "Do you want to reboot now?"; then
|
|
sudo reboot
|
|
fi
|