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:
@@ -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.
|
||||||
|
|||||||
@@ -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
29
menu.sh
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
21
util.sh
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user