diff --git a/files/diskspreparation.sh b/files/diskspreparation.sh index 335b5542da448a55c21fa493b8b4b1eb9253752b..86d331acb76c8ce9f86e432bd0e1cb6ac6cb4706 100755 --- a/files/diskspreparation.sh +++ b/files/diskspreparation.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +. /tmp/answerfile + # convertSizeToByte - converts a given size to byte # parameter: # $1 - size in "kB", "kiB", "MB", "MiB", "GB", "GiB", "TB" or "TiB" @@ -81,7 +83,7 @@ validateScheme() { initialDiskScheme() { local scheme=$(eval echo \$DISK_$(echo $1 | tr [a-z] [A-Z])_SCHEME | tr [A-Z] [a-z]) - if [ ${scheme} = "mbr" ]; + if [ ${scheme} = "mbr" -o ${scheme} = "msdos" ]; then parted -s -m /dev/$1 mklabel msdos else @@ -114,7 +116,7 @@ validateDiskPartitionLayout() { dsize=$(convertSizeToByte $(echo ${diskdata[${idx}]} | cut -f 4 -d ":")) diffperc=$(dc -e "2k $dsize $gsize - 100 * $gsize / p" | sed -e "s/^-//g") - if [ -n "x${diffperc%.*}" ]; + if [ "x${diffperc%.*}" = "x" ]; then diffperc=0 fi @@ -211,9 +213,37 @@ setDiskPartitionFlags() { # $1 - name of the disk device # $2 - index of the disk partition # return: -# partition device of the given disk on STDOUT +# 0 - no error +# 1 - error occured +# hint: +# The partition device of the given disk is returned on STDOUT. getPartitionDeviceByIndex() { - fdisk -l /dev/$1 2>/dev/null | sed -n -e "s/^\(\/dev[^ ]*\) .*$/\1/p" | sed -n "$2p" + local scheme=$(eval echo \$DISK_$(echo $1 | tr [a-z] [A-Z])_SCHEME | tr [A-Z] [a-z]) + local partdev="" + local partname + local retval=0 + + if [ ${scheme} = "mbr" -o ${scheme} = "msdos" ]; + then + partdev=$(fdisk -l /dev/$1 2>/dev/null | sed -n -e "s/^\(\/dev[^ ]*\) .*$/\1/p" | sed -n "$2p") + else + if [ -d /sys/block/$1 ]; + then + partname=$(ls -d /sys/block/$1/$1* | sed -n "$2p" | xargs basename) + if [ -n ${partname} -a -e /dev/${partname} ]; + then + partdev="/dev/${partname}" + else + retval=1 + fi + else + retval=1 + fi + fi + + echo ${partdev} + + return ${retval} } # formatDiskPartion - format a partition @@ -234,8 +264,8 @@ formatDiskPartion() { case $(echo $3 | tr "[A-Z]" "[a-z]") in "ext4") mkfs.ext4 -q -F ${device} >/dev/null|| retval=1 ;; "ext3") mkfs.ext3 -q -F ${device} >/dev/null || retval=1 ;; - "fat32") mkfs.vfat ${device} >/dev/null || retval=1 ;; - "fat16") mkfs.msdos -F 16 ${device} >/dev/null || retval=1 ;; + "fat32") mkfs.fat -F 32 ${device} >/dev/null || retval=1 ;; + "fat16") mkfs.fat -F 16 ${device} >/dev/null || retval=1 ;; "swap") mkswap ${device} >/dev/null || retval=1 ;; "ntfs") mkntfs -q -f ${device} >/dev/null || retval=1 ;; "btrfs") mkfs.btrfs -q -f ${device} >/dev/null || retval=1 ;; @@ -348,30 +378,54 @@ generateFSTab() { # $1 - path to target directory # return: # none +# hint: +# This function mounts also the existing partitions. createTargetDirectoryLayout(){ local idx local mntpnt local fs + local opts + local partdev + declare -a partmntdata=() + # combine partition devices with their mount point and mount options for disk in ${DISK_DEVICES[@]} do idx=1 for part in $(eval "for p in \${DISK_$(echo ${disk} | tr [a-z] [A-Z])_PARTITIONS[@]}; do echo \$p; done ") do - fs=$(blkid -s TYPE -o value /dev/${disk}${idx}) + partdev=$(getPartitionDeviceByIndex ${disk} ${idx}) + fs=$(blkid -s TYPE -o value ${partdev}) mntpnt=$(echo ${part} | cut -f 3 -d ";") + opts=$(echo ${part} | cut -f 4 -d ";") if [ "${fs}" = "swap" -o "${fs}" = "linux-swap" ]; then mntpnt="none" fi - - if [ "${mntpnt}" != "none" ]; - then - mkdir -p $1/${mntpnt} - fi + partmntdata+=("${partdev};${mntpnt};${fs};${opts}") idx=$((${idx} + 1)) done done + + # create directory layout and mount partitions + for part in $(eval "for p in \${partmntdata[@]}; do echo \$p; done" | sort -k 2 -t ";") + do + partdev=$(echo ${part} | cut -f 1 -d ";") + mntpnt=$(echo ${part} | cut -f 2 -d ";") + fs=$(echo ${part} | cut -f 3 -d ";") + opts=$(echo ${part} | cut -f 4 -d ";") + + if [ "${mntpnt}" != "none" ]; + then + mkdir -p $1/${mntpnt} + if [ -z "${opts}" ]; + then + mount -t ${fs} ${partdev} $1/${mntpnt} + else + mount -t ${fs} ${partdev} $1/${mntpnt} -o ${opts} + fi + fi + done } for disk in ${DISK_DEVICES[@]} @@ -404,5 +458,4 @@ do done generateFSTab "/tmp/fstab.local" "uuid" -generateFSTab "/tmp/fstab.target" "dev" "/target" createTargetDirectoryLayout "/target"