191 lines
5.7 KiB
Bash
191 lines
5.7 KiB
Bash
#!/bin/sh
|
|
|
|
setup(){
|
|
if [ -z "$1" ] || [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
|
|
echo "Usage: restore filename"
|
|
echo ""
|
|
echo " e.g. ./restore myBackup.zip << Restores config from myBackup.zip"
|
|
echo ""
|
|
echo "Use this script to restore an openHAB configuration that was previously made with"
|
|
echo "the openHAB 'backup' script."
|
|
echo ""
|
|
exit 0
|
|
fi
|
|
|
|
## Ask to run as root to prevent us from running sudo in this script.
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo "Please run this script as root! (e.g. use sudo)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
command -v unzip >/dev/null 2>&1 || {
|
|
echo "'unzip' program was not found, please install it first." >&2
|
|
exit 1
|
|
}
|
|
|
|
## Check to see if processes are running before restoring
|
|
if [ ! -z "$(pgrep -f "openhab2.*java")" ]; then
|
|
echo "openHAB is running! Please stop the process before restoring." >&2
|
|
exit 1
|
|
fi
|
|
|
|
WorkingDir="$(cd "$(dirname "$0")" && cd ../.. && pwd -P)"
|
|
|
|
## Set path variables
|
|
if [ -r /etc/profile.d/openhab2.sh ]; then
|
|
. /etc/profile.d/openhab2.sh
|
|
elif [ -r /etc/default/openhab2 ]; then
|
|
. /etc/default/openhab2
|
|
fi
|
|
if [ -z "$OPENHAB_CONF" ]; then OPENHAB_CONF="$WorkingDir/conf"; fi
|
|
if [ -z "$OPENHAB_USERDATA" ]; then OPENHAB_USERDATA="$WorkingDir/userdata"; fi
|
|
|
|
echo "Using '$OPENHAB_CONF' as conf folder..."
|
|
echo "Using '$OPENHAB_USERDATA' as userdata folder..."
|
|
|
|
## Check two of the standard openHAB folders to make sure we're updating the right thing.
|
|
if [ ! -d "$OPENHAB_USERDATA" ] || [ ! -d "$OPENHAB_CONF" ]; then
|
|
echo "Configuration paths are invalid..." >&2
|
|
echo "Try setting OPENHAB_USERDATA and OPENHAB_CONF environment variables." >&2
|
|
exit 1
|
|
fi
|
|
|
|
currentUser=$(ls -ld "$OPENHAB_USERDATA" | awk '{print $3}')
|
|
currentGroup=$(ls -ld "$OPENHAB_USERDATA" | awk '{print $4}')
|
|
|
|
CurrentVersion="$(awk '/openhab-distro/{print $3}' "$OPENHAB_USERDATA/etc/version.properties")"
|
|
|
|
## Store anything in temporary folders
|
|
TempDir="/tmp/openhab2/restore"
|
|
## Clear older stuff if it exists
|
|
rm -rf "${TempDir:?}"
|
|
echo "Making Temporary Directory"
|
|
mkdir -p "$TempDir" || {
|
|
echo "Failed to make temporary directory: $TempDir" >&2
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
echo " "
|
|
echo "##########################################"
|
|
echo " openHAB 2.x.x restore script "
|
|
echo "##########################################"
|
|
echo " "
|
|
|
|
InputFile="$1"
|
|
|
|
setup "$InputFile"
|
|
|
|
## Extract zip file
|
|
echo "Extracting zip file to temporary folder."
|
|
|
|
unzip -oq "$InputFile" -d "$TempDir" || {
|
|
echo "Unable to unzip $InputFile, Aborting..." >&2
|
|
exit 1
|
|
}
|
|
|
|
## Check for backup properties list.
|
|
if [ ! -f "$TempDir/backup.properties" ]; then
|
|
echo "Backup was not created by openHAB scripts, please resort to a manual restore..." >&2
|
|
exit 1
|
|
fi
|
|
|
|
## Grab information with backup.properties
|
|
str="$(awk '/version=/{print $1}' "$TempDir/backup.properties")"
|
|
BackupVersion=${str#*=}
|
|
str="$(awk '/timestamp=/{print $1}' "$TempDir/backup.properties")"
|
|
BackupTime=${str#*=}
|
|
str="$(awk '/user=/{print $1}' "$TempDir/backup.properties")"
|
|
OHUser=${str#*=}
|
|
str="$(awk '/group=/{print $1}' "$TempDir/backup.properties")"
|
|
OHGroup=${str#*=}
|
|
|
|
## Feeback to user
|
|
echo ""
|
|
echo " Backup Information:"
|
|
echo " -------------------"
|
|
echo " Backup Version | $BackupVersion (You are on $CurrentVersion)"
|
|
echo " Backup Timestamp | $BackupTime"
|
|
echo " Config belongs to user | $OHUser"
|
|
echo " from group | $OHGroup"
|
|
echo ""
|
|
echo "Your current configuration will become owned by $currentUser:$currentGroup."
|
|
echo ""
|
|
echo "Any existing files with the same name will be replaced."
|
|
echo "Any file without a replacement will be deleted."
|
|
echo ""
|
|
printf "Okay to Continue? [y/N]: "
|
|
read -r answer
|
|
case "$answer" in
|
|
[Yy]*)
|
|
;;
|
|
*)
|
|
echo "Cancelling restore..."
|
|
rm -rf /tmp/openhab2
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
## Move old configuration
|
|
rm -rf /tmp/openhab/old
|
|
mkdir -p /tmp/openhab/old
|
|
echo "Moving system files in userdata to temporary folder"
|
|
if [ -d "$OPENHAB_USERDATA/backups" ]; then
|
|
mv "$OPENHAB_USERDATA/backups" /tmp/openhab/old || {
|
|
echo "Could not move backup folder to temporary folder..." >&2
|
|
exit 1
|
|
}
|
|
fi
|
|
if [ -d "${OPENHAB_USERDATA:?}/etc" ]; then
|
|
mv "${OPENHAB_USERDATA:?}/etc" /tmp/openhab/old || {
|
|
echo "Could not move etc folder to temporary folder" >&2
|
|
exit 1
|
|
}
|
|
fi
|
|
|
|
echo "Deleting old userdata folder..."
|
|
rm -rf "${OPENHAB_USERDATA:?}/"*
|
|
|
|
echo "Restoring system files in userdata..."
|
|
if [ -d /tmp/openhab/old/backups ]; then
|
|
mv /tmp/openhab/old/backups "${OPENHAB_USERDATA:?}/" || {
|
|
echo "Unable to move other backup files back..."
|
|
exit 1
|
|
}
|
|
fi
|
|
if [ -d /tmp/openhab/old/etc ]; then
|
|
mv /tmp/openhab/old/etc "${OPENHAB_USERDATA:?}/" || {
|
|
echo "Unable to move system files back..."
|
|
exit 1
|
|
}
|
|
fi
|
|
|
|
echo "Deleting old conf folder..."
|
|
rm -rf "${OPENHAB_CONF:?}/"*
|
|
|
|
## Restore configuration
|
|
echo "Restoring openHAB with backup configuration..."
|
|
command cp -af "$TempDir/conf/"* "${OPENHAB_CONF:?}/" || {
|
|
echo "Failed to copy $TempDir/conf/ to $OPENHAB_CONF/..." >&2
|
|
echo "Please check $TempDir and replace conf and userdata." >&2
|
|
exit 1
|
|
}
|
|
command cp -af "$TempDir/userdata/"* "${OPENHAB_USERDATA:?}/" || {
|
|
echo "Failed to copy $TempDir/userdata/ to $OPENHAB_USERDATA/..." >&2
|
|
echo "Please check $TempDir and replace userdata." >&2
|
|
exit 1
|
|
}
|
|
|
|
## Reset ownership
|
|
chown -R "$currentUser:$currentGroup" "$OPENHAB_USERDATA" || {
|
|
echo "WARNING: Failed to change userdata folder permissions to $currentUser:$currentGroup" >&2
|
|
}
|
|
chown -R "$currentUser:$currentGroup" "$OPENHAB_CONF" || {
|
|
echo "WARNING: Failed to change conf folder permissions to $currentUser:$currentGroup" >&2
|
|
}
|
|
|
|
echo "Deleting temporary files..."
|
|
rm -rf /tmp/openhab2
|
|
echo "Backup successfully restored!"
|
|
echo ""
|