forked from pinecrypt/butterknife-provisioning-image
		
	
		
			
				
	
	
		
			91 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
set -e
 | 
						|
 | 
						|
action=$(dialog --menu "Advanced options, consider your warranty VOID!" 0 0 0 \
 | 
						|
    shell           "Drop to shell" \
 | 
						|
    instance        "Instance maintenance and recovery" \
 | 
						|
    subvol          "Delete instances/templates" \
 | 
						|
    restore         "Restore Windows master boot record" \
 | 
						|
    2>&1 >$(tty))
 | 
						|
clear
 | 
						|
 | 
						|
case $action in
 | 
						|
    shell)
 | 
						|
        sh
 | 
						|
    ;;
 | 
						|
    instance)
 | 
						|
        export BUTTERKNIFE_PARTITION=$(butterknife-select-btrfs-filesystem 2>&1 >$(tty))
 | 
						|
 | 
						|
        # Probe instances
 | 
						|
        pool_mountpoint=$(mktemp -d)
 | 
						|
        subvols=$(mktemp)
 | 
						|
        mount $BUTTERKNIFE_PARTITION $pool_mountpoint -o subvol=/
 | 
						|
        for subvol in $(ls $pool_mountpoint | grep "^@root:" | sort -r); do
 | 
						|
            echo "$subvol \"\""
 | 
						|
        done > $subvols
 | 
						|
        if [ -d $pool_mountpoint/deployments ]; then
 | 
						|
            for timestamp in $(ls $pool_mountpoint/deployments | sort -r); do
 | 
						|
                echo "deployments/$timestamp \"\""
 | 
						|
            done >> $subvols
 | 
						|
        fi
 | 
						|
        umount $pool_mountpoint
 | 
						|
        rmdir $pool_mountpoint
 | 
						|
 | 
						|
        # Select instance
 | 
						|
        export BUTTERKNIFE_DEPLOY_SUBVOL=$(dialog \
 | 
						|
            --menu "Select instance" 0 0 0 \
 | 
						|
            --file $subvols 2>&1 >$(tty))
 | 
						|
 | 
						|
        # TODO: Export BUTTERKNIFE_DISK for grub-install MBR
 | 
						|
        instance_mountpoint=$(mktemp -d)
 | 
						|
        mount $BUTTERKNIFE_PARTITION -o subvol=$BUTTERKNIFE_DEPLOY_SUBVOL $instance_mountpoint
 | 
						|
        mount --bind /dev $instance_mountpoint/dev
 | 
						|
        mount --bind /sys $instance_mountpoint/sys
 | 
						|
        mount --bind /proc $instance_mountpoint/proc
 | 
						|
        if [ -d $instance_mountpoint/var/lib/butterknife/persistent ]; then
 | 
						|
            mount --bind /proc $instance_mountpoint/var/lib/butterknife/persistent
 | 
						|
        fi
 | 
						|
        clear
 | 
						|
        echo "Mounted $BUTTERKNIFE_PARTITION$BUTTERKNIFE_DEPLOY_SUBVOL at $instance_mountpoint"
 | 
						|
        echo "Chrooting into $instance_mountpoint"
 | 
						|
        hostname $(cat $instance_mountpoint/etc/hostname)
 | 
						|
        cat /etc/resolv.conf > $instance_mountpoint/etc/resolv.conf
 | 
						|
        # Export sensible PATH
 | 
						|
        export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
 | 
						|
        chroot $instance_mountpoint butterknife-maintenance
 | 
						|
        umount -a
 | 
						|
        rmdir $instance_mountpoint
 | 
						|
    ;;
 | 
						|
    subvol)
 | 
						|
        BUTTERKNIFE_PARTITION=$(butterknife-select-btrfs-filesystem 2>&1 >$(tty))
 | 
						|
        mountpoint=$(mktemp -d)
 | 
						|
        mount $BUTTERKNIFE_PARTITION -o subvol=/ $mountpoint
 | 
						|
        subvols=$(mktemp)
 | 
						|
        for subvol in $(btrfs subvol list $mountpoint | cut -d ' ' -f 9 | sort -r); do
 | 
						|
            echo "$subvol \"\""
 | 
						|
        done > $subvols
 | 
						|
        selected_subvol=$(dialog --menu "Select subvolume to delete on $BUTTERKNIFE_PARTITION" 0 0 0 \
 | 
						|
            --file $subvols 2>&1 >$(tty))
 | 
						|
        rm -f $subvols
 | 
						|
        btrfs subvol delete -c $mountpoint/$selected_subvol
 | 
						|
        umount $mountpoint
 | 
						|
        rmdir $mountpoint
 | 
						|
    ;;
 | 
						|
    restore)
 | 
						|
        disk=$(butterknife-select-disk 2>&1 >$(tty))
 | 
						|
 | 
						|
        # Select MBR type
 | 
						|
        action=$(dialog --menu "What kind of master boot record would you like to restore? You might have to mark partition bootable using fdisk." 0 0 0 \
 | 
						|
            mbr7          "Windows 7/8/10" \
 | 
						|
            mbrvista      "Windows Vista" \
 | 
						|
            mbr           "Windows 2000/XP/2003" \
 | 
						|
            2>&1 >$(tty))
 | 
						|
 | 
						|
        cmd="ms-sys --$action /dev/$disk"
 | 
						|
        $cmd | dialog --programbox "$cmd" 10 76
 | 
						|
 | 
						|
    ;;
 | 
						|
esac
 | 
						|
 |