diff --git a/README.md b/README.md index 6cd0c80..df268d6 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,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. diff --git a/octoprint_deploy.sh b/octoprint_deploy.sh index d35e010..dc64025 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 @@ -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=''