Move to native backup system (#145)

* begin using native OP backup

* path fix

* restore menu

* don't send whole path

* use CAMERA_ARR for instance_status

* read arrays only if files exist

* ready for PR
This commit is contained in:
paukstelis
2024-01-19 11:49:14 -05:00
committed by GitHub
parent 29b215197b
commit 7fbceef173
5 changed files with 48 additions and 24 deletions

View File

@@ -1,10 +1,11 @@
Updated January 15, 2024. Updated January 19, 2024.
Want to support this work? Buy Me a Coffee. https://www.buymeacoffee.com/ppaukstelis. Want to support this work? Buy Me a Coffee. https://www.buymeacoffee.com/ppaukstelis.
Need help with octoprint_deploy? Ask on Discord: https://discord.gg/6vgSjgvR6u Need help with octoprint_deploy? Ask on Discord: https://discord.gg/6vgSjgvR6u
# octoprint_deploy 1.0.6
# octoprint_deploy 1.0.7
* These files provide a bash script for quickly deploying multiple octoprint instances on a single computer. For Linux systems (Ubuntu, Fedora, etc.) it will also install OctoPrint and a video streamer (ustreamer). No need for lots of file editing or complicated Docker compose scripts! A background video on how it generally works from my ERRF2022 talk can be found here: https://www.youtube.com/watch?v=q0iCNl8-kJI&t=15378s * These files provide a bash script for quickly deploying multiple octoprint instances on a single computer. For Linux systems (Ubuntu, Fedora, etc.) it will also install OctoPrint and a video streamer (ustreamer). No need for lots of file editing or complicated Docker compose scripts! A background video on how it generally works from my ERRF2022 talk can be found here: https://www.youtube.com/watch?v=q0iCNl8-kJI&t=15378s
* octoprint_deploy and octoprint_install are being merged! Maintaining two separate scripts was close to twice the amount of work. By merging the scripts many new features have been included, while also providing greater simplicity in setup. * octoprint_deploy and octoprint_install are being merged! Maintaining two separate scripts was close to twice the amount of work. By merging the scripts many new features have been included, while also providing greater simplicity in setup.
@@ -62,6 +63,9 @@ Need help with octoprint_deploy? Ask on Discord: https://discord.gg/6vgSjgvR6u
* Restart all instances from the command line: `sudo octoprint_deploy/octoprint_deploy.sh restart_all` * Restart all instances from the command line: `sudo octoprint_deploy/octoprint_deploy.sh restart_all`
* You can inject any function at start using the command line with the first argument `f` and the second argument the function name. * You can inject any function at start using the command line with the first argument `f` and the second argument the function name.
# Recent Changes # Recent Changes
* Improve Instance Status function.
* Remove octoprint_deploy backup technique and move entirely to native OctoPrint backups. Backups made in this way are moved to /home/$USER/instance_backup to make them easier to sort.
* Camera settings written to separate env file. This can be found and edited at `/etc/cam_instancename.env`. * Camera settings written to separate env file. This can be found and edited at `/etc/cam_instancename.env`.
* Fixes for shared uploads function. * Fixes for shared uploads function.
* Command-line function injection. Will be useful in some cases. * Command-line function injection. Will be useful in some cases.

View File

@@ -141,7 +141,7 @@ new_instance() {
#USB cameras #USB cameras
if [ "$firstrun" != "true" ]; then if [ "$firstrun" != "true" ]; then
if prompt_confirm "Would you like to auto detect an associated USB camera (experimental)?"; then if prompt_confirm "Would you like to auto detect an associated USB camera?"; then
add_camera add_camera
fi fi
fi fi

29
menu.sh
View File

@@ -8,7 +8,8 @@ cyan=$(echo -en "\e[96m")
yellow=$(echo -en "\e[93m") yellow=$(echo -en "\e[93m")
main_menu() { main_menu() {
VERSION=1.0.6
VERSION=1.0.7
#reset #reset
UDEV='' UDEV=''
TEMPUSB='' TEMPUSB=''
@@ -240,18 +241,30 @@ create_menu() {
restore_menu() { restore_menu() {
echo echo
echo echo "${magenta}You must have already created an instance in order to restore it.${white}"
PS3="${green}Select backup to restore: ${white}" PS3="${green}Select instance to restore: ${white}"
readarray -t options < <(ls /home/$user/*.tar.gz) get_instances true
options+=("Quit") select opt in "${INSTANCE_ARR[@]}"
select opt in "${options[@]}"
do do
if [ "$opt" == Quit ] || [ "$opt" == generic ]; then if [ "$opt" == Quit ]; then
main_menu
fi
echo "Selected instance to restore: $opt"
clear
PS3="${green}Select backup to restore: ${white}"
readarray -t options < <(ls /home/$user/instance_backup/$opt-backup-*.zip)
options+=("Quit")
select zipfile in "${options[@]}"
do
if [ "$zipfile" == Quit ]; then
main_menu main_menu
fi fi
echo "Selected $opt to restore" echo "Selected $opt to restore"
tar --same-owner -pxvf $opt restore $opt $zipfile
main_menu main_menu
done done
done
} }

View File

@@ -22,7 +22,7 @@ detect_installs() {
echo "This will make sure the correct printer is associated with each OctoPrint instance." echo "This will make sure the correct printer is associated with each OctoPrint instance."
echo "This can also be done in the Utility menu at a later time." echo "This can also be done in the Utility menu at a later time."
get_settings get_settings
if prompt_confirm "${green}Would you like to generate a udev rule now?{$white}"; then if prompt_confirm "${green}Would you like to generate a udev rule now?${white}"; then
echo "Unplug your printer from the USB connection now." echo "Unplug your printer from the USB connection now."
if prompt_confirm "${green}Ready to begin printer auto-detection?${white}"; then if prompt_confirm "${green}Ready to begin printer auto-detection?${white}"; then
detect_printer detect_printer

21
util.sh
View File

@@ -60,9 +60,10 @@ octo_deploy_update() {
back_up() { back_up() {
INSTANCE=$1 INSTANCE=$1
echo "Creating backup of $INSTANCE...." echo "Creating backup of $INSTANCE...."
d=$(date '+%Y-%m-%d') sudo -p $user $OCTOEXEC --basedir /home/$user/.$INSTANCE plugins backup:backup --exclude timelapse
sudo -p $user tar -czf ${INSTANCE}_${d}_backup.tar.gz -C /home/$user/ .${INSTANCE} sudo -p $user mkdir /home/$user/instance_backup 2>/dev/null
echo "Tarred and gzipped backup created in /home/$user" mv /home/$user/.$INSTANCE/data/backup/*.zip /home/$user/instance_backup/
echo "Zipped instance backup created in /home/$user/instance_backup"
} }
restore() { restore() {
@@ -70,7 +71,7 @@ restore() {
TAR=$2 TAR=$2
echo "Restoring backup of $INSTANCE...." echo "Restoring backup of $INSTANCE...."
systemctl stop $INSTANCE systemctl stop $INSTANCE
sudo -p $user tar -xvf $TAR sudo -p $user $OCTOEXEC --basedir /home/$user/.$INSTANCE plugins backup:restore $TAR
systemctl start $INSTANCE systemctl start $INSTANCE
} }
@@ -78,7 +79,7 @@ restore() {
back_up_all() { back_up_all() {
get_settings get_settings
get_instances false get_instances false
for instance in "${instances[@]}"; do for instance in "${INSTANCE_ARR[@]}"; do
echo $instance echo $instance
back_up $instance back_up $instance
done done
@@ -87,18 +88,22 @@ back_up_all() {
get_instances() { get_instances() {
addquit=$1 addquit=$1
if [ -f /etc/octoprint_instances ]; then
readarray -t INSTANCE_ARR < <(cat /etc/octoprint_instances | sed -n -e 's/^instance:\([[:graph:]]*\) .*/\1/p') readarray -t INSTANCE_ARR < <(cat /etc/octoprint_instances | sed -n -e 's/^instance:\([[:graph:]]*\) .*/\1/p')
if [ "$addquit" == true ]; then if [ "$addquit" == true ]; then
INSTANCE_ARR+=("Quit") INSTANCE_ARR+=("Quit")
fi fi
fi
} }
get_cameras() { get_cameras() {
addquit=$1 addquit=$1
if [ -f /etc/octoprint_cameras ]; then
readarray -t CAMERA_ARR < <(cat /etc/octoprint_cameras | sed -n -e 's/^camera:\([[:graph:]]*\) .*/\1/p') readarray -t CAMERA_ARR < <(cat /etc/octoprint_cameras | sed -n -e 's/^camera:\([[:graph:]]*\) .*/\1/p')
if [ "$addquit" == true ]; then if [ "$addquit" == true ]; then
CAMERA_ARR+=("Quit") CAMERA_ARR+=("Quit")
fi fi
fi
} }
sync_users() { sync_users() {
@@ -271,9 +276,11 @@ instance_status() {
echo echo
echo "${cyan}*******************************************${white}" echo "${cyan}*******************************************${white}"
get_instances false get_instances false
readarray -t cameras < <(ls -1 /etc/systemd/system/cam*.service 2> /dev/null | sed -n -e 's/^.*\/\(.*\).service/\1/p') get_cameras false
#change this to reading /etc/octoprint_cameras
#readarray -t cameras < <(ls -1 /etc/systemd/system/cam*.service 2> /dev/null | sed -n -e 's/^.*\/\(.*\).service/\1/p')
#combine instances and cameras #combine instances and cameras
INSTANCE_ARR+=(${cameras[@]}) INSTANCE_ARR+=(${CAMERA_ARR[@]})
echo "Service - Status:" echo "Service - Status:"
echo "------------------" echo "------------------"
for instance in "${INSTANCE_ARR[@]}"; do for instance in "${INSTANCE_ARR[@]}"; do