From d92d0ed88325d02fa75dfca42092152fd52fd2e6 Mon Sep 17 00:00:00 2001 From: Menno van Leeuwen Date: Wed, 22 Jan 2025 15:27:35 +0100 Subject: [PATCH] refactor: enhance setup script with compat checks --- setup.sh | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/setup.sh b/setup.sh index 51962f0..96aecf4 100755 --- a/setup.sh +++ b/setup.sh @@ -309,6 +309,12 @@ warning_prompt() { } check_selinux() { + # Check if distro has SELinux at all: + if [ ! -f /etc/selinux ]; then + log_success "SELinux not found. Skipping..." + return 0 + fi + # Check if getenforce is returning Enforcing if [ "$(getenforce)" = "Enforcing" ]; then log_warning "SELinux is enabled. Adjusting SELinux to permissive mode..." @@ -321,7 +327,86 @@ EOF fi } +ensure_pipx() { + if ! command -v pipx >/dev/null 2>&1; then + log_info "Installing pipx..." + + # On Fedora/RedHat, install pipx using dnf + if command -v dnf >/dev/null 2>&1; then + sudo dnf install pipx || die "Failed to install pipx" + fi + + # On Ubuntu/Debian, install pipx using apt + if command -v apt >/dev/null 2>&1; then + sudo apt install pipx || die "Failed to install pipx" + fi + + # On Arch Linux, install pipx using pacman + if command -v pacman >/dev/null 2>&1; then + sudo pacman -S python-pipx || die "Failed to install pipx" + fi + + # ensurepath globally + sudo pipx ensurepath --global || die "Failed to ensure pipx path" + fi +} + +setup_ansible() { + ensure_pipx + + log_info "Installing Ansible..." + pipx install ansible || die "Failed to install Ansible" +} + +check_command_availibility() { + local command="$1" + if ! command -v "$command" >/dev/null 2>&1; then + die "$command is required but not installed" + fi +} + +# Check compatibility checks for supported distros: +# - Fedora +# - Ubuntu +# - Arch Linux (Untested) +check_compatibility() { + # Check if we are running under bash + if [ -z "${BASH_VERSION:-}" ]; then + die "This script was designed to run using bash, please run using bash" + fi + + check_command_availibility "awk" + check_command_availibility "tail" + check_command_availibility "echo" + check_command_availibility "git" + check_command_availibility "sudo" + + local distro + distro=$(awk -F= '/^NAME/{print $2}' /etc/os-release | tr -d '"') + + case "$distro" in + Fedora Linux) + log_success "Detected Fedora. Proceeding with setup..." + check_command_availibility "dnf" + ;; + Ubuntu) + log_success "Detected Ubuntu. Proceeding with setup..." + check_command_availibility "apt" + ;; + Arch*) + log_warning "Detected Arch Linux. Setup has not been tested on Arch Linux." + log_warning "Proceed at your own risk..." + check_command_availibility "pacman" + ;; + *) + die "Unsupported distribution: $distro" + ;; + esac +} + main() { + check_compatibility + # Check if setup has already been run if [ -f "$SETUP_MARKER" ]; then log_info "Setup has already been run, exiting..." @@ -357,6 +442,7 @@ main() { install_home_manager setup_symlinks + setup_ansible # Get hostname local hostname