Add installation script.

This commit is contained in:
2025-11-28 14:24:05 +00:00
parent 9c1c1eb9c6
commit 11ae97c97c
Executable
+141
View File
@@ -0,0 +1,141 @@
#!/bin/bash
set -e
# lolcathost installer script
# Usage: curl -fsSL https://raw.githubusercontent.com/lukaszraczylo/lolcathost/main/install.sh | bash
REPO="lukaszraczylo/lolcathost"
INSTALL_DIR="/usr/local/bin"
BINARY_NAME="lolcathost"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
error() {
echo -e "${RED}[ERROR]${NC} $1"
exit 1
}
# Detect OS and architecture
detect_platform() {
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
case "$OS" in
darwin)
OS="darwin"
;;
linux)
OS="linux"
;;
*)
error "Unsupported operating system: $OS"
;;
esac
case "$ARCH" in
x86_64|amd64)
ARCH="amd64"
;;
arm64|aarch64)
ARCH="arm64"
;;
*)
error "Unsupported architecture: $ARCH"
;;
esac
PLATFORM="${OS}_${ARCH}"
info "Detected platform: $PLATFORM"
}
# Get latest release version
get_latest_version() {
info "Fetching latest release..."
VERSION=$(curl -sL "https://api.github.com/repos/${REPO}/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
if [ -z "$VERSION" ]; then
error "Failed to fetch latest version"
fi
info "Latest version: $VERSION"
}
# Download and install
download_and_install() {
# Strip 'v' prefix from version for filename (goreleaser uses version without v)
VERSION_NUM=${VERSION#v}
# Construct download URL (matches goreleaser naming: lolcathost-VERSION-OS-ARCH.tar.gz)
DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${VERSION}/${BINARY_NAME}-${VERSION_NUM}-${OS}-${ARCH}.tar.gz"
info "Downloading from: $DOWNLOAD_URL"
# Create temp directory
TMP_DIR=$(mktemp -d)
trap "rm -rf $TMP_DIR" EXIT
# Download
if ! curl -sL "$DOWNLOAD_URL" -o "$TMP_DIR/lolcathost.tar.gz"; then
error "Failed to download release"
fi
# Extract
info "Extracting..."
tar -xzf "$TMP_DIR/lolcathost.tar.gz" -C "$TMP_DIR"
# Find the binary (might be in root or subdirectory)
BINARY_PATH=$(find "$TMP_DIR" -name "$BINARY_NAME" -type f | head -1)
if [ -z "$BINARY_PATH" ]; then
error "Binary not found in archive"
fi
# Install
info "Installing to $INSTALL_DIR/$BINARY_NAME..."
if [ -w "$INSTALL_DIR" ]; then
cp "$BINARY_PATH" "$INSTALL_DIR/$BINARY_NAME"
chmod +x "$INSTALL_DIR/$BINARY_NAME"
else
warn "Need sudo to install to $INSTALL_DIR"
sudo cp "$BINARY_PATH" "$INSTALL_DIR/$BINARY_NAME"
sudo chmod +x "$INSTALL_DIR/$BINARY_NAME"
fi
info "Binary installed successfully!"
}
# Main
main() {
echo ""
echo " lolcathost installer"
echo " ===================="
echo ""
detect_platform
get_latest_version
download_and_install
echo ""
info "Installation complete!"
echo ""
echo " Next steps:"
echo " 1. Install the daemon: sudo lolcathost --install"
echo " 2. Open a new terminal (for group membership)"
echo " 3. Run: lolcathost"
echo ""
}
main