Files
gists/scripts/proxy/install_proxy.sh
T
2026-05-22 13:01:54 +02:00

128 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
# --- HELPER FUNCTIONS ---
function info() { echo -e "\e[34mINFO:\e[0m $1"; }
function warn() { echo -e "\e[33mWARN:\e[0m $1"; }
function error() { echo -e "\e[31mERROR:\e[0m $1"; exit 1; }
function success() { echo -e "\e[32mSUCCESS:\e[0m $1"; }
# 1. PREREQUISITE CHECKS
info "Verifying prerequisites..."
if [ "$EUID" -eq 0 ]; then
error "Please run this script as your standard user, not as root.\nThe script will prompt for sudo access automatically when needed."
fi
if ! command -v node >/dev/null 2>&1; then
error "Node.js is not installed. Please install Node.js first."
fi
# Check for files
[ -f "bridge.js" ] || error "bridge.js not found."
[ -f "setup.js" ] || error "setup.js not found."
[ -f "proxyctl.js" ] || error "proxyctl.js not found."
# 2. SYSTEM PACKAGES
info "Installing required system packages (libsecret-tools)..."
sudo apt-get update -qq
sudo apt-get install -y libsecret-tools -qq
# 3. DIRECTORY SETUP
BRIDGE_DIR="/opt/proxy-bridge"
BIN_DIR="${HOME}/.local/bin"
info "Setting up $BRIDGE_DIR..."
sudo mkdir -p "$BRIDGE_DIR"
sudo chown -R $USER:$USER "$BRIDGE_DIR"
# 4. DEPLOY FILES
info "Deploying bridge scripts..."
cp bridge.js "$BRIDGE_DIR/"
cp setup.js "$BRIDGE_DIR/"
cp proxyctl.js "$BRIDGE_DIR/"
chmod +x "$BRIDGE_DIR/proxyctl.js"
info "Installing management CLI to $BIN_DIR/proxy-bridge..."
mkdir -p "$BIN_DIR"
ln -sf "$BRIDGE_DIR/proxyctl.js" "$BIN_DIR/proxy-bridge"
# 5. CONFIGURATION & CREDENTIALS
if [ ! -f "$BRIDGE_DIR/config.json" ] || [ ! -f "$BRIDGE_DIR/user.json" ]; then
info "Launching interactive setup..."
node "$BRIDGE_DIR/setup.js"
fi
# 6. SYSTEMD SERVICE SETUP
info "Configuring user-level systemd service..."
mkdir -p ~/.config/systemd/user/
cat <<EOF > ~/.config/systemd/user/proxy-bridge.service
[Unit]
Description=Local Proxy Bridge (Keyring Auth)
After=network.target
[Service]
Type=simple
ExecStart=$(command -v node) $BRIDGE_DIR/bridge.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable proxy-bridge.service
systemctl --user restart proxy-bridge.service
# 7. SYSTEM-WIDE PROXY CONFIGURATION (Point to local bridge)
BRIDGE_URL="http://127.0.0.1:8888/"
# 7a. APT Configuration
info "Updating APT proxy configuration..."
APT_CONF="/etc/apt/apt.conf.d/80proxy-bridge"
echo "Acquire::http::Proxy \"$BRIDGE_URL\";" | sudo tee "$APT_CONF" > /dev/null
echo "Acquire::https::Proxy \"$BRIDGE_URL\";" | sudo tee -a "$APT_CONF" > /dev/null
# 7b. Bashrc Configuration
info "Updating .bashrc proxy settings..."
BASHRC="$HOME/.bashrc"
MARKER="#PROXY_BRIDGE_CONFIG"
if ! grep -q "$MARKER" "$BASHRC"; then
cat <<EOF >> "$BASHRC"
# Local Proxy Bridge Configuration $MARKER
export http_proxy="$BRIDGE_URL"
export https_proxy="$BRIDGE_URL"
export HTTP_PROXY="$BRIDGE_URL"
export HTTPS_PROXY="$BRIDGE_URL"
export NO_PROXY="localhost,127.0.0.1,::1"
export no_proxy="localhost,127.0.0.1,::1"
EOF
fi
# 7c. System Services (Docker, Snap, etc.)
SERVICES=(docker snapd ollama)
info "Updating system services proxy configuration..."
for service in "${SERVICES[@]}"; do
if systemctl list-unit-files | grep -q "^${service}.service"; then
info "Configuring $service..."
SERVICE_DIR="/etc/systemd/system/${service}.service.d"
sudo mkdir -p "$SERVICE_DIR"
cat <<EOF | sudo tee "$SERVICE_DIR/http-proxy.conf" > /dev/null
[Service]
Environment="HTTP_PROXY=$BRIDGE_URL"
Environment="HTTPS_PROXY=$BRIDGE_URL"
Environment="NO_PROXY=localhost,127.0.0.1,::1"
EOF
sudo systemctl daemon-reload
sudo systemctl restart "$service" 2>/dev/null || warn "Failed to restart $service (maybe not running?)"
fi
done
success "Installation and system-wide configuration complete!"
info "Management command: proxy-bridge status|toggle|profile"
info "The Proxy Bridge is running and configured for APT, Bash, and core services."
info "Logs: journalctl --user -u proxy-bridge.service -f"