First version

This commit is contained in:
paukstelis
2019-09-16 19:03:37 -04:00
parent d2c75ac795
commit 350ae6b9f7
4 changed files with 311 additions and 0 deletions

116
addnew_printer.sh Executable file
View File

@@ -0,0 +1,116 @@
#!/bin/bash
if (( $EUID != 0 )); then
echo "Please run as root"
exit
fi
echo "UNPLUG PRINTER FROM USB"
echo "Enter the name for new printer/instance:"
read INSTANCE
if [ -z "$INSTANCE" ]; then
echo "No instance given. Exiting"
exit 1
fi
if test -f "/etc/default/$INSTANCE"; then
echo "Already have an entry for $INSTANCE. Exiting."
exit 1
fi
echo "Port on which this instance will run (ENTER will increment last value in /etc/octoprint_ports):"
read PORT
if [ -z "$PORT" ]; then
PORT=$(tail -1 /etc/octoprint_ports)
if [ -z "$PORT"]; then
PORT=4999
fi
PORT=$((PORT+1))
echo Selected port is: $PORT
fi
if grep -q $PORT /etc/octoprint_ports; then
echo "Port in use! Check /etc/octoprint_ports. Exiting."
exit 1
fi
#TODO
#collect user, basedir path, daemon path
echo "Octoprint Daemon User [$USER]:"
read OCTOUSER
if [ -z "$OCTOUSER" ]; then
OCTOUSER=$USER
fi
echo "Octoprint Daemon Path [/home/$USER/OctoPrint/venv/bin/octoprint]:"
read OCTOPATH
if [ -z "$OCTOPATH" ]; then
OCTOPATH="/home/$USER/OctoPrint/venv/bin/octoprint"
fi
echo "Octoprint Config Path [/home/$USER/]:"
read OCTOCONFIG
if [ -z "$OCTOCONFIG" ]; then
OCTOCONFIG="/home/$USER/"
fi
read -p "Auto-detect printer serial number for udev entry?" -n 1 -r
echo #new line
if [[ $REPLY =~ ^[Yy]$ ]]
then
echo "Plug your printer in via USB now (detection time-out in 2 min)"
counter=0
while [[ -z "$UDEV" ]] && [[ $counter -lt 60 ]]; do
UDEV=$(timeout 2s journalctl -kf | sed -n -e 's/^.*SerialNumber: //p')
counter=$(( $counter + 1 ))
done
if [ -z "$UDEV" ]; then
echo "Printer not detected, edit /etc/udev/rules.d/99-octoprint.rules when identifier is determined"
UDEV=XXXXXXXXXX
fi
echo "Serial number detected as: "$UDEV
else
echo "UDEV identifier (ENTER if unknown, edit /etc/udev/rules.d/99-octoprint.rules):"
read UDEV
if [ -z "$UDEV" ]; then
UDEV=XXXXXXXXXXXXXX
fi
fi
#octoprint_base is the generic .octoprint folder that contains all configuration, upload, etc.
echo "Octoprint instance base folder [/home/$USER/.octoprint]:"
read BFOLD
if [ -z "$BFOLD" ]; then
BFOLD="/home/$USER/.octoprint"
fi
read -p "Do you want to proceed? " -n 1 -r
echo # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]
then
cat octoprint_default | sed -e "s/OCTOUSER/$OCTOUSER" -e "s/OCTOPATH/$OCTOPATH" -e "s/OCTOCONFIG/$OCTOCONFIG" -e "s/NEWINSTANCE/$INSTANCE/" -e "s/NEWPORT/$PORT/" > /etc/default/$INSTANCE
cat octoprint_init | sed -e "s/NEWINSTANCE/$INSTANCE/" > /etc/init.d/$INSTANCE
cat octoprint_udev | sed -e "s/NEWINSTANCE/$INSTANCE/" -e "s/UDEV/$UDEV/" >> /etc/udev/rules.d/99-octoprint.rules
#Open port to be on safe side
ufw allow $PORT/tcp
#Need to make init.d file executable
chmod +x /etc/init.d/$INSTANCE
#Append our port in the port list
echo $PORT >> /etc/octoprint_ports
#copy all files to our new directory
cp -rp $BFOLD .$INSTANCE
#Do config.yaml modifications here if needed..
#sed -i "/s/PORT/$INSTANCE/" .$INSTANCE/config.yaml
#TODO - Just add an entry after additionalPorts?
cat $BFOLD/config.yaml | sed -e "s/INSTANCE/$INSTANCE/" > .$INSTANCE/config.yaml
udevadm control --reload-rules
udevadm trigger
systemctl daemon-reload
sleep 5
systemctl start $INSTANCE
systemctl enable $INSTANCE
fi

