#!/bin/bash # Build (if needed) and install mcpctl locally. # Auto-detects package format: RPM for Fedora/RHEL, DEB for Debian/Ubuntu. # # Usage: # ./installlocal.sh # Build and install for native arch # MCPCTL_TARGET_ARCH=amd64 ./installlocal.sh # Cross-compile for amd64 set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" # Resolve target architecture source scripts/arch-helper.sh resolve_arch "${MCPCTL_TARGET_ARCH:-}" # Detect package format if command -v rpm &>/dev/null && command -v dnf &>/dev/null; then PKG_FORMAT="rpm" elif command -v dpkg &>/dev/null && command -v apt &>/dev/null; then PKG_FORMAT="deb" elif command -v rpm &>/dev/null; then PKG_FORMAT="rpm" else echo "Error: Neither rpm/dnf nor dpkg/apt found. Unsupported system." exit 1 fi echo "==> Detected package format: $PKG_FORMAT (arch: $NFPM_ARCH)" # Find package matching the target architecture find_pkg() { local pattern="$1" # Filter by architecture name in filename ls $pattern 2>/dev/null | grep -E "[._]${NFPM_ARCH}[._]" | head -1 } if [ "$PKG_FORMAT" = "rpm" ]; then PKG_FILE=$(find_pkg "dist/mcpctl-*.rpm") # Build if no package exists or if source is newer if [[ -z "$PKG_FILE" ]] || [[ $(find src/ -name '*.ts' -newer "$PKG_FILE" 2>/dev/null | head -1) ]]; then echo "==> Building RPM..." bash scripts/build-rpm.sh PKG_FILE=$(find_pkg "dist/mcpctl-*.rpm") else echo "==> RPM is up to date: $PKG_FILE" fi echo "==> Installing $PKG_FILE..." sudo rpm -Uvh --force "$PKG_FILE" else PKG_FILE=$(find_pkg "dist/mcpctl*.deb") # Build if no package exists or if source is newer if [[ -z "$PKG_FILE" ]] || [[ $(find src/ -name '*.ts' -newer "$PKG_FILE" 2>/dev/null | head -1) ]]; then echo "==> Building DEB..." bash scripts/build-deb.sh PKG_FILE=$(find_pkg "dist/mcpctl*.deb") else echo "==> DEB is up to date: $PKG_FILE" fi echo "==> Installing $PKG_FILE..." sudo dpkg -i "$PKG_FILE" || sudo apt-get install -f -y fi echo "==> Reloading systemd user units..." systemctl --user daemon-reload echo "==> Done!" echo " Enable mcplocal: systemctl --user enable --now mcplocal"