107 lines
3.9 KiB
Bash
Executable file
107 lines
3.9 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Script directory
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
SERVICE_FILE="$PROJECT_ROOT/systemd/nvidia-oc.service"
|
|
INSTALL_PATH="/etc/systemd/system/nvidia-oc.service"
|
|
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo -e "${BLUE}NVIDIA OC Service Installation${NC}"
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo
|
|
|
|
# Check if running as root
|
|
if [[ $EUID -ne 0 ]]; then
|
|
echo -e "${RED}Error: This script must be run as root${NC}"
|
|
echo -e "${YELLOW}Usage: sudo $0${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if service file exists
|
|
if [[ ! -f "$SERVICE_FILE" ]]; then
|
|
echo -e "${RED}Error: Service file not found at $SERVICE_FILE${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${YELLOW}Step 1/7: Checking prerequisites...${NC}"
|
|
|
|
# Check if nvidia-oc binary exists
|
|
if ! command -v nvidia-oc &> /dev/null; then
|
|
echo -e "${YELLOW}Warning: nvidia-oc command not found in PATH${NC}"
|
|
echo -e "${YELLOW}You may need to install the package or update ExecStart in the service file${NC}"
|
|
fi
|
|
|
|
# Check session type - X11 required for overclocking
|
|
echo -e "${YELLOW}Step 2/7: Checking display server compatibility...${NC}"
|
|
SESSION_TYPE="${XDG_SESSION_TYPE:-unknown}"
|
|
if [ -d "/usr/share/xsessions" ] && [ "$(ls -A /usr/share/xsessions 2>/dev/null)" ]; then
|
|
echo -e "${GREEN}✓ X11 sessions available${NC}"
|
|
else
|
|
echo -e "${YELLOW}⚠ Note: No X11 sessions found - using nvidia-smi backend${NC}"
|
|
echo -e "${YELLOW}nvidia-oc supports two overclocking backends:${NC}"
|
|
echo
|
|
echo -e "${GREEN} nvidia-settings (X11):${NC} Offset-based control (+150 MHz)"
|
|
echo -e "${GREEN} nvidia-smi (Wayland):${NC} Clock locking (absolute frequencies)"
|
|
echo
|
|
echo -e "${YELLOW}Your system will use nvidia-smi backend (works on Wayland).${NC}"
|
|
echo -e "${YELLOW}Both backends provide full overclocking functionality.${NC}"
|
|
echo
|
|
fi
|
|
|
|
# Create necessary directories
|
|
echo -e "${YELLOW}Step 3/7: Creating system directories...${NC}"
|
|
mkdir -p /var/lib/nvidia-oc/static
|
|
mkdir -p /etc/nvidia-oc
|
|
echo -e "${GREEN}✓ Directories created${NC}"
|
|
|
|
# Create sudoers configuration
|
|
echo -e "${YELLOW}Step 4/7: Creating sudoers configuration...${NC}"
|
|
cat <<EOF > /etc/sudoers.d/nvidia-oc
|
|
# Allow root to run nvidia-settings as any user (for nvidia-oc service)
|
|
# This enables the systemd service to run nvidia-settings as the logged-in
|
|
# user to access X server for GPU clock control
|
|
root ALL=(ALL) NOPASSWD: /usr/bin/nvidia-settings
|
|
EOF
|
|
chmod 440 /etc/sudoers.d/nvidia-oc
|
|
echo -e "${GREEN}✓ Sudoers configuration created${NC}"
|
|
|
|
# Copy service file
|
|
echo -e "${YELLOW}Step 5/7: Installing service file...${NC}"
|
|
cp "$SERVICE_FILE" "$INSTALL_PATH"
|
|
chmod 644 "$INSTALL_PATH"
|
|
echo -e "${GREEN}✓ Service file installed to $INSTALL_PATH${NC}"
|
|
|
|
# Reload systemd
|
|
echo -e "${YELLOW}Step 6/7: Reloading systemd daemon...${NC}"
|
|
systemctl daemon-reload
|
|
echo -e "${GREEN}✓ Systemd daemon reloaded${NC}"
|
|
|
|
# Enable service
|
|
echo -e "${YELLOW}Step 7/7: Enabling service...${NC}"
|
|
systemctl enable nvidia-oc.service
|
|
echo -e "${GREEN}✓ Service enabled${NC}"
|
|
|
|
echo
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo -e "${GREEN}Installation Complete!${NC}"
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo
|
|
echo -e "${YELLOW}Service Status:${NC}"
|
|
systemctl status nvidia-oc.service --no-pager || true
|
|
echo
|
|
echo -e "${YELLOW}Next Steps:${NC}"
|
|
echo -e " 1. Deploy frontend: ${BLUE}$PROJECT_ROOT/upgrade${NC}"
|
|
echo -e " 2. Start service: ${BLUE}sudo systemctl start nvidia-oc${NC}"
|
|
echo -e " 3. View logs: ${BLUE}sudo journalctl -u nvidia-oc -f${NC}"
|
|
echo -e " 4. Check health: ${BLUE}curl http://localhost:9420/health${NC}"
|
|
echo
|
|
echo -e "${YELLOW}The service will start automatically on boot.${NC}"
|