Files
octodocker_deploy/addnew_printer.sh
Paul Paukstelis 40e1e10dad rotate journalctl
2019-09-16 21:54:23 -04:00

128 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
if (( $EUID != 0 )); then
echo "Please run as root"
exit
fi
if [ $SUDO_USER ]; then user=$SUDO_USER; 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 [ -f /etc/octoprint_ports ]; then
if grep -q $PORT /etc/octoprint_ports; then
echo "Port in use! Check /etc/octoprint_ports. Exiting."
exit 1
fi
fi
#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
#clear out journalctl - probably a better way to do this
journalctl --rotate > /dev/null 2>&1
journalctl --vacuum-time=1seconds > /dev/null 2>&1
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/octo_$INSTANCE/" -e "s/UDEV/$UDEV/" >> /etc/udev/rules.d/99-octoprint.rules
#clear out journalctl - probably a better way to do this
#journalctl --rotate > /dev/null 2>&1
#journalctl --vacuum-time=1seconds > /dev/null 2>&1
#just to be on the safe side, add user to dialout
usermod -a G dialout $OCTOUSER
#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 $OCTOCONFIG/.$INSTANCE
#Do config.yaml modifications here if needed..
#sed -i "/s/PORT/$INSTANCE/" .$INSTANCE/config.yaml
cat $BFOLD/config.yaml | sed -e "s/INSTANCE/$INSTANCE/" > $OCTOCONFIG/.$INSTANCE/config.yaml
udevadm control --reload-rules
udevadm trigger
systemctl daemon-reload
sleep 5
systemctl start $INSTANCE
systemctl enable $INSTANCE
fi