Files
unlimitedcoding/claude/uclaude_install.sh
delta-cloud-208e 40188adf54 fix: replace bash <(curl) with curl | bash in all install instructions
Process substitution <(...) fails with sudo and on systems without /dev/fd.
Pipe syntax works universally on all Linux/macOS systems.

Also changed curl -s to curl -fsSL for proper error handling.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 13:27:52 +00:00

106 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# UClaude — one-line installer with full auto-install chain
# Usage: curl -fsSL https://git.sensey24.ru/aibot777/unlimitedcoding/raw/branch/master/claude/uclaude_install.sh | bash
set -e
REPO_URL="https://git.sensey24.ru/aibot777/unlimitedcoding.git"
INSTALL_DIR="${UCLAUDE_DIR:-$HOME/unlimitedcoding}"
echo "=== UClaude Installer ==="
echo " Install dir: $INSTALL_DIR"
# ---- Auto-install prerequisites ----
install_pkg() {
# Try apt, then yum/dnf, then brew
if command -v apt-get >/dev/null 2>&1; then
apt-get update -qq && apt-get install -y -qq "$@"
elif command -v dnf >/dev/null 2>&1; then
dnf install -y -q "$@"
elif command -v yum >/dev/null 2>&1; then
yum install -y -q "$@"
elif command -v brew >/dev/null 2>&1; then
brew install "$@"
else
echo "ERROR: No package manager found. Install $* manually."
return 1
fi
}
need_sudo() {
if [ "$(id -u)" -ne 0 ]; then
echo " Root privileges required to install packages."
echo " Re-run: curl -fsSL $REPO_URL/raw/branch/master/claude/uclaude_install.sh | sudo bash"
exit 1
fi
}
# Git
if ! command -v git >/dev/null 2>&1; then
echo " git not found, installing..."
need_sudo
install_pkg git
fi
# Python 3
if ! command -v python3 >/dev/null 2>&1; then
echo " python3 not found, installing..."
need_sudo
install_pkg python3
fi
# curl (needed for nodesource)
if ! command -v curl >/dev/null 2>&1; then
echo " curl not found, installing..."
need_sudo
install_pkg curl
fi
# Node.js — updater handles version check and auto-install
if ! command -v node >/dev/null 2>&1; then
echo " Node.js not found. Updater will auto-install."
fi
# ---- Clone / Update repo ----
if [ -d "$INSTALL_DIR/.git" ]; then
echo " Already cloned, updating..."
cd "$INSTALL_DIR"
git fetch --depth 1 origin master 2>/dev/null
git reset --hard origin/master 2>/dev/null
else
echo " Cloning (shallow, sparse — only latest version)..."
# Shallow clone without checkout
git clone --depth 1 --no-checkout "$REPO_URL" "$INSTALL_DIR"
cd "$INSTALL_DIR"
# Enable sparse checkout: root + claude core files + index.json (first pass)
git sparse-checkout init --no-cone
git sparse-checkout set '/*' 'claude/*' '!claude/releases/v*' 'claude/releases/index.json'
git checkout 2>/dev/null
# Read latest version from index.json and add only that release dir
if [ -f claude/releases/index.json ]; then
VER=$(python3 -c "import json; print(json.load(open('claude/releases/index.json'))['latest'])")
echo " Latest version: v${VER}"
git sparse-checkout add "claude/releases/v${VER}"
git checkout 2>/dev/null
fi
fi
echo ""
echo " Running updater..."
# Run updater (needs root for cli.js replacement + node install)
if [ "$(id -u)" -eq 0 ]; then
python3 claude/uclaude_updater.py --force
else
echo " Root privileges required to install cli.js."
sudo python3 claude/uclaude_updater.py --force
fi
echo ""
echo "=== Installation complete ==="
echo " To update later: cd $INSTALL_DIR && sudo bash claude/uclaude_update.sh"