diff --git a/setup.sh b/setup.sh index eb1be25..b8d556f 100644 --- a/setup.sh +++ b/setup.sh @@ -3,196 +3,14 @@ set -e echo "--- TimeTurner Setup ---" -# Determine package manager -PKG_MANAGER="" -if command -v apt &> /dev/null; then - PKG_MANAGER="apt" -elif command -v dnf &> /dev/null; then - PKG_MANAGER="dnf" -elif command -v pacman &> /dev/null; then - PKG_MANAGER="pacman" -else - echo "Error: No supported package manager (apt, dnf, pacman) found. Please install dependencies manually." - exit 1 -fi - -echo "Detected package manager: $PKG_MANAGER" - -# --- Update System Packages --- -echo "Updating system packages..." -if [ "$PKG_MANAGER" == "apt" ]; then - sudo apt update && sudo apt upgrade -y -elif [ "$PKG_MANAGER" == "dnf" ]; then - sudo dnf upgrade -y -elif [ "$PKG_MANAGER" == "pacman" ]; then - sudo pacman -Syu --noconfirm -fi -echo "System packages updated." - -# --- Install Rust/Cargo if not installed --- -if ! command -v cargo &> /dev/null; then - echo "Rust/Cargo not found. Installing Rustup..." - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - # Source cargo's env for the current shell session - # This is for the current script's execution path, typically rustup adds to .bashrc/.profile for future sessions. - # We need it now, but for non-interactive script, sourcing won't affect parent shell. - # However, cargo build below will rely on it being in PATH. rustup makes sure of this if it installs. - # For safety, ensure PATH is updated. - export PATH="$HOME/.cargo/bin:$PATH" - echo "Rust/Cargo installed successfully." -else - echo "Rust/Cargo is already installed." -fi - -# --- Install common build dependencies for Rust --- -echo "Installing common build dependencies..." -if [ "$PKG_MANAGER" == "apt" ]; then - sudo apt update - sudo apt install -y build-essential libudev-dev pkg-config curl -elif [ "$PKG_MANAGER" == "dnf" ]; then - sudo dnf install -y gcc make perl-devel libudev-devel pkg-config curl -elif [ "$PKG_MANAGER" == "pacman" ]; then - sudo pacman -Sy --noconfirm base-devel libudev pkg-config curl -fi -echo "Common build dependencies installed." - -# --- Apply custom splash screen --- -if [[ "$(uname)" == "Linux" ]]; then - echo "🖼️ Applying custom splash screen..." - SPLASH_URL="https://raw.githubusercontent.com/cjfranko/NTP-Timeturner/refs/heads/main/splash.png" - PLYMOUTH_THEME_DIR="/usr/share/plymouth/themes/pix" - PLYMOUTH_IMAGE_PATH="${PLYMOUTH_THEME_DIR}/splash.png" - - sudo mkdir -p "${PLYMOUTH_THEME_DIR}" - echo "Downloading splash image from ${SPLASH_URL}..." - sudo curl -L "${SPLASH_URL}" -o "${PLYMOUTH_IMAGE_PATH}" - - if [ -f "${PLYMOUTH_IMAGE_PATH}" ]; then - echo "Splash image downloaded. Updating Plymouth configuration..." - # Set 'pix' as the default plymouth theme if not already. - # This is a common theme that expects splash.png. - sudo update-alternatives --install /usr/share/plymouth/themes/default.plymouth default.plymouth "${PLYMOUTH_THEME_DIR}/pix.plymouth" 100 || true - # Ensure the pix theme exists and is linked - if [ ! -f "${PLYMOUTH_THEME_DIR}/pix.plymouth" ]; then - echo "Creating dummy pix.plymouth for update-initramfs" - echo "[Plymouth Theme]" | sudo tee "${PLYMOUTH_THEME_DIR}/pix.plymouth" > /dev/null - echo "Name=Pi Splash" | sudo tee -a "${PLYMOUTH_THEME_DIR}/pix.plymouth" > /dev/null - echo "Description=TimeTurner Raspberry Pi Splash Screen" | sudo tee -a "${PLYMOUTH_THEME_DIR}/pix.plymouth" > /dev/null - echo "SpriteAnimation=/splash.png" | sudo tee -a "${PLYMOUTH_THEME_DIR}/pix.plymouth" > /dev/null - fi - - # Update the initial RAM filesystem to include the new splash screen - sudo update-initramfs -u - echo "✅ Custom splash screen applied. Reboot may be required to see changes." - else - echo "❌ Failed to download splash image from ${SPLASH_URL}." - fi -else - echo "⚠️ Skipping splash screen configuration on non-Linux OS." -fi - -# --- Remove NTPD and install Chrony, NMTUI, Adjtimex --- -echo "Removing NTPD (if installed) and installing Chrony, NMTUI, Adjtimex..." - -# --- Remove NTPD and install Chrony, NMTUI, Adjtimex --- -echo "Removing NTPD (if installed) and installing Chrony, NMTUI, Adjtimex..." - -if [ "$PKG_MANAGER" == "apt" ]; then - sudo apt update - sudo apt remove -y ntp || true # Remove ntp if it exists, ignore if not - sudo apt install -y chrony nmtui adjtimex - sudo systemctl enable chrony --now -elif [ "$PKG_MANAGER" == "dnf" ]; then - sudo dnf remove -y ntp || true - sudo dnf install -y chrony NetworkManager-tui adjtimex - sudo systemctl enable chronyd --now -elif [ "$PKG_MANAGER" == "pacman" ]; then - sudo pacman -Sy --noconfirm ntp || true - sudo pacman -R --noconfirm ntp || true # Ensure ntp is removed - sudo pacman -Sy --noconfirm chrony networkmanager adjtimex - sudo systemctl enable chronyd --now - sudo systemctl enable NetworkManager --now # nmtui relies on NetworkManager -fi - -echo "NTPD removed (if present). Chrony, NMTUI, and Adjtimex installed and configured." - -# --- Install and configure WiFi hotspot and captive portal --- -echo "📡 Installing and configuring WiFi hotspot and captive portal..." - -if [ "$PKG_MANAGER" == "apt" ]; then - sudo apt install -y hostapd dnsmasq nodogsplash - sudo systemctl unmask hostapd - sudo systemctl enable hostapd - sudo systemctl enable nodogsplash -fi - -# Stop services to configure -sudo systemctl stop hostapd -sudo systemctl stop dnsmasq -sudo systemctl stop nodogsplash - -# Configure static IP for wlan0 -echo "Configuring static IP for wlan0..." -sudo sed -i '/^interface wlan0/d' /etc/dhcpcd.conf -sudo tee -a /etc/dhcpcd.conf > /dev/null < /dev/null < /dev/null < /dev/null < /dev/null +then + echo "❌ Cargo is not installed. Please install Rust and Cargo first." + echo "Visit https://rustup.rs/ for instructions." + exit 1 +fi cargo build --release echo "✅ Build complete."