| 
									
										
										
										
											2019-12-19 04:11:40 +11:00
										 |  |  | #!/bin/bash
 | 
					
						
							|  |  |  | # This script installs Klipper on an debian | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PYTHONDIR="${HOME}/klippy-env" | 
					
						
							|  |  |  | SYSTEMDDIR="/etc/systemd/system" | 
					
						
							|  |  |  | KLIPPER_USER=$USER | 
					
						
							|  |  |  | KLIPPER_GROUP=$KLIPPER_USER | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Step 1: Install system packages | 
					
						
							|  |  |  | install_packages() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     # Packages for python cffi | 
					
						
							| 
									
										
										
										
											2021-01-24 11:32:09 -05:00
										 |  |  |     PKGLIST="virtualenv python-dev libffi-dev build-essential" | 
					
						
							| 
									
										
										
										
											2019-12-19 04:11:40 +11:00
										 |  |  |     # kconfig requirements | 
					
						
							|  |  |  |     PKGLIST="${PKGLIST} libncurses-dev" | 
					
						
							|  |  |  |     # hub-ctrl | 
					
						
							|  |  |  |     PKGLIST="${PKGLIST} libusb-dev" | 
					
						
							|  |  |  |     # AVR chip installation and building | 
					
						
							|  |  |  |     PKGLIST="${PKGLIST} avrdude gcc-avr binutils-avr avr-libc" | 
					
						
							|  |  |  |     # ARM chip installation and building | 
					
						
							|  |  |  |     PKGLIST="${PKGLIST} stm32flash libnewlib-arm-none-eabi" | 
					
						
							| 
									
										
										
										
											2022-08-24 19:30:33 +02:00
										 |  |  |     PKGLIST="${PKGLIST} gcc-arm-none-eabi binutils-arm-none-eabi libusb-1.0 pkg-config" | 
					
						
							| 
									
										
										
										
											2019-12-19 04:11:40 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Update system package info | 
					
						
							|  |  |  |     report_status "Running apt-get update..." | 
					
						
							|  |  |  |     sudo apt-get update | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Install desired packages | 
					
						
							|  |  |  |     report_status "Installing packages..." | 
					
						
							|  |  |  |     sudo apt-get install --yes ${PKGLIST} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Step 2: Create python virtual environment | 
					
						
							|  |  |  | create_virtualenv() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     report_status "Updating python virtual environment..." | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Create virtualenv if it doesn't already exist | 
					
						
							| 
									
										
										
										
											2020-09-03 13:19:55 -04:00
										 |  |  |     [ ! -d ${PYTHONDIR} ] && virtualenv -p python2 ${PYTHONDIR} | 
					
						
							| 
									
										
										
										
											2019-12-19 04:11:40 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Install/update dependencies | 
					
						
							|  |  |  |     ${PYTHONDIR}/bin/pip install -r ${SRCDIR}/scripts/klippy-requirements.txt | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Step 3: Install startup script | 
					
						
							|  |  |  | install_script() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | # Create systemd service file | 
					
						
							|  |  |  |     KLIPPER_LOG=/tmp/klippy.log | 
					
						
							|  |  |  |     report_status "Installing system start script..." | 
					
						
							|  |  |  |     sudo /bin/sh -c "cat > $SYSTEMDDIR/klipper.service" << EOF | 
					
						
							|  |  |  | #Systemd service file for klipper | 
					
						
							|  |  |  | [Unit] | 
					
						
							|  |  |  | Description=Starts klipper on startup | 
					
						
							|  |  |  | After=network.target | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [Install] | 
					
						
							|  |  |  | WantedBy=multi-user.target | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [Service] | 
					
						
							|  |  |  | Type=simple | 
					
						
							|  |  |  | User=$KLIPPER_USER | 
					
						
							|  |  |  | RemainAfterExit=yes | 
					
						
							|  |  |  | ExecStart=${PYTHONDIR}/bin/python ${SRCDIR}/klippy/klippy.py ${HOME}/printer.cfg -l ${KLIPPER_LOG} | 
					
						
							|  |  |  | Restart=always | 
					
						
							|  |  |  | RestartSec=10 | 
					
						
							|  |  |  | EOF | 
					
						
							|  |  |  | # Use systemctl to enable the klipper systemd service script | 
					
						
							|  |  |  |     sudo systemctl enable klipper.service | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Step 4: Start host software | 
					
						
							|  |  |  | start_software() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     report_status "Launching Klipper host software..." | 
					
						
							|  |  |  |     sudo systemctl start klipper | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Helper functions | 
					
						
							|  |  |  | report_status() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     echo -e "\n\n###### $1" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | verify_ready() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if [ "$EUID" -eq 0 ]; then | 
					
						
							|  |  |  |         echo "This script must not run as root" | 
					
						
							|  |  |  |         exit -1 | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Force script to exit if an error occurs | 
					
						
							|  |  |  | set -e | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Find SRCDIR from the pathname of this script | 
					
						
							|  |  |  | SRCDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/.. && pwd )" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Run installation steps defined above | 
					
						
							|  |  |  | verify_ready | 
					
						
							|  |  |  | install_packages | 
					
						
							|  |  |  | create_virtualenv | 
					
						
							|  |  |  | install_script | 
					
						
							|  |  |  | start_software |