diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..e69de29 diff --git a/restore.sh b/restore.sh new file mode 100644 index 0000000..51ef5f3 --- /dev/null +++ b/restore.sh @@ -0,0 +1,190 @@ +#not working encrypted setup + +#vars +IP="192.168.100.16" +source="rsync@"$IP"/rsync/" +bootSize=256M + +#prepare +##check for root +if [ `id -u` != 0 ] ; then + echo "==> Need to be root" + exit 1 +fi +##check for network +ping -c 1 $IP &> /dev/null +if [ "$?" != 0 ] +then + echo "==> Host unavailable, exiting" + exit 1 +fi + +##check for space + +rsync_dir_list=($(rsync --password-file=rsync_pass rsync://$source | awk '{print $5}' | grep -v .DS_Store | grep -v "@Recently-Snapshot" | sort -r | head -n -1)) + +##choose backup + +echo "==>" ${#rsync_dir_list[@]} backups: ${rsync_dir_list[@]} +read -p "Input backup number:" backupNum + +until [ $backupNum -le ${#rsync_dir_list[@]} ] +do +read -p "Input backup number:" backupNum +done +let "backupNum -= 1" + + +##set target drive +lsblk -o NAME,LABEL,FSTYPE,SIZE,MOUNTPOINT,MODEL +until [ ! -f $targetDrive ] +do +read -p "Target drive is " targetDrive +targetDrive=/dev/$targetDrive +done +echo "Encrypted?" +while read -r -n 1 -s answer ; do + if [[ $answer = [YyNn] ]]; then + [[ $answer = [Yy] ]] && encryptedDevice=true && echo "WARNING You will be asked for password later" #read -p "Password: " encryptedPassword + [[ $answer = [Nn] ]] && encryptedDevice=false + break + fi +done + +#get swap size +swapSize=$(free -m | grep "Mem" | awk '{print $2}') +read -p "Enter extra amount of swap (empty == 512):" swapExtra +if [ -z "$swapExtra" ] && swapExtra=512 +let "swapSize += swapExtra" #add 512 mbs to swap for +swapSize=$swapSize"M" + +#DEPLOY + +echo deployin\' ${rsync_dir_list[$backupNum]} on $targetDrive in 15s... + +sleep 15 + + +trap 'echo "==> Interrupted by user"; exit 1' 2 + +##clear mbr for sure + +dd if=/dev/zero of=$targetDrive count=512 + +##fdisk +echo "==> Partitioning..." +( +echo o # Create a new empty DOS partition table +echo n # Add a new partition +echo # Primary partition +echo # Partition number +echo # First sector (Accept default: 1) +echo +$swapSize # Last sector (Accept default: varies) +echo y #remove sign +echo n +echo +echo +echo +echo +$bootSize +echo y +echo n +echo +echo +echo +echo +echo w +) | fdisk $targetDrive + # IMHO this ^ is less obfuscated way + +##mkfs's +echo "==> Making filesystems..." +echo "mkswap" +mkswap $targetDrive"1" +echo "mkfs.vfat" +mkfs.vfat $targetDrive"2" + +echo "mkfs.ext4" +if $encryptedDevice +then +cryptsetup luksFormat -v $targetDrive"3" +cryptsetup open $targetDrive"3" targetLuks +mkfs.ext4 /dev/mapper/targetLuks +else +mkfs.ext4 $targetDrive"3" +fi + +sleep 15 + +##get disk's uuid +echo "==> Got UUIDs!" +UUIDS=($(blkid $targetDrive"1" $targetDrive"2" $targetDrive"3" -o value -s UUID)) +if $encryptedDevice +then +UUIDS[3]=UUIDS[2] +UUIDS[2]=`blkid /dev/mapper/targetLuks -o value -s UUID` +fi + +##mount disks +echo "==> Mounting..." +if $encryptedDevice +then +mount /dev/mapper/targetLuks /mnt +else +mount $targetDrive"3" /mnt +fi + +mkdir /mnt/boot +mount $targetDrive"2" /mnt/boot + +##rsync +echo "==> Copying from NAS..." +rsync --archive --password-file=rsync_pass rsync://$source${rsync_dir_list[$backupNum]}/ /mnt/ +retVal=$? +if [ $retVal -ne 0 ]; then + exit 1 +fi + +##update fstab +echo "==> Updating fstab..." +mv /mnt/etc/fstab /mnt/etc/fstab.orig +cat /mnt/etc/fstab.orig | grep "ext4" | sed 's/UUID=[A-Fa-f0-9-]*/UUID='${UUIDS[2]}'/' > /mnt/etc/fstab +cat /mnt/etc/fstab.orig | grep "vfat" | sed 's/UUID=[A-Fa-f0-9-]*/UUID='${UUIDS[1]}'/' >> /mnt/etc/fstab +cat /mnt/etc/fstab.orig | grep "swap" | sed 's/UUID=[A-Fa-f0-9-]*/UUID='${UUIDS[0]}'/' >> /mnt/etc/fstab +rm /mnt/etc/fstab.orig + +echo "==> Result:" +cat /mnt/etc/fstab +##update grub linux options +if $encryptedDevice +cat /mnt/etc/default/grub | sed 's/cryptdevice=UUID=[A-Fa-f0-9-]*:cryptroot /cryptdevice=UUID='${UUIDS[3]}':cryptroot/' > /mnt/etc/default/grub +else +cat /mnt/etc/default/grub | sed 's/cryptdevice=UUID=[A-Fa-f0-9-]*:cryptroot //' > /mnt/etc/default/grub +fi + +cat /mnt/etc/default/grub | sed 's/resume=UUID=[A-Fa-f0-9-]*/resume=UUID='${UUIDS[0]}'/' > /mnt/etc/default/grub + +##mount system stuff +echo "==> Mounting /dev, /sys, /proc..." +mount /dev /mnt/dev --bind +mount /sys /mnt/sys --bind +mount /proc /mnt/proc --bind + +##chroot, mkinitcpio and update grub +echo "==> mkinitcpio and update grub..." + +#cat /mnt/etc/mkinitcpio.conf | sed 's/encrypt //' > /mnt/etc/mkinitcpio.conf #remove cryptdevice, no encrypted fs today :c + +#chroot env +cat << EOF | chroot /mnt +mkinitcpio -P +grub-mkconfig -o /boot/grub/grub.cfg +grub-install $targetDrive +exit +EOF + +#deinit +echo "==> Syncing..." +sync +echo "==> Unmounting..." +umount -R /mnt +echo "==> Done!" \ No newline at end of file