#!/bin/bash # Das ist die Version 2 von Platte einlesen. # Hier wird mit einem anderen tool als dd ein image erstellt. Mit partclone # daher muss das Layout der Installation strikt eingehalten werden # P0=Efi(vfat) P1=swap P2=homeroot(Btrfs) source sub_install GG=$(lsblk -r -p -n -o NAME,TYPE |grep disk | cut -f1 -d' ') echo $GG Devs=() for dev in $GG; do Devs+=($dev) Devs+=("") done while true do dev=`dialog --menu "Platte einlesen. Festplattengerät wählen" 0 0 0 \ "${Devs[@]}" 3>&1 1>&2 2>&3` dialog --clear dialog --yesno "Bestätigen Sie Ihre Auswahl: $dev" 0 0 # Get exit status # 0 means user hit [yes] button. # 1 means user hit [no] button. # 255 means user hit [Esc] key. response=$? case $response in 0) echo "Bestätigt"; break;; 1) echo "Neu wählen";; 255) echo "[ESC]"; exit 1;; esac done # in $dev steht jetzt das Basisdevice while true do dialog --clear # show an inputbox FILENM=$(dialog --title "Imagedateiverzeichnis" --inputbox "Verzeichnisname " 8 60 3>&1 1>&2 2>&3 3>&- ) # get respose respose=$? case $response in 1) exit 2 ;; 255) echo "[ESC]"; exit 1;; esac dialog --clear dialog --yesno "Gewählter Name: $FILENM" 0 0 # Get exit status # 0 means user hit [yes] button. # 1 means user hit [no] button. # 255 means user hit [Esc] key. response=$? case $response in 0) echo "Bestätigt"; break;; 1) echo "Neu wählen";; 255) echo "[ESC]"; exit 1;; esac done # ------- eigentliche Aktion --------- # Partitionen ermitteln und checken echo "Habe folgende Partitionen entdeckt:" # Typen,fstyp und pfad auf normale partitionen beschränkt ermitteln DSK=$(lsblk -l -oPATH,FSTYPE,TYPE -p "$dev" |grep 'part') Pp=() Pt=() IFS=$'\n' #newline ist separator (=ws wird mitgenommen) pat='^([^ ]*) +([^ ]+) +.*$' # Bash regex mit Leerzeichen nutzen = Variable nehmen for line in $DSK; do echo $line if [[ $line =~ $pat ]]; then #li=${BASH_REMATCH[1]}${BASH_REMATCH[2]}; pp=${BASH_REMATCH[1]} fs=${BASH_REMATCH[2]} #echo " pp $pp - fs $fs" Pp+=($pp) Pt+=($fs) # Pp+=("") fi done # jetzt sind in den arrays Pt und Pp die Partitionstypen und Pfade drin echo "Prüfe layout, ob es unserem Modus passt" if [ "${Pt[0]}" != "vfat" ]; then echo "Erwarte bei ${Pp[0]} eine EFI-Partition mit vfat. Nicht gefunden" exit 1 fi if [ "${Pt[1]}" != "swap" ]; then echo "Erwarte bei ${Pp[1]} eine Swap-Partition. Nicht gefunden" exit 1 fi if [ "${Pt[2]}" != "btrfs" ]; then echo "Erwarte bei ${Pp[2]} eine root/home Partition mit BTRFS. Nicht gefunden" exit 1 fi echo "Layout passt so. Beginne den Einlesevorgang" DIRECTORY="$FILENM" if [ -d "$DIRECTORY" ]; then echo "$DIRECTORY existiert bereits. Beende." exit 2 fi mkdir "$DIRECTORY" echo "Bearbeite jetzt ${Pt[2]}" partclone.vfat -c -s "${Pt[0]}" -o "$DIRECTORY/p0" partclone.btrfs -c -s "${Pt[2]}" -o "$DIRECTORY/p2" echo "Fertig. In $DIRECTORY befinden sich nun die Abbilder der Partitionen"