103 lines
3.5 KiB
Bash
103 lines
3.5 KiB
Bash
#!/bin/bash
|
|
|
|
# LED Matrix Web Interface Setup Script
|
|
# Combines permissions fixes, sudoers configuration, and service file check
|
|
|
|
set -e
|
|
|
|
echo "=== LED Matrix Web Interface Setup ==="
|
|
|
|
WEB_USER=$(whoami)
|
|
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
echo "Detected web interface user: $WEB_USER"
|
|
echo "Project directory: $PROJECT_DIR"
|
|
|
|
if [ "$EUID" -eq 0 ]; then
|
|
echo "Error: Do not run this script as root."
|
|
echo "Run it as the user that will run the web interface (e.g. pi)."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "This script will:"
|
|
echo "1. Add $WEB_USER to 'systemd-journal' and 'adm' groups"
|
|
echo "2. Fix ownership and permissions for config.json and assets/sponsors"
|
|
echo "3. Configure passwordless sudo for service control and reboot"
|
|
echo "4. Check for ledmatrix-web.service file"
|
|
echo ""
|
|
|
|
read -p "Proceed with setup? (y/N): " -n 1 -r
|
|
echo
|
|
[[ ! $REPLY =~ ^[Yy]$ ]] && echo "Cancelled." && exit 0
|
|
|
|
# --- Group memberships ---
|
|
echo "Adding $WEB_USER to groups..."
|
|
sudo usermod -a -G systemd-journal "$WEB_USER" && echo "✓ systemd-journal"
|
|
sudo usermod -a -G adm "$WEB_USER" && echo "✓ adm"
|
|
|
|
# --- File ownership/permissions ---
|
|
echo "Fixing file permissions..."
|
|
sudo chown -R "$WEB_USER:$WEB_USER" "$PROJECT_DIR"
|
|
sudo mkdir -p "$PROJECT_DIR/assets/sponsors"
|
|
sudo chown -R "$WEB_USER:$WEB_USER" "$PROJECT_DIR/assets/sponsors"
|
|
|
|
if [ -f "$PROJECT_DIR/config/config.json" ]; then
|
|
sudo chmod 644 "$PROJECT_DIR/config/config.json"
|
|
echo "✓ config.json permissions set"
|
|
else
|
|
echo "⚠ config/config.json not found"
|
|
fi
|
|
|
|
# --- Sudoers configuration ---
|
|
echo "Configuring sudoers..."
|
|
PYTHON_PATH=$(which python3)
|
|
SYSTEMCTL_PATH=$(which systemctl)
|
|
REBOOT_PATH=$(which reboot)
|
|
POWEROFF_PATH=$(which poweroff)
|
|
BASH_PATH=$(which bash)
|
|
|
|
TEMP_SUDOERS="/tmp/ledmatrix_web_sudoers_$$"
|
|
cat > "$TEMP_SUDOERS" << EOF
|
|
# LED Matrix Web Interface sudo rules
|
|
$WEB_USER ALL=(ALL) NOPASSWD: $REBOOT_PATH
|
|
$WEB_USER ALL=(ALL) NOPASSWD: $POWEROFF_PATH
|
|
$WEB_USER ALL=(ALL) NOPASSWD: $SYSTEMCTL_PATH start ledmatrix.service
|
|
$WEB_USER ALL=(ALL) NOPASSWD: $SYSTEMCTL_PATH stop ledmatrix.service
|
|
$WEB_USER ALL=(ALL) NOPASSWD: $SYSTEMCTL_PATH restart ledmatrix.service
|
|
$WEB_USER ALL=(ALL) NOPASSWD: $SYSTEMCTL_PATH enable ledmatrix.service
|
|
$WEB_USER ALL=(ALL) NOPASSWD: $SYSTEMCTL_PATH disable ledmatrix.service
|
|
$WEB_USER ALL=(ALL) NOPASSWD: $SYSTEMCTL_PATH status ledmatrix.service
|
|
$WEB_USER ALL=(ALL) NOPASSWD: $PYTHON_PATH $PROJECT_DIR/display_controller.py
|
|
$WEB_USER ALL=(ALL) NOPASSWD: $BASH_PATH $PROJECT_DIR/start_display.sh
|
|
$WEB_USER ALL=(ALL) NOPASSWD: $BASH_PATH $PROJECT_DIR/stop_display.sh
|
|
EOF
|
|
|
|
sudo cp "$TEMP_SUDOERS" /etc/sudoers.d/ledmatrix_web
|
|
sudo chmod 440 /etc/sudoers.d/ledmatrix_web
|
|
rm -f "$TEMP_SUDOERS"
|
|
echo "✓ sudoers installed"
|
|
|
|
# --- Service file check ---
|
|
SERVICE_FILE="$PROJECT_DIR/ledmatrix-web.service"
|
|
if [ -f "$SERVICE_FILE" ]; then
|
|
echo "✓ Service file found: $SERVICE_FILE"
|
|
else
|
|
echo "⚠ Service file not found in $PROJECT_DIR"
|
|
echo " Make sure ledmatrix-web.service exists and points to web_interface.py or start_web_conditionally.py"
|
|
fi
|
|
|
|
# --- Tests ---
|
|
echo ""
|
|
echo "Testing sudo/systemctl access..."
|
|
if sudo -n systemctl status ledmatrix.service > /dev/null 2>&1; then
|
|
echo "✓ systemctl status works without password"
|
|
else
|
|
echo "⚠ systemctl status failed (check service name and sudoers)"
|
|
fi
|
|
|
|
echo ""
|
|
echo "Setup complete!"
|
|
echo "You may need to log out and back in for group changes to take effect."
|
|
echo "Then restart the web service: sudo systemctl restart ledmatrix-web.service"
|