Merge branch 'check_sn'

This commit is contained in:
paukstelis
2022-04-19 17:03:00 -04:00
2 changed files with 52 additions and 18 deletions

View File

@@ -1,4 +1,4 @@
Updated February 2022.
Updated April 2022.
Want to support this work? Buy Me a Coffee. https://www.buymeacoffee.com/ppaukstelis
# octoprint_deploy
These files provide a simple bash script for quickly deploying multiple octoprint instances on a single computer.
@@ -19,15 +19,17 @@ YouTube video for OctoPi setup here: https://www.youtube.com/watch?v=J5VzI4AFav4
* haproxy entries are updated so you can connect via http://octopi.local/instancename/ (trailing slash is needed)
* Ubuntu/Mint/Fedora (Fedora not completely tested)
* Install Ubuntu 20-21.X, Mint 20.3+, or Fedora35+ on your system (make sure your user is admin for sudo)
* Install git if it isn't already: `sudo apt install git`
* Install git if it isn't already: `sudo apt install git` or `sudo dnf install git`
* run the command `git clone https://github.com/paukstelis/octoprint_deploy.git`
* run the command `sudo octoprint_deploy/octoprint_deploy.sh`
* Choose `Prepare System` from the menu. This will install necessary packages, install octoprint, and start an instance
* This converts your installation into an 'OctoBuntu'-style installation.
* Choose `Prepare System` from the menu. Select your distribution type. This will install necessary packages, install octoprint, and start a template instance
* This converts your installation into an 'OctoBuntu'-style installation. Use `OctoBuntu` for all identifiers after this point.
* Setup admin user by connecting to your system (either http://localhost:5000 or http://[hostname]:5000 via browser
* Continue with octoprint_deploy script and setup all your instances.
* You may have to logout/reboot before connecting to printers or cameras as dialout and video permissions are established during setup.
* What else can you do?
* Remove instances
* Add USB webcams AFTER you've created the instance
* Test USB connections
# Recent Changes
* Add duplicate serial number detection.
* Add architecture check to minimize errors where a system gets prepared as OctoPi when someone is using Ubuntu/Fedora/etc.

View File

@@ -6,7 +6,10 @@ if (( $EUID != 0 )); then
exit
fi
#Get abbreviated architecture
ARCH=$(arch)
ARCH=${ARCH:0:3}
#echo $ARCH
# from stackoverflow.com/questions/3231804
prompt_confirm() {
while true; do
@@ -37,7 +40,7 @@ new_instance () {
BUDEFAULT="/home/$user/OctoPrint/bin/octoprint"
OTHERDEFAULT=""
PS3='Installation type: '
options=("OctoPi" "OctoBuntu" "Other" "Quit")
options=("OctoPi" "Linux/OctoBuntu" "Other" "Quit")
select opt in "${options[@]}"
do
case $opt in
@@ -46,7 +49,7 @@ new_instance () {
INSTALL=1
break
;;
"OctoBuntu")
"Linux/OctoBuntu")
DAEMONPATH=$BUDEFAULT
INSTALL=2
break
@@ -178,6 +181,8 @@ new_instance () {
echo
else
echo -e "Serial number detected as: \033[0;34m $UDEV\033[0m" | log
check_sn "$UDEV"
echo
fi
echo
@@ -349,6 +354,7 @@ add_camera() {
USBCAM=$TEMPUSBCAM
else
echo -e "Camera detected with serial number: \033[0;34m $CAM \033[0m" | log
check_sn "$CAM"
fi
echo "Camera Port (ENTER will increment last value in /etc/camera_ports):"
read CAMPORT
@@ -362,7 +368,7 @@ add_camera() {
CAMPORT=$((CAMPORT+1))
echo Selected port is: $CAMPORT | log
fi
echo "Settings can be modified after initial setup in /etc/systemd/system/octocam_$INSTANCE"
echo "Settings can be modified after initial setup in /etc/systemd/system/cam_$INSTANCE"
echo
echo "Camera Resolution (no sanity check, so get it right) [default: 640x480]:"
read RESOLUTION
@@ -442,10 +448,11 @@ usb_testing() {
TEMPUSB=$(timeout 1s journalctl -kf | sed -n -e 's/^.*\(cdc_acm\|ftdi_sio\|ch341\) \([0-9].*[0-9]\): \(tty.*\|FTD.*\|ch341-uart.*\).*/\2/p')
counter=$(( $counter + 1 ))
if [ -n "$TEMPUSB" ]; then
echo 'Detected devince at $TEMPUSB' | log
echo "Detected device at $TEMPUSB" | log
fi
if [ -n "$UDEV" ]; then
echo "Serial Number detected: $UDEV" | log
check_sn "$UDEV"
fi
done
main_menu
@@ -491,6 +498,18 @@ prepare () {
*) echo "invalid option $REPLY";;
esac
done
if [ $INSTALL -eq 1 ] && [[ "$ARCH" != arm ]]; then
echo "WARNING! You have selected OctoPi, but are not using an ARM processor."
echo "If you are using another linux distribution, select it from the list."
echo "Unless you really know what you are doing, select N now."
if prompt_confirm "Continue with OctoPi? (Y/N)"; then
echo "OK!"
else
main_menu
fi
fi
if prompt_confirm "Ready to begin?"
then
echo 'instance:generic port:5000' > /etc/octoprint_instances
@@ -500,7 +519,6 @@ prepare () {
usermod -a -G dialout,video $user
if [ $INSTALL -eq 1 ]; then
echo 'Disabling unneeded services....'
systemctl disable octoprint.service
@@ -516,7 +534,9 @@ prepare () {
echo 'Modifying config.yaml'
cp -p $SCRIPTDIR/config.basic /home/pi/.octoprint/config.yaml
echo 'Connect to your octoprint instance and setup admin user'
fi
if [ $INSTALL -gt 1 ]; then
echo "Creating OctoBuntu installation equivalent."
echo "Adding systemctl and reboot to sudo"
@@ -548,6 +568,7 @@ prepare () {
apt-get -y install make v4l-utils virtualenv python-is-python3 cmake libjpeg62-turbo-dev gcc g++ python3-dev build-essential python3-setuptools libyaml-dev python3-pip python3-venv
fi
echo "Installing OctoPrint in /home/$user/OctoPrint"
#make venv
sudo -u $user python3 -m venv /home/$user/OctoPrint
@@ -566,7 +587,7 @@ prepare () {
echo 'Updating config.yaml'
sudo -u $user mkdir /home/$user/.octoprint
sudo -u $user cp -p $SCRIPTDIR/config.basic /home/$user/.octoprint/config.yaml
#install mjpg-streamer, not doing any error checking or anything
echo 'Installing mjpeg-streamer'
sudo -u $user git clone https://github.com/jacksonliam/mjpg-streamer.git mjpeg
@@ -576,12 +597,12 @@ prepare () {
sudo -u $user rm -rf mjpeg
#Fedora has SELinux on by default so must make adjustments? Don't really know what these do...
if [ $INSTALL -eq 5 ]; then
semanage fcontext -a -t bin_t "/home/$user/OctoPrint/bin/.*"
chcon -Rv -u system_u -t bin_t "/home/$user/OctoPrint/bin/"
restorecon -R -v /home/$user/OctoPrint/bin
semanage fcontext -a -t bin_t "/home/$user/mjpg-streamer/.*"
chcon -Rv -u system_u -t bin_t "/home/$user/mjpg-streamer/"
restorecon -R -v /home/$user/mjpg-streamer
semanage fcontext -a -t bin_t "/home/$user/OctoPrint/bin/.*"
chcon -Rv -u system_u -t bin_t "/home/$user/OctoPrint/bin/"
restorecon -R -v /home/$user/OctoPrint/bin
semanage fcontext -a -t bin_t "/home/$user/mjpg-streamer/.*"
chcon -Rv -u system_u -t bin_t "/home/$user/mjpg-streamer/"
restorecon -R -v /home/$user/mjpg-streamer
fi
echo 'Starting generic service on port 5000'
systemctl start octoprint_default.service
@@ -591,6 +612,17 @@ prepare () {
fi
main_menu
}
check_sn() {
if [ -f "/etc/udev/rules.d/99-octoprint.rules" ]; then
if grep -q $1 /etc/udev/rules.d/99-octoprint.rules; then
echo "An identical serial number has been detected in the udev rules. Please be warned, this will likely cause instability!" | log
else
echo "No duplicate serial number detected" | log
fi
fi
}
main_menu() {
#reset
UDEV=''