From 4e8616dd9760b120942e1409d516e18a1b46254d Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Sat, 31 Jan 2026 00:31:43 +0000 Subject: [PATCH] Update install script and README to use precompiled release binary Install script now downloads the latest GitHub release binary instead of cloning and building from source. Build dependencies are no longer needed for the quick install path. Co-Authored-By: Claude Opus 4.5 --- README.md | 15 +++------------ install.sh | 50 ++++++++++++++++++++++++++------------------------ 2 files changed, 29 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index de9562c..22de9f6 100644 --- a/README.md +++ b/README.md @@ -39,26 +39,17 @@ Ferrosonic requires the following at runtime: | **D-Bus** | MPRIS2 desktop media controls | Recommended | | **cava** | Audio visualizer | Optional | -Build dependencies (needed to compile from source): - -| Dependency | Package (Arch) | Package (Fedora) | Package (Debian/Ubuntu) | -|---|---|---|---| -| **Rust toolchain** | `rustup` | via rustup.rs | via rustup.rs | -| **pkg-config** | `pkgconf` | `pkgconf-pkg-config` | `pkg-config` | -| **OpenSSL dev headers** | `openssl` | `openssl-devel` | `libssl-dev` | -| **D-Bus dev headers** | `dbus` | `dbus-devel` | `libdbus-1-dev` | - ### Quick Install -Supports Arch, Fedora, and Debian/Ubuntu. Installs dependencies, Rust (if needed), builds from source, and installs to `/usr/local/bin/`: +Supports Arch, Fedora, and Debian/Ubuntu. Installs runtime dependencies, downloads the latest precompiled binary, and installs to `/usr/local/bin/`: ```bash curl -sSf https://raw.githubusercontent.com/jaidaken/ferrosonic/master/install.sh | sh ``` -### Manual Build +### Build from Source -If you prefer to build manually, install the dependencies listed above, then: +If you prefer to build from source, you'll also need: Rust toolchain, pkg-config, OpenSSL dev headers, and D-Bus dev headers. Then: ```bash git clone https://github.com/jaidaken/ferrosonic.git diff --git a/install.sh b/install.sh index 28cf8f7..0fae6b7 100755 --- a/install.sh +++ b/install.sh @@ -1,25 +1,36 @@ #!/bin/sh set -e -REPO="https://github.com/jaidaken/ferrosonic.git" +REPO="https://github.com/jaidaken/ferrosonic" INSTALL_DIR="/usr/local/bin" echo "Ferrosonic installer" echo "====================" -# Detect package manager and install dependencies +# Detect architecture +ARCH=$(uname -m) +case "$ARCH" in + x86_64) ASSET="ferrosonic-linux-x86_64" ;; + *) + echo "No precompiled binary for $ARCH. Please build from source." + echo "See: $REPO#manual-build" + exit 1 + ;; +esac + +# Detect package manager and install runtime dependencies if command -v pacman >/dev/null 2>&1; then echo "Detected Arch Linux" - sudo pacman -S --needed --noconfirm mpv pipewire wireplumber base-devel pkgconf dbus + sudo pacman -S --needed --noconfirm mpv pipewire wireplumber dbus elif command -v dnf >/dev/null 2>&1; then echo "Detected Fedora" - sudo dnf install -y mpv pipewire wireplumber gcc pkgconf-pkg-config dbus-devel + sudo dnf install -y mpv pipewire wireplumber dbus elif command -v apt >/dev/null 2>&1; then echo "Detected Debian/Ubuntu" sudo apt update - sudo apt install -y mpv pipewire wireplumber build-essential pkg-config libdbus-1-dev + sudo apt install -y mpv pipewire wireplumber libdbus-1-3 else - echo "Unknown package manager. Please install manually: mpv, pipewire, wireplumber, pkg-config, dbus dev headers" + echo "Unknown package manager. Please install manually: mpv, pipewire, wireplumber, dbus" echo "Then re-run this script." exit 1 fi @@ -47,26 +58,17 @@ else echo "Skipping cava. You can install it later and enable it in Settings (F5)." fi -# Install Rust if not present -if ! command -v cargo >/dev/null 2>&1; then - echo "Installing Rust toolchain..." - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - . "$HOME/.cargo/env" -fi - -# Clone and build -TMPDIR=$(mktemp -d) -echo "Building ferrosonic..." -git clone "$REPO" "$TMPDIR/ferrosonic" -cd "$TMPDIR/ferrosonic" -cargo build --release +# Download latest release binary +echo "Downloading ferrosonic..." +LATEST=$(curl -sI "$REPO/releases/latest" | grep -i '^location:' | sed 's/.*tag\///' | tr -d '\r') +DOWNLOAD_URL="$REPO/releases/download/$LATEST/$ASSET" +TMPFILE=$(mktemp) +curl -sL "$DOWNLOAD_URL" -o "$TMPFILE" +chmod +x "$TMPFILE" # Install -sudo cp target/release/ferrosonic "$INSTALL_DIR/ferrosonic" - -# Cleanup -rm -rf "$TMPDIR" +sudo mv "$TMPFILE" "$INSTALL_DIR/ferrosonic" echo "" -echo "Ferrosonic installed to $INSTALL_DIR/ferrosonic" +echo "Ferrosonic $LATEST installed to $INSTALL_DIR/ferrosonic" echo "Run 'ferrosonic' to start."