new backupscripts
This commit is contained in:
parent
f64b9cffa3
commit
68ed344892
25
BackupScript/sysmatt.rpi.backup.gtar
Normal file
25
BackupScript/sysmatt.rpi.backup.gtar
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 20140804-1708 Matthew E Hoskins / Twitter: @sysmatt (c) GNU GPL
|
||||||
|
|
||||||
|
set -x # debugging
|
||||||
|
|
||||||
|
bomb () {
|
||||||
|
echo "BOMB: ${1}"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Default destination directory
|
||||||
|
DSTDIR=/home/pi/ServerBackups/DeskPi
|
||||||
|
DEFAULT_DFILE="${DSTDIR}/pi.`uname -n`.`date +%Y%m%d%H%M%S`.backup.tar.gz"
|
||||||
|
|
||||||
|
# If we get a filename on the command line, use it instead of the default.
|
||||||
|
DFILE="${1:-$DEFAULT_DFILE}"
|
||||||
|
DEST_DIR_SANITY=`dirname "${DFILE}"`
|
||||||
|
|
||||||
|
# Make sure the destination exists
|
||||||
|
[ -d "${DEST_DIR_SANITY}" ] || bomb "Destination directory ${DEST_DIR_SANITY} does not exist"
|
||||||
|
|
||||||
|
# Run the tar archive
|
||||||
|
tar --exclude="${DFILE}" --one-file-system -cvzf "${DFILE}" / /boot
|
||||||
|
|
||||||
|
echo "Created archive: ${DFILE}"
|
128
BackupScript/sysmatt.rpi.restore.sd.card
Normal file
128
BackupScript/sysmatt.rpi.restore.sd.card
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 20140804-1708 Matthew E Hoskins / Twitter: @sysmatt (c) GNU GPL
|
||||||
|
|
||||||
|
SDCARD_DEVICE="${1:?You must specify one SD CARD DEVICE to destroy}"
|
||||||
|
PI_BACKUP_SLASH="${2:?You must specify one PI BACKUP SLASH GTAR file}"
|
||||||
|
shift; shift;
|
||||||
|
# Any remaining args are added to TAR command line
|
||||||
|
|
||||||
|
# Extra operations which can be done in ENV Vars
|
||||||
|
# PI_OVERWRITE_ETC_HOSTNAME="new-hostname"
|
||||||
|
# PI_OPENVPN_CONFIG_FILE="/some/source/client.conf"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Temp random mountpoint under /tmp
|
||||||
|
MOUNTPOINT="/tmp/pi.sd.${RANDOM}${$}"
|
||||||
|
|
||||||
|
bomb (){
|
||||||
|
echo "BOMB: ${1}"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[ -x "/sbin/mkfs.vfat" ] || bomb "/sbin/mkfs.vfat Missing"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== ${SDCARD_DEVICE} Current Partition Table - To be destroyed! ==="
|
||||||
|
parted --script ${SDCARD_DEVICE} "print"
|
||||||
|
echo ""
|
||||||
|
read -p "PRESS ENTER to DESTROY ${SDCARD_DEVICE}, Press CTRL-c to abort"
|
||||||
|
|
||||||
|
parted --script "${SDCARD_DEVICE}" "mklabel msdos"
|
||||||
|
parted --script "${SDCARD_DEVICE}" "mkpart primary fat16 1MiB 64MB"
|
||||||
|
parted --script "${SDCARD_DEVICE}" "mkpart primary ext4 64MB -1s"
|
||||||
|
parted --script "${SDCARD_DEVICE}" print
|
||||||
|
mkfs.vfat "${SDCARD_DEVICE}1"
|
||||||
|
mkfs.ext4 -F -j "${SDCARD_DEVICE}2"
|
||||||
|
mkdir -p "${MOUNTPOINT}"
|
||||||
|
mount "${SDCARD_DEVICE}2" "${MOUNTPOINT}"
|
||||||
|
mkdir -p "${MOUNTPOINT}/boot"
|
||||||
|
mount "${SDCARD_DEVICE}1" "${MOUNTPOINT}/boot"
|
||||||
|
df -h "${MOUNTPOINT}"
|
||||||
|
df -h "${MOUNTPOINT}/boot"
|
||||||
|
read -p "Press ENTER To begin image restore"
|
||||||
|
tar $@ -xvzf "${PI_BACKUP_SLASH}" -C "${MOUNTPOINT}"
|
||||||
|
|
||||||
|
# Begin NOOBS fixup / Recommended by @KevinSidwar / 20140829-1744-MEH
|
||||||
|
ORIG_SLASHDEV_FOUND=`cat "${MOUNTPOINT}/etc/fstab"| grep " / " |grep -v "^#" |awk '{ print $1; }'`
|
||||||
|
ORIG_BOOTDEV_FOUND=`cat "${MOUNTPOINT}/etc/fstab"| grep " /boot " |grep -v "^#" |awk '{ print $1; }'`
|
||||||
|
|
||||||
|
# Hardcoded
|
||||||
|
NEW_SLASHDEV="/dev/mmcblk0p2"
|
||||||
|
NEW_BOOTDEV="/dev/mmcblk0p1"
|
||||||
|
|
||||||
|
# Defaults just in case the above search of fstab is a miss
|
||||||
|
ORIG_SLASHDEV="${ORIG_SLASHDEV_FOUND:-$NEW_SLASHDEV}"
|
||||||
|
ORIG_BOOTDEV="${ORIG_BOOTDEV_FOUND:-$NEW_BOOTDEV}"
|
||||||
|
|
||||||
|
|
||||||
|
echo "ORIG_SLASHDEV[${ORIG_SLASHDEV}] NEW_SLASHDEV[${NEW_SLASHDEV}] ORIG_BOOTDEV[${ORIG_BOOTDEV}] NEW_BOOTDEV[${NEW_BOOTDEV}]"
|
||||||
|
|
||||||
|
FILE_FSTAB="${MOUNTPOINT}/etc/fstab"
|
||||||
|
FILE_CMDLINE="${MOUNTPOINT}/boot/cmdline.txt"
|
||||||
|
FILE_OS_CONFIG_JSON="${MOUNTPOINT}/boot/os_config.json"
|
||||||
|
|
||||||
|
if [ "${ORIG_SLASHDEV}" != "${NEW_SLASHDEV}" -o "${ORIG_BOOTDEV}" != "${NEW_BOOTDEV}" ]
|
||||||
|
then
|
||||||
|
echo "CONFIGURATION CONVERSION NECESSARY - Devices do not match, modifying files. "
|
||||||
|
|
||||||
|
THISFILE="${FILE_FSTAB}"
|
||||||
|
if [ -e "${THISFILE}" ]
|
||||||
|
then
|
||||||
|
echo "Fixing ${THISFILE}"
|
||||||
|
cp -f "${THISFILE}" "${THISFILE}.old"
|
||||||
|
cat "${THISFILE}.old" |sed -e "s#${ORIG_SLASHDEV}#%NEW_SLASHDEV%# ; s#${ORIG_BOOTDEV}#%NEW_BOOTDEV%#" > "${THISFILE}.i"
|
||||||
|
cat "${THISFILE}.i" |sed -e "s#%NEW_SLASHDEV%#${NEW_SLASHDEV}# ; s#%NEW_BOOTDEV%#${NEW_BOOTDEV}#" >"${THISFILE}"
|
||||||
|
rm -f "${THISFILE}.i"
|
||||||
|
fi
|
||||||
|
|
||||||
|
THISFILE="${FILE_CMDLINE}"
|
||||||
|
if [ -e "${THISFILE}" ]
|
||||||
|
then
|
||||||
|
echo "Fixing ${THISFILE}"
|
||||||
|
cp -f "${THISFILE}" "${THISFILE}.old"
|
||||||
|
cat "${THISFILE}.old" |sed -e "s#${ORIG_SLASHDEV}#%NEW_SLASHDEV%# ; s#${ORIG_BOOTDEV}#%NEW_BOOTDEV%#" > "${THISFILE}.i"
|
||||||
|
cat "${THISFILE}.i" |sed -e "s#%NEW_SLASHDEV%#${NEW_SLASHDEV}# ; s#%NEW_BOOTDEV%#${NEW_BOOTDEV}#" >"${THISFILE}"
|
||||||
|
rm -f "${THISFILE}.i"
|
||||||
|
fi
|
||||||
|
|
||||||
|
THISFILE="${FILE_OS_CONFIG_JSON}"
|
||||||
|
if [ -e "${THISFILE}" ]
|
||||||
|
then
|
||||||
|
echo "Fixing ${THISFILE}"
|
||||||
|
cp -f "${THISFILE}" "${THISFILE}.old"
|
||||||
|
cat "${THISFILE}.old" |sed -e "s#${ORIG_SLASHDEV}#%NEW_SLASHDEV%# ; s#${ORIG_BOOTDEV}#%NEW_BOOTDEV%#" > "${THISFILE}.i"
|
||||||
|
cat "${THISFILE}.i" |sed -e "s#%NEW_SLASHDEV%#${NEW_SLASHDEV}# ; s#%NEW_BOOTDEV%#${NEW_BOOTDEV}#" >"${THISFILE}"
|
||||||
|
rm -f "${THISFILE}.i"
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
# End Noobs fixup
|
||||||
|
if [ -n "${PI_OVERWRITE_ETC_HOSTNAME}" ]
|
||||||
|
then
|
||||||
|
# Write a new /etc/hostname
|
||||||
|
echo "Writing new /etc/hostname with [${PI_OVERWRITE_ETC_HOSTNAME}] to ${MOUNTPOINT}/etc/hostname"
|
||||||
|
echo "${PI_OVERWRITE_ETC_HOSTNAME}" > "${MOUNTPOINT}/etc/hostname"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e "${PI_OPENVPN_CONFIG_FILE}" ]
|
||||||
|
then
|
||||||
|
echo "Writing OpenVPN config [${PI_OPENVPN_CONFIG_FILE}] to ${MOUNTPOINT}/etc/openvpn/"
|
||||||
|
rm -f ${MOUNTPOINT}/etc/openvpn/*.conf
|
||||||
|
cp -f "${PI_OPENVPN_CONFIG_FILE}" "${MOUNTPOINT}/etc/openvpn/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo =DONE=
|
||||||
|
echo "The SD is mounted at: ${MOUNTPOINT}"
|
||||||
|
echo "Now would be a good time to make modifications in another shell session..."
|
||||||
|
read -p "Press ENTER To unmount or CTRL-c to exit leaving mounted."
|
||||||
|
echo ""
|
||||||
|
echo "Working. This may take a moment..."
|
||||||
|
echo ""
|
||||||
|
set -x
|
||||||
|
umount "${MOUNTPOINT}/boot"
|
||||||
|
umount "${MOUNTPOINT}"
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user