First version
This commit is contained in:
116
addnew_printer.sh
Executable file
116
addnew_printer.sh
Executable 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
29
octoprint_default
Normal 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
165
octoprint_init
Normal 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
1
octoprint_udev
Normal file
@@ -0,0 +1 @@
|
||||
SUBSYSTEM=="tty", ATTRS{serial}=="UDEV", SYMLINK+="NEWINSTANCE"
|
||||
Reference in New Issue
Block a user