diff --git a/README.md b/README.md index 39855fb..2b56818 100644 --- a/README.md +++ b/README.md @@ -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,7 +19,7 @@ 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/ * 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 @@ -31,3 +31,6 @@ YouTube video for OctoPi setup here: https://www.youtube.com/watch?v=J5VzI4AFav4 * 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. diff --git a/octoprint_deploy.sh b/octoprint_deploy.sh index bd72f51..0e73ad0 100755 --- a/octoprint_deploy.sh +++ b/octoprint_deploy.sh @@ -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 @@ -349,6 +352,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 @@ -446,6 +450,7 @@ usb_testing() { fi if [ -n "$UDEV" ]; then echo "Serial Number detected: $UDEV" | log + check_sn "$UDEV" fi done main_menu @@ -487,6 +492,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 generic another linux distribution, select it from the list." + echo "Unless you really know what you are doing, select N." + 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 @@ -496,7 +513,6 @@ prepare () { usermod -a -G dialout,video $user - if [ $INSTALL -eq 1 ]; then echo 'Disabling unneeded services....' systemctl disable octoprint.service @@ -512,7 +528,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" @@ -538,7 +556,7 @@ prepare () { if [ $INSTALL -eq 5 ]; then dnf -y install python3-devel cmake libjpeg-turbo-devel fi - + echo "Installing OctoPrint in /home/$user/OctoPrint" #make venv sudo -u $user python3 -m venv /home/$user/OctoPrint @@ -557,7 +575,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 @@ -567,12 +585,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 @@ -582,6 +600,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=''