diff --git a/scripts/install-moonraker.sh b/scripts/install-moonraker.sh index ef5c11a..571398b 100755 --- a/scripts/install-moonraker.sh +++ b/scripts/install-moonraker.sh @@ -3,6 +3,7 @@ # Raspbian/Raspberry Pi OS based distributions. PYTHONDIR="${HOME}/moonraker-env" +SYSTEMDDIR="/etc/systemd/system" REBUILD_ENV="n" FORCE_DEFAULTS="n" CONFIG_PATH="${HOME}/moonraker.conf" @@ -19,7 +20,19 @@ check_klipper() } -# Step 2: Install packages +# Step 2: Clean up legacy installation +cleanup_legacy() { + if [ -f "/etc/init.d/moonraker" ]; then + # Stop Moonraker Service + echo "#### Cleanup legacy install script" + sudo systemctl stop moonraker + sudo update-rc.d -f moonraker remove + sudo rm -f /etc/init.d/moonraker + sudo rm -f /etc/default/moonraker + fi +} + +# Step 3: Install packages install_packages() { PKGLIST="python3-virtualenv python3-dev nginx libopenjp2-7 python3-libgpiod" @@ -33,7 +46,7 @@ install_packages() sudo apt-get install --yes ${PKGLIST} } -# Step 3: Create python virtual environment +# Step 4: Create python virtual environment create_virtualenv() { report_status "Installing python virtual environment..." @@ -50,39 +63,41 @@ create_virtualenv() ${PYTHONDIR}/bin/pip install -r ${SRCDIR}/scripts/moonraker-requirements.txt } -# Step 4: Install startup script +# Step 5: Install startup script install_script() { +# Create systemd service file + SERVICE_FILE="${SYSTEMDDIR}/moonraker.service" + [ -f $SERVICE_FILE ] && [ $FORCE_DEFAULTS = "n" ] && return report_status "Installing system start script..." - sudo cp "${SRCDIR}/scripts/moonraker-start.sh" /etc/init.d/moonraker - sudo update-rc.d moonraker defaults -} + sudo /bin/sh -c "cat > ${SERVICE_FILE}" << EOF +#Systemd service file for moonraker +[Unit] +Description=Starts Moonraker on startup +After=network.target -# Step 5: Install startup script config -install_config() -{ - DEFAULTS_FILE=/etc/default/moonraker - [ -f $DEFAULTS_FILE ] && [ $FORCE_DEFAULTS = "n" ] && return - - report_status "Installing system start configuration..." - sudo /bin/sh -c "cat > $DEFAULTS_FILE" <<EOF -# Configuration for /etc/init.d/moonraker - -MOONRAKER_USER=$USER - -MOONRAKER_EXEC=${PYTHONDIR}/bin/python - -MOONRAKER_ARGS="${SRCDIR}/moonraker/moonraker.py -c ${CONFIG_PATH}" +[Install] +WantedBy=multi-user.target +[Service] +Type=simple +User=$USER +RemainAfterExit=yes +ExecStart=${PYTHONDIR}/bin/python ${SRCDIR}/moonraker/moonraker.py -c ${CONFIG_PATH} +Restart=always +RestartSec=10 EOF +# Use systemctl to enable the klipper systemd service script + sudo systemctl enable moonraker.service } + # Step 6: Start server start_software() { report_status "Launching Moonraker API Server..." sudo systemctl stop klipper - sudo /etc/init.d/moonraker restart + sudo systemctl restart moonraker sudo systemctl start klipper } @@ -117,9 +132,9 @@ done # Run installation steps defined above verify_ready +cleanup_legacy check_klipper install_packages create_virtualenv install_script -install_config start_software