#not working encrypted setup #vars IP="192.168.100.100" source="rsync@"$IP"/mnt/" 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 name:" backupName echo "Selected: " $backupName #until [ $backupNum -le ${#rsync_dir_list[@]} ] #do #read -p "Input backup name:" backupName #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 #encrypted? echo "Encrypted? (Y/N)" while read -r -n 1 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}') echo "" read -p "Enter extra amount of swap (empty == 512):" swapExtra [[ -z "$swapExtra" ]] && swapExtra=512 let "swapSize += swapExtra" #add 512 mbs to swap for swap, not only hibernation 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 "=> swap" mkswap $targetDrive"1" echo "=> /boot" mkfs.vfat $targetDrive"2" echo "=> rootfs" if $encryptedDevice ; then cryptsetup luksFormat -v $targetDrive"3" cryptsetup open $targetDrive"3" targetLuks mkfs.ext4 -q /dev/mapper/targetLuks else mkfs.ext4 -q $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/ rsync --archive --password-file=rsync_pass rsync://$source$backupName/ /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 #TODO OFC we need to check mountpoint, not only type of FS echo "==> Result:" cat /mnt/etc/fstab ##update grub linux options if $encryptedDevice ; then 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 /bin/sh 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!"