29
octoprint_default Normal file
View File

@@ -0,0 +1,29 @@
# Configuration for /etc/init.d/NEWINSTANCE
# The init.d script will only run if this variable non-empty.
OCTOPRINT_USER=OCTOUSER
# base directory to use
BASEDIR=OCTOCONFIG/.NEWINSTANCE
# configuration file to use
CONFIGFILE=OCTOCONFIG/.NEWINSTANCE/config.yaml
# On what port to run daemon, default is 5000
PORT=NEWPORT
# Path to the OctoPrint executable, you need to set this to match your installation!
DAEMON=OCTOPATH
# What arguments to pass to octoprint, usually no need to touch this
DAEMON_ARGS="--port=$PORT"
# Umask of files octoprint generates, Change this to 000 if running octoprint as its own, separate user
UMASK=022
# Process priority, 0 here will result in a priority 20 process.
# -2 ensures Octoprint has a slight priority over user processes.
NICELEVEL=-2
# Should we run at startup?
START=yes

165
octoprint_init Normal file
View File

@@ -0,0 +1,165 @@
#!/bin/sh
### BEGIN INIT INFO
# Provides: octoprint
# Required-Start: $local_fs networking
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: OctoPrint daemon
# Description: Starts the OctoPrint daemon with the user specified in
# /etc/default/octoprint.
### END INIT INFO
# Author: Sami Olmari & Gina Häußge
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="OctoPrint Daemon NEWINSTANCE"
NAME="NEWINSTANCE"
PKGNAME=NEWINSTANCE
PIDFILE=/var/run/$PKGNAME.pid
SCRIPTNAME=/etc/init.d/$PKGNAME
DEFAULTS=/etc/default/$PKGNAME
# Read configuration variable file if it is present
[ -r $DEFAULTS ] && . $DEFAULTS
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
log_daemon_msg() { logger "$@"; }
log_end_msg() { [ $1 -eq 0 ] && RES=OK; logger ${RES:=FAIL}; }
# Exit if the DAEMON is not set
if [ -z "$DAEMON" ]
then
log_warning_msg "Not starting $PKGNAME, DAEMON not set in /etc/default/$PKGNAME."
exit 0
fi
# Exit if the DAEMON is not installed
[ -x "$DAEMON" ] || exit 0
# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS
if [ -z "$START" -o "$START" != "yes" ]
then
log_warning_msg "Not starting $PKGNAME, edit /etc/default/$PKGNAME to start it."
exit 0
fi
if [ -z "$OCTOPRINT_USER" ]
then
log_warning_msg "Not starting $PKGNAME, OCTOPRINT_USER not set in /etc/default/$PKGNAME."
exit 0
fi
COMMAND_ARGS=
if [ -n "$BASEDIR" ]
then
COMMAND_ARGS="--basedir $BASEDIR $COMMAND_ARGS"
fi
if [ -n "$CONFIGFILE" ]
then
COMMAND_ARGS="--config $CONFIGFILE $COMMAND_ARGS"
fi
#
# Function to verify if a pid is alive
#
is_alive()
{
pid=`cat $1` > /dev/null 2>&1
kill -0 $pid > /dev/null 2>&1
return $?
}
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
is_alive $PIDFILE
RETVAL="$?"
if [ $RETVAL != 0 ]; then
start-stop-daemon --start --background --quiet --pidfile $PIDFILE --make-pidfile \
--exec $DAEMON --chuid $OCTOPRINT_USER --user $OCTOPRINT_USER --umask $UMASK --nicelevel=$NICELEVEL \
-- serve $COMMAND_ARGS $DAEMON_ARGS
RETVAL="$?"
fi
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $OCTOPRINT_USER --pidfile $PIDFILE
RETVAL="$?"
[ "$RETVAL" = "2" ] && return 2
rm -f $PIDFILE
[ "$RETVAL" = "0" ] && return 0 || return 1
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
;;
restart)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
exit 3
;;
esac

1
octoprint_udev Normal file
View File

@@ -0,0 +1 @@
SUBSYSTEM=="tty", ATTRS{serial}=="UDEV", SYMLINK+="NEWINSTANCE"