#! /bin/bash echo "" echo "Updating local packages..." errors=`apt-add-repository universe >/dev/null 2>/dev/null && apt-get update 2>&1 >/dev/null && apt-get install -y zfs-initramfs` if [ "$?" = "0" ]; then echo "Done." else echo "Failed to add universal repository, update apt repository - $errors" exit 1 fi echo "" echo "Importing boot pool and main OS pool..." errors=$(zpool export -a 2>&1 1>/dev/null && zpool import -N -R /mnt rpool 2>&1 1>/dev/null && zpool import -N -R /mnt bpool 2>&1 1>/dev/null && zfs mount rpool/ROOT/ubuntu 2>&1 1>/dev/null) # && zfs mount -a 2>&1 1>/dev/null if [ "$?" = "0" ]; then echo "Done." else echo "Failed to mount bpool or rpool - $errors" exit 2 fi echo "" echo "Binding mounts..." errors=`mount --rbind /dev /mnt/dev 2>&1 1>/dev/null && mount --rbind /proc /mnt/proc 2>&1 1>/dev/null && mount --rbind /sys /mnt/sys 2>&1 1>/dev/null` if ! [ "$?" = "0" ]; then echo "Failed to bind mounts - $errors" exit 4 fi echo "Done." echo "" echo "Entering chroot, type \"exit\" to leave..." echo "" echo "#!/bin/bash" > /mnt/maintenance.sh chmod +x /mnt/maintenance.sh echo "zfs mount -a && mount /boot" >> /mnt/maintenance.sh echo "/bin/bash" >> /mnt/maintenance.sh chroot /mnt /maintenance.sh --login < /dev/tty rm /mnt/maintenance.sh if ! [ "$?" = "0" ]; then echo "Chroot failed with an error" exit $? fi echo "" echo "Unbinding mounts..." errors=$(mount | grep -v zfs | tac | awk '/\\/mnt/ {print \$3}' | xargs -i{} umount -lf {} 2>&1 1>/dev/null && zpool export -a 2>&1 1>/dev/null) if ! [ "$?" = "0" ]; then echo "Failed to unbind mounts - $errors" exit 4 fi echo "Done." echo "" exit 0