From a7a2202d9a09f0c9b3a49972eb633980aaba1485 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Thu, 3 Jul 2014 10:06:13 -0300 Subject: [partitioner] testing dialog function for graphical mode. --- remote/modules/partitioner/config | 15 +++ remote/modules/partitioner/dialog.sh | 38 ++++++++ remote/modules/partitioner/partitioner.sh | 156 ++++++++++++++++++++++++++++++ remote/modules/partitioner/partitions | 17 ++++ 4 files changed, 226 insertions(+) create mode 100644 remote/modules/partitioner/config create mode 100755 remote/modules/partitioner/dialog.sh create mode 100755 remote/modules/partitioner/partitioner.sh create mode 100644 remote/modules/partitioner/partitions diff --git a/remote/modules/partitioner/config b/remote/modules/partitioner/config new file mode 100644 index 00000000..e8a31fe2 --- /dev/null +++ b/remote/modules/partitioner/config @@ -0,0 +1,15 @@ +#PARTITIONER + +CHOSENDISK=sda + +SCRATCHID=44 +SCRATCHSIZE=1 + +HOMEID=45 +HOMESIZE=2 + +DNBD3ID=46 +DNBD3SIZE=3 + +BOOTID=47 +BOOTSIZE=4 \ No newline at end of file diff --git a/remote/modules/partitioner/dialog.sh b/remote/modules/partitioner/dialog.sh new file mode 100755 index 00000000..c4bff5d2 --- /dev/null +++ b/remote/modules/partitioner/dialog.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +PARTITIONSPATH="/proc/partitions" +CONFIGPATH="./config" +DEFPARTSIZE=5 #in GB +DEFSCRATCHID=44 +DEFHOMEID=45 +DEFDNBD3ID=46 +DEFBOOTID=47 + +. $CONFIGPATH +# picking disk that will be used +test $CHOSENDISK +if [ $? -eq 1 ]; then + DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") + STR="This computer has the following partitions:\n" + for disk in $DISKS; do + DISKSIZE=$(cat $PARTITIONSPATH | grep -e $disk$ | tr -s ' ' | cut -d ' ' -f4) + PARTS=$(cat $PARTITIONSPATH | grep -e $disk[0-9] | tr -s ' ' | cut -d ' ' -f5) + GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024" | bc -l) + STR=$STR"$disk $DISKSIZE Bytes ($GBSIZE GB)\n" + USED=0 + for PART in $PARTS; do + PARTSIZE=$(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4) + USED=$(($USED+$PARTSIZE)) + GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024" | bc -l) + STR=$STR" $PART $PARTSIZE ($GBSIZE GB)\n" + done + STR=$STR" ----------\n" + FREESPACE=$(($DISKSIZE-$USED)) + GBSIZE=$(echo "scale=2; $USED/1024/1024" | bc -l) + STR=$STR" Used $USED ($GBSIZE GB)\n" + GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024" | bc -l) + STR=$STR" Free $FREESPACE ($GBSIZE GB)\n\n" + done +fi + +dialog --no-collapse --cr-wrap --inputbox "$STR" 0 0 $(echo $DISKS | cut -f1) \ No newline at end of file diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh new file mode 100755 index 00000000..9acb3d9d --- /dev/null +++ b/remote/modules/partitioner/partitioner.sh @@ -0,0 +1,156 @@ +#!/bin/sh + +PARTITIONSPATH="/proc/partitions" +CONFIGPATH="./config" +DEFPARTSIZE=5 #in GB +DEFSCRATCHID=44 +DEFHOMEID=45 +DEFDNBD3ID=46 +DEFBOOTID=47 + +. $CONFIGPATH +# picking disk that will be used +test $CHOSENDISK +if [ $? -eq 1 ]; then + DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") + STR="This computer has the following partitions:\n" + for disk in $DISKS; do + DISKSIZE=$(cat $PARTITIONSPATH | grep -e $disk$ | tr -s ' ' | cut -d ' ' -f4) + PARTS=$(cat $PARTITIONSPATH | grep -e $disk[0-9] | tr -s ' ' | cut -d ' ' -f5) + GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024" | bc -l) + STR=$STR"$disk $DISKSIZE Bytes ($GBSIZE GB)\n" + USED=0 + for PART in $PARTS; do + PARTSIZE=$(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4) + USED=$(($USED+$PARTSIZE)) + GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024" | bc -l) + STR=$STR" $PART $PARTSIZE ($GBSIZE GB)\n" + done + STR=$STR" ----------\n" + FREESPACE=$(($DISKSIZE-$USED)) + GBSIZE=$(echo "scale=2; $USED/1024/1024" | bc -l) + STR=$STR" Used $USED ($GBSIZE GB)\n" + GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024" | bc -l) + STR=$STR" Free $FREESPACE ($GBSIZE GB)\n\n" + done + + if [ $(echo $DISKS | tr ' ' \\n | wc -l) -gt 1 ]; then + STR=$STR"Which of these disks you want to use?\n" + dialog --no-collapse --cr-wrap --inputbox "$STR" 0 0 $(echo $DISKS | cut -d ' ' -f1) + echo $DISKS | tr ' ' \\n | grep -e ^$CHOSENDISK$ > /dev/null 2>/dev/null + while [ $? -ne 0 ]; do + echo "Invalid Option, try again." + read CHOSENDISK + echo $DISKS | tr ' ' \\n | grep -e ^$CHOSENDISK$ > /dev/null 2>/dev/null + done + # ask a confirmation (all your data will be lost etc) + elif [ $(echo $DISKS | tr ' ' \\n | wc -l) -eq 1 ]; then + CHOSENDISK=$(echo $DISKS | tr ' ' \\n | head -n1) + else + echo "ERROR: Can't find an Hard Disk." 1>&2 + return 1 + fi +fi + +DISKSIZE=$(cat $PARTITIONSPATH | grep -e $CHOSENDISK$ | tr -s ' ' | cut -d ' ' -f4) +echo "The disk $CHOSENDISK has $DISKSIZE Bytes of total." +echo "The /dev/$CHOSENDISK will be wiped, ok? (y/n)" +read ANSWER +while [ $ANSWER != 'y' ] && [ $ANSWER != 'n' ]; do + echo "Please type 'y' or 'n'." + read ANSWER +done +if [ $ANSWER = 'n' ]; then + return 1 +fi + +echo "Wiping /dev/$CHOSENDISK" +echo "unit: sectors + +/dev/"$CHOSENDISK"1 : start= 0, size= 0, Id= 0 +/dev/"$CHOSENDISK"2 : start= 0, size= 0, Id= 0 +/dev/"$CHOSENDISK"3 : start= 0, size= 0, Id= 0 +/dev/"$CHOSENDISK"4 : start= 0, size= 0, Id= 0 +" > /tmp/emptydisk.tmp +sfdisk -q /dev/$CHOSENDISK < /tmp/emptydisk.tmp > /dev/null +rm -f /tmp/emptydisk.tmp + + +echo "Creating new partitions" +LASTPARTITION=1 # in megabytes + +echo "Scratch:" +test $SCRATCHID +if [ $? -eq 1 ]; then + SCRATCHID=$DEFSCRATCHID +fi +echo "\tID: $SCRATCHID" +test $SCRATCHSIZE +if [ $? -eq 1 ]; then + GBSIZE=$DEFPARTSIZE + SCRATCHSIZE=$(($DEFPARTSIZE*1024*1024)) +else + GBSIZE=$SCRATCHSIZE + SCRATCHSIZE=$(($SCRATCHSIZE*1024*1024)) +fi +echo "\tSize: $SCRATCHSIZE Bytes ($GBSIZE GB)" +echo "\tCreating Scratch partiton..." +parted -s /dev/$CHOSENDISK mkpart primary $LASTPARTITION"m" $(($LASTPARTITION+$SCRATCHSIZE/1024))m && LASTPARTITION=$(($LASTPARTITION+$SCRATCHSIZE/1024)) +sfdisk --change-id /dev/$CHOSENDISK 1 $SCRATCHID > /dev/null + +echo "Home:" +test $HOMEID +if [ $? -eq 1 ]; then + HOMEID=$DEFHOMEID +fi +echo "\tID: $HOMEID" +test $HOMESIZE +if [ $? -eq 1 ]; then + GBSIZE=$DEFPARTSIZE + HOMESIZE=$(($DEFPARTSIZE*1024*1024)) +else + GBSIZE=$HOMESIZE + HOMESIZE=$(($HOMESIZE*1024*1024)) +fi +echo "\tSize: $HOMESIZE Bytes ($GBSIZE GB)" +echo "\tCreating Home partiton..." +parted -s /dev/$CHOSENDISK mkpart primary $LASTPARTITION"m" $(($LASTPARTITION+$HOMESIZE/1024))m && LASTPARTITION=$(($LASTPARTITION+$HOMESIZE/1024)) +sfdisk --change-id /dev/$CHOSENDISK 2 $HOMEID > /dev/null + +echo "dnbd3:" +test $DNBD3ID +if [ $? -eq 1 ]; then + DNBD3ID=$DEFDNBD3ID +fi +echo "\tID: $DNBD3ID" +test $DNBD3SIZE +if [ $? -eq 1 ]; then + GBSIZE=$DEFPARTSIZE + DNBD3SIZE=$(($DEFPARTSIZE*1024*1024)) +else + GBSIZE=$DNBD3SIZE + DNBD3SIZE=$(($DNBD3SIZE*1024*1024)) +fi +echo "\tSize: $DNBD3SIZE Bytes ($GBSIZE GB)" +echo "\tCreating dnbd3 partiton..." +parted -s /dev/$CHOSENDISK mkpart primary $LASTPARTITION"m" $(($LASTPARTITION+$DNBD3SIZE/1024))m && LASTPARTITION=$(($LASTPARTITION+$DNBD3SIZE/1024)) +sfdisk --change-id /dev/$CHOSENDISK 3 $DNBD3ID > /dev/null + +echo "Boot:" +test $BOOTID +if [ $? -eq 1 ]; then + BOOTID=$DEFBOOTID +fi +echo "\tID: $BOOTID" +test $BOOTSIZE +if [ $? -eq 1 ]; then + GBSIZE=$DEFPARTSIZE + BOOTSIZE=$(($DEFPARTSIZE*1024*1024)) +else + GBSIZE=$BOOTSIZE + BOOTSIZE=$(($BOOTSIZE*1024*1024)) +fi +echo "\tSize: $BOOTSIZE Bytes ($GBSIZE GB)" +echo "\tCreating boot partiton..." +parted -s /dev/$CHOSENDISK mkpart primary $LASTPARTITION"m" $(($LASTPARTITION+$BOOTSIZE/1024))m set 4 boot on && LASTPARTITION=$(($LASTPARTITION+$BOOTSIZE/1024)) +sfdisk --change-id /dev/$CHOSENDISK 4 $BOOTID > /dev/null diff --git a/remote/modules/partitioner/partitions b/remote/modules/partitioner/partitions new file mode 100644 index 00000000..8ec007ff --- /dev/null +++ b/remote/modules/partitioner/partitions @@ -0,0 +1,17 @@ +major minor #blocks name + + 8 0 488386584 sda + 8 1 1 sda1 + 8 2 27343872 sda2 + 8 3 45898437 sda3 + 8 4 52928512 sda4 + 8 5 345713664 sda5 + 8 6 8226816 sda6 + 11 0 1048575 sr0 + 8 0 386584 sdb + 8 1 1 sdb1 + 8 2 343872 sdb2 + 8 3 45898437 sdb3 + 8 0 1838584 vda + 8 1 1 vda1 + 8 2 27343872 vda2 \ No newline at end of file -- cgit v1.2.3-55-g7522 From fb4100e11a421112328b8609a5fdd96aa2195359 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Thu, 3 Jul 2014 12:25:01 -0300 Subject: [partitioner] using dialog to print messages. --- remote/modules/partitioner/dialog.sh | 4 +- remote/modules/partitioner/partitioner.sh | 100 +++++++++++++++++++----------- 2 files changed, 66 insertions(+), 38 deletions(-) diff --git a/remote/modules/partitioner/dialog.sh b/remote/modules/partitioner/dialog.sh index c4bff5d2..45b122c5 100755 --- a/remote/modules/partitioner/dialog.sh +++ b/remote/modules/partitioner/dialog.sh @@ -34,5 +34,5 @@ if [ $? -eq 1 ]; then STR=$STR" Free $FREESPACE ($GBSIZE GB)\n\n" done fi - -dialog --no-collapse --cr-wrap --inputbox "$STR" 0 0 $(echo $DISKS | cut -f1) \ No newline at end of file +# echo $STR +CHOSENDISK=$(dialog --no-collapse --cr-wrap --inputbox "$STR" 0 0 $(echo $DISKS | cut -f1) 3>&1 1>&2 2>&3) diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh index 9acb3d9d..6c81e13d 100755 --- a/remote/modules/partitioner/partitioner.sh +++ b/remote/modules/partitioner/partitioner.sh @@ -13,41 +13,52 @@ DEFBOOTID=47 test $CHOSENDISK if [ $? -eq 1 ]; then DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") - STR="This computer has the following partitions:\n" + test $DISKS + if [ $? -eq 1 ]; then + dialog --msgbox "ERROR: Can't find an hard disk." 5 40 + return 1 + fi + DIALOGSTR="This computer has the following partitions:\n" for disk in $DISKS; do DISKSIZE=$(cat $PARTITIONSPATH | grep -e $disk$ | tr -s ' ' | cut -d ' ' -f4) PARTS=$(cat $PARTITIONSPATH | grep -e $disk[0-9] | tr -s ' ' | cut -d ' ' -f5) GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024" | bc -l) - STR=$STR"$disk $DISKSIZE Bytes ($GBSIZE GB)\n" + DIALOGSTR=$DIALOGSTR"$disk $DISKSIZE Bytes ($GBSIZE GB)\n" USED=0 for PART in $PARTS; do PARTSIZE=$(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4) USED=$(($USED+$PARTSIZE)) GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024" | bc -l) - STR=$STR" $PART $PARTSIZE ($GBSIZE GB)\n" + DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" done - STR=$STR" ----------\n" + DIALOGSTR=$DIALOGSTR" ----------\n" FREESPACE=$(($DISKSIZE-$USED)) GBSIZE=$(echo "scale=2; $USED/1024/1024" | bc -l) - STR=$STR" Used $USED ($GBSIZE GB)\n" + DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024" | bc -l) - STR=$STR" Free $FREESPACE ($GBSIZE GB)\n\n" + DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" done if [ $(echo $DISKS | tr ' ' \\n | wc -l) -gt 1 ]; then - STR=$STR"Which of these disks you want to use?\n" - dialog --no-collapse --cr-wrap --inputbox "$STR" 0 0 $(echo $DISKS | cut -d ' ' -f1) + DIALOGSTR=$DIALOGSTR"Which of these disks you want to use?\n" + CHOSENDISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) + if [ $? -eq 1 ]; then + return 1; + fi echo $DISKS | tr ' ' \\n | grep -e ^$CHOSENDISK$ > /dev/null 2>/dev/null while [ $? -ne 0 ]; do - echo "Invalid Option, try again." - read CHOSENDISK + dialog --msgbox "Invalid option.\nTry again." 0 0 + CHOSENDISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) + if [ $? -eq 1 ]; then + return 1; + fi echo $DISKS | tr ' ' \\n | grep -e ^$CHOSENDISK$ > /dev/null 2>/dev/null done # ask a confirmation (all your data will be lost etc) elif [ $(echo $DISKS | tr ' ' \\n | wc -l) -eq 1 ]; then CHOSENDISK=$(echo $DISKS | tr ' ' \\n | head -n1) else - echo "ERROR: Can't find an Hard Disk." 1>&2 + dialog --msgbox "ERROR: Can't find an hard disk." 5 40 return 1 fi fi @@ -55,16 +66,12 @@ fi DISKSIZE=$(cat $PARTITIONSPATH | grep -e $CHOSENDISK$ | tr -s ' ' | cut -d ' ' -f4) echo "The disk $CHOSENDISK has $DISKSIZE Bytes of total." echo "The /dev/$CHOSENDISK will be wiped, ok? (y/n)" -read ANSWER -while [ $ANSWER != 'y' ] && [ $ANSWER != 'n' ]; do - echo "Please type 'y' or 'n'." - read ANSWER -done -if [ $ANSWER = 'n' ]; then +dialog --defaultno --yesno "The disk $CHOSENDISK has $DISKSIZE Bytes ($(echo "scale=2; $DISKSIZE/1024/1024" | bc -l) GB) of total space.\nAll /dev/$CHOSENDISK partitions will be deleted, ok?" 0 0 +if [ $? -eq 1 ]; then return 1 fi - -echo "Wiping /dev/$CHOSENDISK" +DIALOGSTR="Wiping /dev/$CHOSENDISK\n\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 30 echo "unit: sectors /dev/"$CHOSENDISK"1 : start= 0, size= 0, Id= 0 @@ -76,15 +83,19 @@ sfdisk -q /dev/$CHOSENDISK < /tmp/emptydisk.tmp > /dev/null rm -f /tmp/emptydisk.tmp -echo "Creating new partitions" +DIALOGSTR=$DIALOGSTR"Creating new partitions\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 LASTPARTITION=1 # in megabytes -echo "Scratch:" +# SCRATCH +DIALOGSTR=$DIALOGSTR"SCRATCH\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 test $SCRATCHID if [ $? -eq 1 ]; then SCRATCHID=$DEFSCRATCHID fi -echo "\tID: $SCRATCHID" +DIALOGSTR=$DIALOGSTR" ID: $SCRATCHID\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 test $SCRATCHSIZE if [ $? -eq 1 ]; then GBSIZE=$DEFPARTSIZE @@ -93,17 +104,22 @@ else GBSIZE=$SCRATCHSIZE SCRATCHSIZE=$(($SCRATCHSIZE*1024*1024)) fi -echo "\tSize: $SCRATCHSIZE Bytes ($GBSIZE GB)" -echo "\tCreating Scratch partiton..." +DIALOGSTR=$DIALOGSTR" Size: $SCRATCHSIZE Bytes ($GBSIZE GB)\n Creating SCRATCH partiton...\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 parted -s /dev/$CHOSENDISK mkpart primary $LASTPARTITION"m" $(($LASTPARTITION+$SCRATCHSIZE/1024))m && LASTPARTITION=$(($LASTPARTITION+$SCRATCHSIZE/1024)) sfdisk --change-id /dev/$CHOSENDISK 1 $SCRATCHID > /dev/null +DIALOGSTR=$DIALOGSTR"Done.\n\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 -echo "Home:" +# HOME +DIALOGSTR=$DIALOGSTR"HOME\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 test $HOMEID if [ $? -eq 1 ]; then HOMEID=$DEFHOMEID fi -echo "\tID: $HOMEID" +DIALOGSTR=$DIALOGSTR" ID: $HOMEID\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 test $HOMESIZE if [ $? -eq 1 ]; then GBSIZE=$DEFPARTSIZE @@ -112,17 +128,22 @@ else GBSIZE=$HOMESIZE HOMESIZE=$(($HOMESIZE*1024*1024)) fi -echo "\tSize: $HOMESIZE Bytes ($GBSIZE GB)" -echo "\tCreating Home partiton..." +DIALOGSTR=$DIALOGSTR" Size: $HOMESIZE Bytes ($GBSIZE GB)\n Creating HOME partiton...\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 parted -s /dev/$CHOSENDISK mkpart primary $LASTPARTITION"m" $(($LASTPARTITION+$HOMESIZE/1024))m && LASTPARTITION=$(($LASTPARTITION+$HOMESIZE/1024)) sfdisk --change-id /dev/$CHOSENDISK 2 $HOMEID > /dev/null +DIALOGSTR=$DIALOGSTR"Done.\n\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 -echo "dnbd3:" +# DNBD3 +DIALOGSTR=$DIALOGSTR"DNBD3\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 test $DNBD3ID if [ $? -eq 1 ]; then DNBD3ID=$DEFDNBD3ID fi -echo "\tID: $DNBD3ID" +DIALOGSTR=$DIALOGSTR" ID: $DNBD3ID\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 test $DNBD3SIZE if [ $? -eq 1 ]; then GBSIZE=$DEFPARTSIZE @@ -131,17 +152,22 @@ else GBSIZE=$DNBD3SIZE DNBD3SIZE=$(($DNBD3SIZE*1024*1024)) fi -echo "\tSize: $DNBD3SIZE Bytes ($GBSIZE GB)" -echo "\tCreating dnbd3 partiton..." +DIALOGSTR=$DIALOGSTR" Size: $DNBD3SIZE Bytes ($GBSIZE GB)\n Creating DNBD3 partiton...\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 parted -s /dev/$CHOSENDISK mkpart primary $LASTPARTITION"m" $(($LASTPARTITION+$DNBD3SIZE/1024))m && LASTPARTITION=$(($LASTPARTITION+$DNBD3SIZE/1024)) sfdisk --change-id /dev/$CHOSENDISK 3 $DNBD3ID > /dev/null +DIALOGSTR=$DIALOGSTR"Done.\n\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 -echo "Boot:" +# BOOT +DIALOGSTR=$DIALOGSTR"BOOT\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 test $BOOTID if [ $? -eq 1 ]; then BOOTID=$DEFBOOTID fi -echo "\tID: $BOOTID" +DIALOGSTR=$DIALOGSTR" ID: $BOOTID\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 test $BOOTSIZE if [ $? -eq 1 ]; then GBSIZE=$DEFPARTSIZE @@ -150,7 +176,9 @@ else GBSIZE=$BOOTSIZE BOOTSIZE=$(($BOOTSIZE*1024*1024)) fi -echo "\tSize: $BOOTSIZE Bytes ($GBSIZE GB)" -echo "\tCreating boot partiton..." +DIALOGSTR=$DIALOGSTR" Size: $BOOTSIZE Bytes ($GBSIZE GB)\n Creating BOOT partiton...\n" +dialog --keep-window --infobox "$DIALOGSTR" 30 50 parted -s /dev/$CHOSENDISK mkpart primary $LASTPARTITION"m" $(($LASTPARTITION+$BOOTSIZE/1024))m set 4 boot on && LASTPARTITION=$(($LASTPARTITION+$BOOTSIZE/1024)) sfdisk --change-id /dev/$CHOSENDISK 4 $BOOTID > /dev/null +DIALOGSTR=$DIALOGSTR"Done.\n\n" +dialog --and-widget --msgbox "$DIALOGSTR" 30 50 \ No newline at end of file -- cgit v1.2.3-55-g7522 From f60013fcfcc58c10d4a0661d14239d39f7c136d1 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Mon, 7 Jul 2014 13:05:07 -0300 Subject: [partitioner] using sfdisk to create msdos partitions. fully using the dialog function. --- remote/modules/partitioner/partitioner.sh | 169 +++++++++++++++--------------- 1 file changed, 87 insertions(+), 82 deletions(-) diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh index 6c81e13d..ad4becc3 100755 --- a/remote/modules/partitioner/partitioner.sh +++ b/remote/modules/partitioner/partitioner.sh @@ -13,7 +13,7 @@ DEFBOOTID=47 test $CHOSENDISK if [ $? -eq 1 ]; then DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") - test $DISKS + test $DISKS 2> /dev/null if [ $? -eq 1 ]; then dialog --msgbox "ERROR: Can't find an hard disk." 5 40 return 1 @@ -63,122 +63,127 @@ if [ $? -eq 1 ]; then fi fi +# asking confirmation to create the partitions DISKSIZE=$(cat $PARTITIONSPATH | grep -e $CHOSENDISK$ | tr -s ' ' | cut -d ' ' -f4) -echo "The disk $CHOSENDISK has $DISKSIZE Bytes of total." -echo "The /dev/$CHOSENDISK will be wiped, ok? (y/n)" -dialog --defaultno --yesno "The disk $CHOSENDISK has $DISKSIZE Bytes ($(echo "scale=2; $DISKSIZE/1024/1024" | bc -l) GB) of total space.\nAll /dev/$CHOSENDISK partitions will be deleted, ok?" 0 0 +GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024" | bc -l) +DIALOGSTR="$CHOSENDISK $DISKSIZE Bytes ($GBSIZE GB)\n" +PARTS=$(cat $PARTITIONSPATH | grep -e $CHOSENDISK[0-9] | tr -s ' ' | cut -d ' ' -f5) +USED=0 +for PART in $PARTS; do + PARTSIZE=$(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4) + USED=$(($USED+$PARTSIZE)) + GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024" | bc -l) + DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" +done +DIALOGSTR=$DIALOGSTR" ----------\n" +FREESPACE=$(($DISKSIZE-$USED)) +GBSIZE=$(echo "scale=2; $USED/1024/1024" | bc -l) +DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" +GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024" | bc -l) +DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" +DIALOGSTR=$DIALOGSTR"All /dev/$CHOSENDISK partitions will be deleted, ok?" + +dialog --defaultno --yesno "$DIALOGSTR" 0 0 if [ $? -eq 1 ]; then return 1 fi -DIALOGSTR="Wiping /dev/$CHOSENDISK\n\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 30 -echo "unit: sectors -/dev/"$CHOSENDISK"1 : start= 0, size= 0, Id= 0 -/dev/"$CHOSENDISK"2 : start= 0, size= 0, Id= 0 -/dev/"$CHOSENDISK"3 : start= 0, size= 0, Id= 0 -/dev/"$CHOSENDISK"4 : start= 0, size= 0, Id= 0 -" > /tmp/emptydisk.tmp -sfdisk -q /dev/$CHOSENDISK < /tmp/emptydisk.tmp > /dev/null -rm -f /tmp/emptydisk.tmp +# pick the size of a sector (usually 512 bytes) +SECTORSIZE=$(sfdisk /dev/$CHOSENDISK -l -u S 2> /dev/null | grep Units | cut -d ' ' -f5) - -DIALOGSTR=$DIALOGSTR"Creating new partitions\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 -LASTPARTITION=1 # in megabytes - -# SCRATCH -DIALOGSTR=$DIALOGSTR"SCRATCH\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 +# testing if the sizes and ID's of the disk is defined in the config file test $SCRATCHID if [ $? -eq 1 ]; then SCRATCHID=$DEFSCRATCHID fi -DIALOGSTR=$DIALOGSTR" ID: $SCRATCHID\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 + test $SCRATCHSIZE if [ $? -eq 1 ]; then - GBSIZE=$DEFPARTSIZE - SCRATCHSIZE=$(($DEFPARTSIZE*1024*1024)) + SCRATCHSIZEGB=$DEFPARTSIZE + SCRATCHSIZE=$(($DEFPARTSIZE*1024*1024*1024)) else - GBSIZE=$SCRATCHSIZE - SCRATCHSIZE=$(($SCRATCHSIZE*1024*1024)) + SCRATCHSIZEGB=$SCRATCHSIZE + SCRATCHSIZE=$(($SCRATCHSIZE*1024*1024*1024)) fi -DIALOGSTR=$DIALOGSTR" Size: $SCRATCHSIZE Bytes ($GBSIZE GB)\n Creating SCRATCH partiton...\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 -parted -s /dev/$CHOSENDISK mkpart primary $LASTPARTITION"m" $(($LASTPARTITION+$SCRATCHSIZE/1024))m && LASTPARTITION=$(($LASTPARTITION+$SCRATCHSIZE/1024)) -sfdisk --change-id /dev/$CHOSENDISK 1 $SCRATCHID > /dev/null -DIALOGSTR=$DIALOGSTR"Done.\n\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 - -# HOME -DIALOGSTR=$DIALOGSTR"HOME\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 + test $HOMEID if [ $? -eq 1 ]; then HOMEID=$DEFHOMEID fi -DIALOGSTR=$DIALOGSTR" ID: $HOMEID\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 + test $HOMESIZE if [ $? -eq 1 ]; then - GBSIZE=$DEFPARTSIZE - HOMESIZE=$(($DEFPARTSIZE*1024*1024)) + HOMESIZEGB=$DEFPARTSIZE + HOMESIZE=$(($DEFPARTSIZE*1024*1024*1024)) else - GBSIZE=$HOMESIZE - HOMESIZE=$(($HOMESIZE*1024*1024)) + HOMESIZEGB=$HOMESIZE + HOMESIZE=$(($HOMESIZE*1024*1024*1024)) fi -DIALOGSTR=$DIALOGSTR" Size: $HOMESIZE Bytes ($GBSIZE GB)\n Creating HOME partiton...\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 -parted -s /dev/$CHOSENDISK mkpart primary $LASTPARTITION"m" $(($LASTPARTITION+$HOMESIZE/1024))m && LASTPARTITION=$(($LASTPARTITION+$HOMESIZE/1024)) -sfdisk --change-id /dev/$CHOSENDISK 2 $HOMEID > /dev/null -DIALOGSTR=$DIALOGSTR"Done.\n\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 - -# DNBD3 -DIALOGSTR=$DIALOGSTR"DNBD3\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 + test $DNBD3ID if [ $? -eq 1 ]; then DNBD3ID=$DEFDNBD3ID fi -DIALOGSTR=$DIALOGSTR" ID: $DNBD3ID\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 + test $DNBD3SIZE if [ $? -eq 1 ]; then - GBSIZE=$DEFPARTSIZE - DNBD3SIZE=$(($DEFPARTSIZE*1024*1024)) + DNBD3SIZEGB=$DEFPARTSIZE + DNBD3SIZE=$(($DEFPARTSIZE*1024*1024*1024)) else - GBSIZE=$DNBD3SIZE - DNBD3SIZE=$(($DNBD3SIZE*1024*1024)) + DNBD3SIZEGB=$DNBD3SIZE + DNBD3SIZE=$(($DNBD3SIZE*1024*1024*1024)) fi -DIALOGSTR=$DIALOGSTR" Size: $DNBD3SIZE Bytes ($GBSIZE GB)\n Creating DNBD3 partiton...\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 -parted -s /dev/$CHOSENDISK mkpart primary $LASTPARTITION"m" $(($LASTPARTITION+$DNBD3SIZE/1024))m && LASTPARTITION=$(($LASTPARTITION+$DNBD3SIZE/1024)) -sfdisk --change-id /dev/$CHOSENDISK 3 $DNBD3ID > /dev/null -DIALOGSTR=$DIALOGSTR"Done.\n\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 - -# BOOT -DIALOGSTR=$DIALOGSTR"BOOT\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 + test $BOOTID if [ $? -eq 1 ]; then BOOTID=$DEFBOOTID fi -DIALOGSTR=$DIALOGSTR" ID: $BOOTID\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 + test $BOOTSIZE if [ $? -eq 1 ]; then - GBSIZE=$DEFPARTSIZE - BOOTSIZE=$(($DEFPARTSIZE*1024*1024)) + BOOTSIZEGB=$DEFPARTSIZE + BOOTSIZE=$(($DEFPARTSIZE*1024*1024*1024)) else - GBSIZE=$BOOTSIZE - BOOTSIZE=$(($BOOTSIZE*1024*1024)) + BOOTSIZEGB=$BOOTSIZE + BOOTSIZE=$(($BOOTSIZE*1024*1024*1024)) fi -DIALOGSTR=$DIALOGSTR" Size: $BOOTSIZE Bytes ($GBSIZE GB)\n Creating BOOT partiton...\n" -dialog --keep-window --infobox "$DIALOGSTR" 30 50 -parted -s /dev/$CHOSENDISK mkpart primary $LASTPARTITION"m" $(($LASTPARTITION+$BOOTSIZE/1024))m set 4 boot on && LASTPARTITION=$(($LASTPARTITION+$BOOTSIZE/1024)) -sfdisk --change-id /dev/$CHOSENDISK 4 $BOOTID > /dev/null -DIALOGSTR=$DIALOGSTR"Done.\n\n" -dialog --and-widget --msgbox "$DIALOGSTR" 30 50 \ No newline at end of file + +# constructing the sfdisk input file +START1=$((1*1024*1024/$SECTORSIZE)) +SIZE1=$(($SCRATCHSIZE/$SECTORSIZE)) + +START2=$(($START1+$SIZE1)) +SIZE2=$(($HOMESIZE/$SECTORSIZE)) + +START3=$(($START2+$SIZE2)) +SIZE3=$(($DNBD3SIZE/$SECTORSIZE)) + +START4=$(($START3+$SIZE3)) +SIZE4=$(($BOOTSIZE/$SECTORSIZE)) + +echo "unit: sectors + +/dev/"$CHOSENDISK"1 : start= "$START1", size= "$SIZE1", Id= "$SCRATCHID" +/dev/"$CHOSENDISK"2 : start= "$START2", size= "$SIZE2", Id= "$HOMEID" +/dev/"$CHOSENDISK"3 : start= "$START3", size= "$SIZE3", Id= "$DNBD3ID" +/dev/"$CHOSENDISK"4 : start= "$START4", size= "$SIZE4", Id= "$BOOTID, bootable" +" > /tmp/emptydisk.tmp +sfdisk -q /dev/$CHOSENDISK < /tmp/emptydisk.tmp > /dev/null +rm -f /tmp/emptydisk.tmp + +# constructing dialog message +DIALOGSTR="New partitions created:\n\n" +DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$CHOSENDISK"1)\n" +DIALOGSTR=$DIALOGSTR" ID: $SCRATCHID\n" +DIALOGSTR=$DIALOGSTR" Size: $SCRATCHSIZE Bytes ($SCRATCHSIZEGB GB)\n" +DIALOGSTR=$DIALOGSTR"HOME ("/dev/$CHOSENDISK"2)\n" +DIALOGSTR=$DIALOGSTR" ID: $HOMEID\n" +DIALOGSTR=$DIALOGSTR" Size: $HOMESIZE Bytes ($HOMESIZEGB GB)\n" +DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$CHOSENDISK"3)\n" +DIALOGSTR=$DIALOGSTR" ID: $DNBD3ID\n" +DIALOGSTR=$DIALOGSTR" Size: $DNBD3SIZE Bytes ($DNBD3SIZEGB GB)\n" +DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$CHOSENDISK"4)\n" +DIALOGSTR=$DIALOGSTR" ID: $BOOTID\n" +DIALOGSTR=$DIALOGSTR" Size: $BOOTSIZE Bytes ($BOOTSIZEGB GB)\n" + +dialog --msgbox "$DIALOGSTR" 0 0 \ No newline at end of file -- cgit v1.2.3-55-g7522 From d24bf20175538211fb1c55c733a783ef2250a4bb Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Wed, 9 Jul 2014 16:03:25 -0300 Subject: [partitioner] added support to GTP and other few improvements. --- remote/modules/partitioner/config | 1 + remote/modules/partitioner/partitioner.sh | 233 ++++++++++++++++++------------ 2 files changed, 141 insertions(+), 93 deletions(-) diff --git a/remote/modules/partitioner/config b/remote/modules/partitioner/config index e8a31fe2..bb69d43e 100644 --- a/remote/modules/partitioner/config +++ b/remote/modules/partitioner/config @@ -1,5 +1,6 @@ #PARTITIONER +PARTITIONTYPE=GPT CHOSENDISK=sda SCRATCHID=44 diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh index ad4becc3..19d594a1 100755 --- a/remote/modules/partitioner/partitioner.sh +++ b/remote/modules/partitioner/partitioner.sh @@ -2,40 +2,96 @@ PARTITIONSPATH="/proc/partitions" CONFIGPATH="./config" -DEFPARTSIZE=5 #in GB +DEFPARTSIZE=2 #in GB DEFSCRATCHID=44 DEFHOMEID=45 DEFDNBD3ID=46 DEFBOOTID=47 +# BLOCKSIZE=$(sfdisk -l /dev/$CHOSENDISK | grep -o -e "blocks of [0-9]* bytes" | cut -d ' ' -f3) +BLOCKSIZE=1024 + . $CONFIGPATH +# testing if the sizes and ID's of the disk is defined in the config file +test $SCRATCHID +if [ $? -eq 1 ]; then + SCRATCHID=$DEFSCRATCHID +fi +test $SCRATCHSIZE +if [ $? -eq 1 ]; then + SCRATCHSIZEGB=$DEFPARTSIZE + SCRATCHSIZE=$(($DEFPARTSIZE*1024*1024*1024)) +else + SCRATCHSIZEGB=$SCRATCHSIZE + SCRATCHSIZE=$(($SCRATCHSIZE*1024*1024*1024)) +fi + +test $HOMEID +if [ $? -eq 1 ]; then + HOMEID=$DEFHOMEID +fi +test $HOMESIZE +if [ $? -eq 1 ]; then + HOMESIZEGB=$DEFPARTSIZE + HOMESIZE=$(($DEFPARTSIZE*1024*1024*1024)) +else + HOMESIZEGB=$HOMESIZE + HOMESIZE=$(($HOMESIZE*1024*1024*1024)) +fi + +test $DNBD3ID +if [ $? -eq 1 ]; then + DNBD3ID=$DEFDNBD3ID +fi +test $DNBD3SIZE +if [ $? -eq 1 ]; then + DNBD3SIZEGB=$DEFPARTSIZE + DNBD3SIZE=$(($DEFPARTSIZE*1024*1024*1024)) +else + DNBD3SIZEGB=$DNBD3SIZE + DNBD3SIZE=$(($DNBD3SIZE*1024*1024*1024)) +fi + +test $BOOTID +if [ $? -eq 1 ]; then + BOOTID=$DEFBOOTID +fi +test $BOOTSIZE +if [ $? -eq 1 ]; then + BOOTSIZEGB=$DEFPARTSIZE + BOOTSIZE=$(($DEFPARTSIZE*1024*1024*1024)) +else + BOOTSIZEGB=$BOOTSIZE + BOOTSIZE=$(($BOOTSIZE*1024*1024*1024)) +fi + # picking disk that will be used +DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") +test $DISKS 2> /dev/null +if [ $? -eq 1 ]; then + dialog --msgbox "ERROR: Can't find an hard disk." 5 40 + return 1 +fi test $CHOSENDISK if [ $? -eq 1 ]; then - DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") - test $DISKS 2> /dev/null - if [ $? -eq 1 ]; then - dialog --msgbox "ERROR: Can't find an hard disk." 5 40 - return 1 - fi DIALOGSTR="This computer has the following partitions:\n" for disk in $DISKS; do - DISKSIZE=$(cat $PARTITIONSPATH | grep -e $disk$ | tr -s ' ' | cut -d ' ' -f4) + DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $disk$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) PARTS=$(cat $PARTITIONSPATH | grep -e $disk[0-9] | tr -s ' ' | cut -d ' ' -f5) - GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024" | bc -l) + GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) DIALOGSTR=$DIALOGSTR"$disk $DISKSIZE Bytes ($GBSIZE GB)\n" USED=0 for PART in $PARTS; do - PARTSIZE=$(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4) + PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*1024)) USED=$(($USED+$PARTSIZE)) - GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024" | bc -l) + GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" done DIALOGSTR=$DIALOGSTR" ----------\n" FREESPACE=$(($DISKSIZE-$USED)) - GBSIZE=$(echo "scale=2; $USED/1024/1024" | bc -l) + GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" - GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024" | bc -l) + GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" done @@ -63,23 +119,43 @@ if [ $? -eq 1 ]; then fi fi +DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $CHOSENDISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) +echo "$DISKSIZE -lt $(($SCRATCHSIZE+$HOMESIZE+$DNBD3SIZE+$BOOTSIZE+4*1024*1024))" +if [ $DISKSIZE -lt $(($SCRATCHSIZE+$HOMESIZE+$DNBD3SIZE+$BOOTSIZE+4*1024*1024)) ]; then + dialog --msgbox "ERROR: Insufficient space in disk /dev/$CHOSENDISK." 6 40 + return 1 +fi + +# choosing the partition type (MSDOS or GPT) if it wasn't set in config file +test $PARTITIONTYPE +if [ $? -eq 1 ]; then + ANS=$(dialog --no-tags --menu "Choose the partitions type" 0 0 0 "1" " MSDOS " "2" " GPT " 3>&1 1>&2 2>&3) + if [ $? -eq 1 ]; then + return 1 + fi + if [ $ANS -eq 1 ]; then + PARTITIONTYPE=MSDOS + else + PARTITIONTYPE=GPT + fi +fi + # asking confirmation to create the partitions -DISKSIZE=$(cat $PARTITIONSPATH | grep -e $CHOSENDISK$ | tr -s ' ' | cut -d ' ' -f4) -GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024" | bc -l) +GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) DIALOGSTR="$CHOSENDISK $DISKSIZE Bytes ($GBSIZE GB)\n" PARTS=$(cat $PARTITIONSPATH | grep -e $CHOSENDISK[0-9] | tr -s ' ' | cut -d ' ' -f5) USED=0 for PART in $PARTS; do - PARTSIZE=$(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4) + PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) USED=$(($USED+$PARTSIZE)) - GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024" | bc -l) + GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" done DIALOGSTR=$DIALOGSTR" ----------\n" FREESPACE=$(($DISKSIZE-$USED)) -GBSIZE=$(echo "scale=2; $USED/1024/1024" | bc -l) +GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" -GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024" | bc -l) +GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" DIALOGSTR=$DIALOGSTR"All /dev/$CHOSENDISK partitions will be deleted, ok?" @@ -89,64 +165,12 @@ if [ $? -eq 1 ]; then fi # pick the size of a sector (usually 512 bytes) -SECTORSIZE=$(sfdisk /dev/$CHOSENDISK -l -u S 2> /dev/null | grep Units | cut -d ' ' -f5) +# SECTORSIZE=$(sfdisk /dev/$CHOSENDISK -l -u S 2> /dev/null | grep Units | cut -d ' ' -f5) +SECTORSIZE=512 -# testing if the sizes and ID's of the disk is defined in the config file -test $SCRATCHID -if [ $? -eq 1 ]; then - SCRATCHID=$DEFSCRATCHID -fi - -test $SCRATCHSIZE -if [ $? -eq 1 ]; then - SCRATCHSIZEGB=$DEFPARTSIZE - SCRATCHSIZE=$(($DEFPARTSIZE*1024*1024*1024)) -else - SCRATCHSIZEGB=$SCRATCHSIZE - SCRATCHSIZE=$(($SCRATCHSIZE*1024*1024*1024)) -fi - -test $HOMEID -if [ $? -eq 1 ]; then - HOMEID=$DEFHOMEID -fi - -test $HOMESIZE -if [ $? -eq 1 ]; then - HOMESIZEGB=$DEFPARTSIZE - HOMESIZE=$(($DEFPARTSIZE*1024*1024*1024)) -else - HOMESIZEGB=$HOMESIZE - HOMESIZE=$(($HOMESIZE*1024*1024*1024)) -fi - -test $DNBD3ID -if [ $? -eq 1 ]; then - DNBD3ID=$DEFDNBD3ID -fi - -test $DNBD3SIZE -if [ $? -eq 1 ]; then - DNBD3SIZEGB=$DEFPARTSIZE - DNBD3SIZE=$(($DEFPARTSIZE*1024*1024*1024)) -else - DNBD3SIZEGB=$DNBD3SIZE - DNBD3SIZE=$(($DNBD3SIZE*1024*1024*1024)) -fi - -test $BOOTID -if [ $? -eq 1 ]; then - BOOTID=$DEFBOOTID -fi - -test $BOOTSIZE -if [ $? -eq 1 ]; then - BOOTSIZEGB=$DEFPARTSIZE - BOOTSIZE=$(($DEFPARTSIZE*1024*1024*1024)) -else - BOOTSIZEGB=$BOOTSIZE - BOOTSIZE=$(($BOOTSIZE*1024*1024*1024)) -fi +# delete partition table +echo "apaga" +sgdisk -Z /dev/$CHOSENDISK > /dev/null 2> /dev/null # constructing the sfdisk input file START1=$((1*1024*1024/$SECTORSIZE)) @@ -161,29 +185,52 @@ SIZE3=$(($DNBD3SIZE/$SECTORSIZE)) START4=$(($START3+$SIZE3)) SIZE4=$(($BOOTSIZE/$SECTORSIZE)) +echo "cria sfdisk" echo "unit: sectors /dev/"$CHOSENDISK"1 : start= "$START1", size= "$SIZE1", Id= "$SCRATCHID" /dev/"$CHOSENDISK"2 : start= "$START2", size= "$SIZE2", Id= "$HOMEID" /dev/"$CHOSENDISK"3 : start= "$START3", size= "$SIZE3", Id= "$DNBD3ID" -/dev/"$CHOSENDISK"4 : start= "$START4", size= "$SIZE4", Id= "$BOOTID, bootable" -" > /tmp/emptydisk.tmp -sfdisk -q /dev/$CHOSENDISK < /tmp/emptydisk.tmp > /dev/null +/dev/"$CHOSENDISK"4 : start= "$START4", size= "$SIZE4", Id= "$BOOTID," bootable + "> /tmp/emptydisk.tmp +sfdisk -q -f /dev/$CHOSENDISK < /tmp/emptydisk.tmp > /dev/null rm -f /tmp/emptydisk.tmp -# constructing dialog message -DIALOGSTR="New partitions created:\n\n" -DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$CHOSENDISK"1)\n" -DIALOGSTR=$DIALOGSTR" ID: $SCRATCHID\n" -DIALOGSTR=$DIALOGSTR" Size: $SCRATCHSIZE Bytes ($SCRATCHSIZEGB GB)\n" -DIALOGSTR=$DIALOGSTR"HOME ("/dev/$CHOSENDISK"2)\n" -DIALOGSTR=$DIALOGSTR" ID: $HOMEID\n" -DIALOGSTR=$DIALOGSTR" Size: $HOMESIZE Bytes ($HOMESIZEGB GB)\n" -DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$CHOSENDISK"3)\n" -DIALOGSTR=$DIALOGSTR" ID: $DNBD3ID\n" -DIALOGSTR=$DIALOGSTR" Size: $DNBD3SIZE Bytes ($DNBD3SIZEGB GB)\n" -DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$CHOSENDISK"4)\n" -DIALOGSTR=$DIALOGSTR" ID: $BOOTID\n" -DIALOGSTR=$DIALOGSTR" Size: $BOOTSIZE Bytes ($BOOTSIZEGB GB)\n" +if [ $PARTITIONTYPE = GPT ]; then + echo "converte e aplica GUID" + sgdisk -g /dev/$CHOSENDISK\ + -t 1:"$SCRATCHID"000000-0000-0000-0000-000000000000\ + -t 2:"$HOMEID"000000-0000-0000-0000-000000000000\ + -t 3:"$DNBD3ID"000000-0000-0000-0000-000000000000\ + -t 4:"$BOOTID"000000-0000-0000-0000-000000000000 > /dev/null + + DIALOGSTR="New partitions created:\n\n" + DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$CHOSENDISK"1)\n" + DIALOGSTR=$DIALOGSTR" GUID: "$SCRATCHID"000000-0000-0000-0000-000000000000\n" + DIALOGSTR=$DIALOGSTR" Size: $SCRATCHSIZE Bytes ($SCRATCHSIZEGB GB)\n" + DIALOGSTR=$DIALOGSTR"HOME ("/dev/$CHOSENDISK"2)\n" + DIALOGSTR=$DIALOGSTR" GUID: "$HOMEID"000000-0000-0000-0000-000000000000\n" + DIALOGSTR=$DIALOGSTR" Size: $HOMESIZE Bytes ($HOMESIZEGB GB)\n" + DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$CHOSENDISK"3)\n" + DIALOGSTR=$DIALOGSTR" GUID: "$DNBD3ID"000000-0000-0000-0000-000000000000\n" + DIALOGSTR=$DIALOGSTR" Size: $DNBD3SIZE Bytes ($DNBD3SIZEGB GB)\n" + DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$CHOSENDISK"4)\n" + DIALOGSTR=$DIALOGSTR" GUID: "$BOOTID"000000-0000-0000-0000-000000000000\n" + DIALOGSTR=$DIALOGSTR" Size: $BOOTSIZE Bytes ($BOOTSIZEGB GB)\n" +else + DIALOGSTR="New partitions created:\n\n" + DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$CHOSENDISK"1)\n" + DIALOGSTR=$DIALOGSTR" ID: $SCRATCHID\n" + DIALOGSTR=$DIALOGSTR" Size: $SCRATCHSIZE Bytes ($SCRATCHSIZEGB GB)\n" + DIALOGSTR=$DIALOGSTR"HOME ("/dev/$CHOSENDISK"2)\n" + DIALOGSTR=$DIALOGSTR" ID: $HOMEID\n" + DIALOGSTR=$DIALOGSTR" Size: $HOMESIZE Bytes ($HOMESIZEGB GB)\n" + DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$CHOSENDISK"3)\n" + DIALOGSTR=$DIALOGSTR" ID: $DNBD3ID\n" + DIALOGSTR=$DIALOGSTR" Size: $DNBD3SIZE Bytes ($DNBD3SIZEGB GB)\n" + DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$CHOSENDISK"4)\n" + DIALOGSTR=$DIALOGSTR" ID: $BOOTID\n" + DIALOGSTR=$DIALOGSTR" Size: $BOOTSIZE Bytes ($BOOTSIZEGB GB)\n" +fi dialog --msgbox "$DIALOGSTR" 0 0 \ No newline at end of file -- cgit v1.2.3-55-g7522 From 204407a78146bf002f86b5002764201619d929db Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Thu, 10 Jul 2014 10:30:54 -0300 Subject: [partitioner] using extended partitions --- remote/modules/partitioner/dialog.sh | 38 ------------------------------- remote/modules/partitioner/partitioner.sh | 16 ++++++------- remote/modules/partitioner/partitions | 17 -------------- 3 files changed, 8 insertions(+), 63 deletions(-) delete mode 100755 remote/modules/partitioner/dialog.sh delete mode 100644 remote/modules/partitioner/partitions diff --git a/remote/modules/partitioner/dialog.sh b/remote/modules/partitioner/dialog.sh deleted file mode 100755 index 45b122c5..00000000 --- a/remote/modules/partitioner/dialog.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh - -PARTITIONSPATH="/proc/partitions" -CONFIGPATH="./config" -DEFPARTSIZE=5 #in GB -DEFSCRATCHID=44 -DEFHOMEID=45 -DEFDNBD3ID=46 -DEFBOOTID=47 - -. $CONFIGPATH -# picking disk that will be used -test $CHOSENDISK -if [ $? -eq 1 ]; then - DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") - STR="This computer has the following partitions:\n" - for disk in $DISKS; do - DISKSIZE=$(cat $PARTITIONSPATH | grep -e $disk$ | tr -s ' ' | cut -d ' ' -f4) - PARTS=$(cat $PARTITIONSPATH | grep -e $disk[0-9] | tr -s ' ' | cut -d ' ' -f5) - GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024" | bc -l) - STR=$STR"$disk $DISKSIZE Bytes ($GBSIZE GB)\n" - USED=0 - for PART in $PARTS; do - PARTSIZE=$(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4) - USED=$(($USED+$PARTSIZE)) - GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024" | bc -l) - STR=$STR" $PART $PARTSIZE ($GBSIZE GB)\n" - done - STR=$STR" ----------\n" - FREESPACE=$(($DISKSIZE-$USED)) - GBSIZE=$(echo "scale=2; $USED/1024/1024" | bc -l) - STR=$STR" Used $USED ($GBSIZE GB)\n" - GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024" | bc -l) - STR=$STR" Free $FREESPACE ($GBSIZE GB)\n\n" - done -fi -# echo $STR -CHOSENDISK=$(dialog --no-collapse --cr-wrap --inputbox "$STR" 0 0 $(echo $DISKS | cut -f1) 3>&1 1>&2 2>&3) diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh index 19d594a1..122eabd6 100755 --- a/remote/modules/partitioner/partitioner.sh +++ b/remote/modules/partitioner/partitioner.sh @@ -169,7 +169,6 @@ fi SECTORSIZE=512 # delete partition table -echo "apaga" sgdisk -Z /dev/$CHOSENDISK > /dev/null 2> /dev/null # constructing the sfdisk input file @@ -183,21 +182,22 @@ START3=$(($START2+$SIZE2)) SIZE3=$(($DNBD3SIZE/$SECTORSIZE)) START4=$(($START3+$SIZE3)) -SIZE4=$(($BOOTSIZE/$SECTORSIZE)) -echo "cria sfdisk" +START5=$(($START4+$START1)) +SIZE5=$(($BOOTSIZE/$SECTORSIZE)) + echo "unit: sectors /dev/"$CHOSENDISK"1 : start= "$START1", size= "$SIZE1", Id= "$SCRATCHID" /dev/"$CHOSENDISK"2 : start= "$START2", size= "$SIZE2", Id= "$HOMEID" /dev/"$CHOSENDISK"3 : start= "$START3", size= "$SIZE3", Id= "$DNBD3ID" -/dev/"$CHOSENDISK"4 : start= "$START4", size= "$SIZE4", Id= "$BOOTID," bootable - "> /tmp/emptydisk.tmp -sfdisk -q -f /dev/$CHOSENDISK < /tmp/emptydisk.tmp > /dev/null -rm -f /tmp/emptydisk.tmp +/dev/"$CHOSENDISK"4 : start= "$START4", size= "$(($DISKSIZE/512-1))", Id= 5 +/dev/"$CHOSENDISK"4 : start= "$START5", size= "$SIZE5", Id= "$BOOTID", bootable + "> /tmp/partitiontable.tmp +sfdisk -q -f /dev/$CHOSENDISK < /tmp/partitiontable.tmp > /dev/null +rm -f /tmp/partitiontable.tmp if [ $PARTITIONTYPE = GPT ]; then - echo "converte e aplica GUID" sgdisk -g /dev/$CHOSENDISK\ -t 1:"$SCRATCHID"000000-0000-0000-0000-000000000000\ -t 2:"$HOMEID"000000-0000-0000-0000-000000000000\ diff --git a/remote/modules/partitioner/partitions b/remote/modules/partitioner/partitions deleted file mode 100644 index 8ec007ff..00000000 --- a/remote/modules/partitioner/partitions +++ /dev/null @@ -1,17 +0,0 @@ -major minor #blocks name - - 8 0 488386584 sda - 8 1 1 sda1 - 8 2 27343872 sda2 - 8 3 45898437 sda3 - 8 4 52928512 sda4 - 8 5 345713664 sda5 - 8 6 8226816 sda6 - 11 0 1048575 sr0 - 8 0 386584 sdb - 8 1 1 sdb1 - 8 2 343872 sdb2 - 8 3 45898437 sdb3 - 8 0 1838584 vda - 8 1 1 vda1 - 8 2 27343872 vda2 \ No newline at end of file -- cgit v1.2.3-55-g7522 From 08479c79bb325fc99bac25126901dc0bcba43242 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Thu, 10 Jul 2014 12:47:47 -0300 Subject: [partitioner] adapting script to the new config file. not working yet. --- remote/modules/partitioner/config | 26 ++-- remote/modules/partitioner/partitioner.sh | 214 +++++++++++++----------------- 2 files changed, 105 insertions(+), 135 deletions(-) diff --git a/remote/modules/partitioner/config b/remote/modules/partitioner/config index bb69d43e..2d547e1e 100644 --- a/remote/modules/partitioner/config +++ b/remote/modules/partitioner/config @@ -1,16 +1,10 @@ -#PARTITIONER - -PARTITIONTYPE=GPT -CHOSENDISK=sda - -SCRATCHID=44 -SCRATCHSIZE=1 - -HOMEID=45 -HOMESIZE=2 - -DNBD3ID=46 -DNBD3SIZE=3 - -BOOTID=47 -BOOTSIZE=4 \ No newline at end of file +#Partitions +SLX_PARTITION_TYPE={GPT|msdos} #Create GPT or msdos style partition table +SLX_CHOOSEN_DISK={sda} #Choose disk to partition +SLX_AUTOMATIC_PARTITIONING={yes|no} #Don't be interactive, use carefully +SLX_OVERRIDE_PARTITIONS={yes|no} #Override existing partitions +SLX_PARTITION_TABLE=' #Partition table in the format: ID,Size,Mountpoint,Bootable +44,10G,/tmp +43,10G,/boot,bootable +42,10G,/cache +41,10G,/home' \ No newline at end of file diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh index 122eabd6..6f0a76e1 100755 --- a/remote/modules/partitioner/partitioner.sh +++ b/remote/modules/partitioner/partitioner.sh @@ -2,68 +2,31 @@ PARTITIONSPATH="/proc/partitions" CONFIGPATH="./config" -DEFPARTSIZE=2 #in GB -DEFSCRATCHID=44 -DEFHOMEID=45 -DEFDNBD3ID=46 -DEFBOOTID=47 # BLOCKSIZE=$(sfdisk -l /dev/$CHOSENDISK | grep -o -e "blocks of [0-9]* bytes" | cut -d ' ' -f3) BLOCKSIZE=1024 . $CONFIGPATH # testing if the sizes and ID's of the disk is defined in the config file -test $SCRATCHID -if [ $? -eq 1 ]; then - SCRATCHID=$DEFSCRATCHID -fi -test $SCRATCHSIZE -if [ $? -eq 1 ]; then - SCRATCHSIZEGB=$DEFPARTSIZE - SCRATCHSIZE=$(($DEFPARTSIZE*1024*1024*1024)) -else - SCRATCHSIZEGB=$SCRATCHSIZE - SCRATCHSIZE=$(($SCRATCHSIZE*1024*1024*1024)) -fi - -test $HOMEID -if [ $? -eq 1 ]; then - HOMEID=$DEFHOMEID -fi -test $HOMESIZE -if [ $? -eq 1 ]; then - HOMESIZEGB=$DEFPARTSIZE - HOMESIZE=$(($DEFPARTSIZE*1024*1024*1024)) -else - HOMESIZEGB=$HOMESIZE - HOMESIZE=$(($HOMESIZE*1024*1024*1024)) -fi -test $DNBD3ID -if [ $? -eq 1 ]; then - DNBD3ID=$DEFDNBD3ID -fi -test $DNBD3SIZE -if [ $? -eq 1 ]; then - DNBD3SIZEGB=$DEFPARTSIZE - DNBD3SIZE=$(($DEFPARTSIZE*1024*1024*1024)) -else - DNBD3SIZEGB=$DNBD3SIZE - DNBD3SIZE=$(($DNBD3SIZE*1024*1024*1024)) +declare -A PARTTBL +COUNTER=1 +if [ -n "$SLX_PARTITION_TABLE" ]; then + for PARTITION in $SLX_PARTITION_TABLE; do + IFS=, + set $PARTITION + if [ $COUNTER -eq 4 ]; then + COUNTER=$((COUNTER+1)) + fi + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/id"]=$1 + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$3 + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=$4 + COUNTER=$(($COUNTER+1)) + done fi -test $BOOTID -if [ $? -eq 1 ]; then - BOOTID=$DEFBOOTID -fi -test $BOOTSIZE -if [ $? -eq 1 ]; then - BOOTSIZEGB=$DEFPARTSIZE - BOOTSIZE=$(($DEFPARTSIZE*1024*1024*1024)) -else - BOOTSIZEGB=$BOOTSIZE - BOOTSIZE=$(($BOOTSIZE*1024*1024*1024)) -fi +NPARTS=$(($COUNTER-1)) # picking disk that will be used DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") @@ -72,8 +35,8 @@ if [ $? -eq 1 ]; then dialog --msgbox "ERROR: Can't find an hard disk." 5 40 return 1 fi -test $CHOSENDISK -if [ $? -eq 1 ]; then + +if [ -z "$SLX_CHOOSEN_DISK" ]; then DIALOGSTR="This computer has the following partitions:\n" for disk in $DISKS; do DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $disk$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) @@ -97,138 +60,151 @@ if [ $? -eq 1 ]; then if [ $(echo $DISKS | tr ' ' \\n | wc -l) -gt 1 ]; then DIALOGSTR=$DIALOGSTR"Which of these disks you want to use?\n" - CHOSENDISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) + SLX_CHOOSEN_DISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) if [ $? -eq 1 ]; then return 1; fi - echo $DISKS | tr ' ' \\n | grep -e ^$CHOSENDISK$ > /dev/null 2>/dev/null + echo $DISKS | tr ' ' \\n | grep -e ^$SLX_CHOOSEN_DISK$ > /dev/null 2>/dev/null while [ $? -ne 0 ]; do dialog --msgbox "Invalid option.\nTry again." 0 0 - CHOSENDISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) + SLX_CHOOSEN_DISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) if [ $? -eq 1 ]; then return 1; fi - echo $DISKS | tr ' ' \\n | grep -e ^$CHOSENDISK$ > /dev/null 2>/dev/null + echo $DISKS | tr ' ' \\n | grep -e ^$SLX_CHOOSEN_DISK$ > /dev/null 2>/dev/null done # ask a confirmation (all your data will be lost etc) elif [ $(echo $DISKS | tr ' ' \\n | wc -l) -eq 1 ]; then - CHOSENDISK=$(echo $DISKS | tr ' ' \\n | head -n1) + SLX_CHOOSEN_DISK=$(echo $DISKS | tr ' ' \\n | head -n1) else dialog --msgbox "ERROR: Can't find an hard disk." 5 40 return 1 fi fi -DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $CHOSENDISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) -echo "$DISKSIZE -lt $(($SCRATCHSIZE+$HOMESIZE+$DNBD3SIZE+$BOOTSIZE+4*1024*1024))" -if [ $DISKSIZE -lt $(($SCRATCHSIZE+$HOMESIZE+$DNBD3SIZE+$BOOTSIZE+4*1024*1024)) ]; then - dialog --msgbox "ERROR: Insufficient space in disk /dev/$CHOSENDISK." 6 40 +DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) +PARTSSIZE=0 +for (( i = 1; i <= $NPARTS; i++ )); do + PARTSSIZE=$PARTSSIZE+$PARTTBL["$SLX_CHOOSEN_DISK$i/size"] +done + +echo "$DISKSIZE -lt $(($PARTSSIZE*1024*1024*1024+$NPARTS*1024*1024))" +if [ $DISKSIZE -lt $(($PARTSSIZE*1024*1024*1024+$NPARTS*1024*1024)) ]; then + dialog --msgbox "ERROR: Insufficient space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 return 1 fi # choosing the partition type (MSDOS or GPT) if it wasn't set in config file -test $PARTITIONTYPE -if [ $? -eq 1 ]; then +if [ -z "$SLX_PARTITION_TYPE" ]; then + SLX_PARTITION_TYPE=msdos ANS=$(dialog --no-tags --menu "Choose the partitions type" 0 0 0 "1" " MSDOS " "2" " GPT " 3>&1 1>&2 2>&3) if [ $? -eq 1 ]; then return 1 fi if [ $ANS -eq 1 ]; then - PARTITIONTYPE=MSDOS + SLX_PARTITION_TYPE=msdos else - PARTITIONTYPE=GPT + SLX_PARTITION_TYPE=GPT fi fi # asking confirmation to create the partitions -GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) -DIALOGSTR="$CHOSENDISK $DISKSIZE Bytes ($GBSIZE GB)\n" -PARTS=$(cat $PARTITIONSPATH | grep -e $CHOSENDISK[0-9] | tr -s ' ' | cut -d ' ' -f5) -USED=0 -for PART in $PARTS; do - PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) - USED=$(($USED+$PARTSIZE)) - GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" -done -DIALOGSTR=$DIALOGSTR" ----------\n" -FREESPACE=$(($DISKSIZE-$USED)) -GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) -DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" -GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) -DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" -DIALOGSTR=$DIALOGSTR"All /dev/$CHOSENDISK partitions will be deleted, ok?" - -dialog --defaultno --yesno "$DIALOGSTR" 0 0 -if [ $? -eq 1 ]; then - return 1 +if [ $SLX_AUTOMATIC_PARTITIONING = "no" ]; then + GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) + DIALOGSTR="$SLX_CHOOSEN_DISK $DISKSIZE Bytes ($GBSIZE GB)\n" + PARTS=$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK[0-9] | tr -s ' ' | cut -d ' ' -f5) + USED=0 + for PART in $PARTS; do + PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) + USED=$(($USED+$PARTSIZE)) + GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) + DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" + done + DIALOGSTR=$DIALOGSTR" ----------\n" + FREESPACE=$(($DISKSIZE-$USED)) + GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) + DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" + GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) + DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" + DIALOGSTR=$DIALOGSTR"All /dev/$SLX_CHOOSEN_DISK partitions will be deleted, ok?" + + dialog --defaultno --yesno "$DIALOGSTR" 0 0 + if [ $? -eq 1 ]; then + return 1 + fi fi # pick the size of a sector (usually 512 bytes) -# SECTORSIZE=$(sfdisk /dev/$CHOSENDISK -l -u S 2> /dev/null | grep Units | cut -d ' ' -f5) +# SECTORSIZE=$(sfdisk /dev/$SLX_CHOOSEN_DISK -l -u S 2> /dev/null | grep Units | cut -d ' ' -f5) SECTORSIZE=512 # delete partition table -sgdisk -Z /dev/$CHOSENDISK > /dev/null 2> /dev/null +if [ $SLX_OVERRIDE_PARTITIONS = "yes" ]; then + sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2> /dev/null +fi # constructing the sfdisk input file -START1=$((1*1024*1024/$SECTORSIZE)) -SIZE1=$(($SCRATCHSIZE/$SECTORSIZE)) - START2=$(($START1+$SIZE1)) SIZE2=$(($HOMESIZE/$SECTORSIZE)) -START3=$(($START2+$SIZE2)) -SIZE3=$(($DNBD3SIZE/$SECTORSIZE)) - -START4=$(($START3+$SIZE3)) - -START5=$(($START4+$START1)) -SIZE5=$(($BOOTSIZE/$SECTORSIZE)) - echo "unit: sectors -/dev/"$CHOSENDISK"1 : start= "$START1", size= "$SIZE1", Id= "$SCRATCHID" -/dev/"$CHOSENDISK"2 : start= "$START2", size= "$SIZE2", Id= "$HOMEID" -/dev/"$CHOSENDISK"3 : start= "$START3", size= "$SIZE3", Id= "$DNBD3ID" -/dev/"$CHOSENDISK"4 : start= "$START4", size= "$(($DISKSIZE/512-1))", Id= 5 -/dev/"$CHOSENDISK"4 : start= "$START5", size= "$SIZE5", Id= "$BOOTID", bootable - "> /tmp/partitiontable.tmp -sfdisk -q -f /dev/$CHOSENDISK < /tmp/partitiontable.tmp > /dev/null +"> /tmp/partitiontable.tmp + +START=$((1*1024*1024/$SECTORSIZE)) +for (( i = 1; i < $NPARTS; i++ )); do + if [ $i -ne 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024/$SECTORSIZE)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]} + if [ -n ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} ]; then + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID", bootable + " >> /tmp/partitiontable.tmp + else + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID" + " >> /tmp/partitiontable.tmp + fi + START=$(($START+$SIZE+1*1024*1024/$SECTORSIZE)) + else + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$(($DISKSIZE/$SECTORSIZE-1))", Id= "5" + " >> /tmp/partitiontable.tmp + START=$(($START+1*1024*1024/$SECTORSIZE)) + fi +done +sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null rm -f /tmp/partitiontable.tmp -if [ $PARTITIONTYPE = GPT ]; then - sgdisk -g /dev/$CHOSENDISK\ +if [ $SLX_PARTITION_TYPE = GPT ]; then + sgdisk -g /dev/$SLX_CHOOSEN_DISK\ -t 1:"$SCRATCHID"000000-0000-0000-0000-000000000000\ -t 2:"$HOMEID"000000-0000-0000-0000-000000000000\ -t 3:"$DNBD3ID"000000-0000-0000-0000-000000000000\ -t 4:"$BOOTID"000000-0000-0000-0000-000000000000 > /dev/null DIALOGSTR="New partitions created:\n\n" - DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$CHOSENDISK"1)\n" + DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$SLX_CHOOSEN_DISK"1)\n" DIALOGSTR=$DIALOGSTR" GUID: "$SCRATCHID"000000-0000-0000-0000-000000000000\n" DIALOGSTR=$DIALOGSTR" Size: $SCRATCHSIZE Bytes ($SCRATCHSIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"HOME ("/dev/$CHOSENDISK"2)\n" + DIALOGSTR=$DIALOGSTR"HOME ("/dev/$SLX_CHOOSEN_DISK"2)\n" DIALOGSTR=$DIALOGSTR" GUID: "$HOMEID"000000-0000-0000-0000-000000000000\n" DIALOGSTR=$DIALOGSTR" Size: $HOMESIZE Bytes ($HOMESIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$CHOSENDISK"3)\n" + DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$SLX_CHOOSEN_DISK"3)\n" DIALOGSTR=$DIALOGSTR" GUID: "$DNBD3ID"000000-0000-0000-0000-000000000000\n" DIALOGSTR=$DIALOGSTR" Size: $DNBD3SIZE Bytes ($DNBD3SIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$CHOSENDISK"4)\n" + DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$SLX_CHOOSEN_DISK"4)\n" DIALOGSTR=$DIALOGSTR" GUID: "$BOOTID"000000-0000-0000-0000-000000000000\n" DIALOGSTR=$DIALOGSTR" Size: $BOOTSIZE Bytes ($BOOTSIZEGB GB)\n" else DIALOGSTR="New partitions created:\n\n" - DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$CHOSENDISK"1)\n" + DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$SLX_CHOOSEN_DISK"1)\n" DIALOGSTR=$DIALOGSTR" ID: $SCRATCHID\n" DIALOGSTR=$DIALOGSTR" Size: $SCRATCHSIZE Bytes ($SCRATCHSIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"HOME ("/dev/$CHOSENDISK"2)\n" + DIALOGSTR=$DIALOGSTR"HOME ("/dev/$SLX_CHOOSEN_DISK"2)\n" DIALOGSTR=$DIALOGSTR" ID: $HOMEID\n" DIALOGSTR=$DIALOGSTR" Size: $HOMESIZE Bytes ($HOMESIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$CHOSENDISK"3)\n" + DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$SLX_CHOOSEN_DISK"3)\n" DIALOGSTR=$DIALOGSTR" ID: $DNBD3ID\n" DIALOGSTR=$DIALOGSTR" Size: $DNBD3SIZE Bytes ($DNBD3SIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$CHOSENDISK"4)\n" + DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$SLX_CHOOSEN_DISK"4)\n" DIALOGSTR=$DIALOGSTR" ID: $BOOTID\n" DIALOGSTR=$DIALOGSTR" Size: $BOOTSIZE Bytes ($BOOTSIZEGB GB)\n" fi -- cgit v1.2.3-55-g7522 From 5e57195dfd036ba97ca05c1145eb592674ea6639 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Fri, 11 Jul 2014 12:13:19 -0300 Subject: [partitioner] lacking NO_OVERRIDE option and AUTOMATIC_PARTITIONING --- remote/modules/partitioner/config | 19 ++-- remote/modules/partitioner/partitioner.sh | 145 +++++++++++++++--------------- 2 files changed, 88 insertions(+), 76 deletions(-) diff --git a/remote/modules/partitioner/config b/remote/modules/partitioner/config index 2d547e1e..f2e20ca8 100644 --- a/remote/modules/partitioner/config +++ b/remote/modules/partitioner/config @@ -1,10 +1,17 @@ #Partitions -SLX_PARTITION_TYPE={GPT|msdos} #Create GPT or msdos style partition table -SLX_CHOOSEN_DISK={sda} #Choose disk to partition -SLX_AUTOMATIC_PARTITIONING={yes|no} #Don't be interactive, use carefully -SLX_OVERRIDE_PARTITIONS={yes|no} #Override existing partitions -SLX_PARTITION_TABLE=' #Partition table in the format: ID,Size,Mountpoint,Bootable +#SLX_PARTITION_TYPE='GPT' +#SLX_CHOOSEN_DISK='sda' +SLX_AUTOMATIC_PARTITIONING='no' +SLX_OVERRIDE_PARTITIONS='no' +SLX_PARTITION_TABLE=' 44,10G,/tmp 43,10G,/boot,bootable 42,10G,/cache -41,10G,/home' \ No newline at end of file +41,10G,/home +40,5G,/teste' + +#Create GPT or msdos style partition table +#Choose disk to partition +#Don't be interactive, use carefully +#Override existing partitions +#Partition table in the format: ID,Size,Mountpoint,Bootable \ No newline at end of file diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh index 6f0a76e1..f03a8b76 100755 --- a/remote/modules/partitioner/partitioner.sh +++ b/remote/modules/partitioner/partitioner.sh @@ -1,4 +1,6 @@ -#!/bin/sh +#!/bin/bash + +set -e PARTITIONSPATH="/proc/partitions" CONFIGPATH="./config" @@ -9,24 +11,6 @@ BLOCKSIZE=1024 . $CONFIGPATH # testing if the sizes and ID's of the disk is defined in the config file -declare -A PARTTBL -COUNTER=1 -if [ -n "$SLX_PARTITION_TABLE" ]; then - for PARTITION in $SLX_PARTITION_TABLE; do - IFS=, - set $PARTITION - if [ $COUNTER -eq 4 ]; then - COUNTER=$((COUNTER+1)) - fi - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/id"]=$1 - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$3 - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=$4 - COUNTER=$(($COUNTER+1)) - done -fi - -NPARTS=$(($COUNTER-1)) # picking disk that will be used DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") @@ -82,14 +66,37 @@ if [ -z "$SLX_CHOOSEN_DISK" ]; then fi fi +declare -A PARTTBL +COUNTER=1 +if [ -n "$SLX_PARTITION_TABLE" ]; then + for PARTITION in $SLX_PARTITION_TABLE; do + IFS=, + set $PARTITION + if [ $COUNTER -eq 4 ]; then + COUNTER=$(($COUNTER+1)) + fi + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/id"]=$1 + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$3 + if [ -e $4 ]; then + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=0 + else + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=1 + fi + COUNTER=$(($COUNTER+1)) + done +fi +unset IFS + + DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) PARTSSIZE=0 -for (( i = 1; i <= $NPARTS; i++ )); do - PARTSSIZE=$PARTSSIZE+$PARTTBL["$SLX_CHOOSEN_DISK$i/size"] +for (( i = 1; i < $COUNTER; i++ )); do + PARTSSIZE=$PARTSSIZE+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]} done -echo "$DISKSIZE -lt $(($PARTSSIZE*1024*1024*1024+$NPARTS*1024*1024))" -if [ $DISKSIZE -lt $(($PARTSSIZE*1024*1024*1024+$NPARTS*1024*1024)) ]; then +echo "$DISKSIZE -lt $(($PARTSSIZE*1024*1024*1024+$COUNTER*1024*1024))" +if [ $DISKSIZE -lt $(($PARTSSIZE*1024*1024*1024+$COUNTER*1024*1024)) ]; then dialog --msgbox "ERROR: Insufficient space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 return 1 fi @@ -140,73 +147,71 @@ SECTORSIZE=512 # delete partition table if [ $SLX_OVERRIDE_PARTITIONS = "yes" ]; then - sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2> /dev/null + : + # sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2> /dev/null fi # constructing the sfdisk input file -START2=$(($START1+$SIZE1)) -SIZE2=$(($HOMESIZE/$SECTORSIZE)) - echo "unit: sectors - "> /tmp/partitiontable.tmp START=$((1*1024*1024/$SECTORSIZE)) -for (( i = 1; i < $NPARTS; i++ )); do +for (( i = 1; i < $COUNTER; i++ )); do if [ $i -ne 4 ]; then SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024/$SECTORSIZE)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]} - if [ -n ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} ]; then - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID", bootable - " >> /tmp/partitiontable.tmp + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID", bootable " >> /tmp/partitiontable.tmp else - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID" - " >> /tmp/partitiontable.tmp + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID >> /tmp/partitiontable.tmp fi START=$(($START+$SIZE+1*1024*1024/$SECTORSIZE)) else - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$(($DISKSIZE/$SECTORSIZE-1))", Id= "5" - " >> /tmp/partitiontable.tmp + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$(($DISKSIZE/$SECTORSIZE-1))", Id= 5" >> /tmp/partitiontable.tmp START=$(($START+1*1024*1024/$SECTORSIZE)) fi done -sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null +# sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null rm -f /tmp/partitiontable.tmp +DIALOGSTR="New partitions created:\n\n" if [ $SLX_PARTITION_TYPE = GPT ]; then - sgdisk -g /dev/$SLX_CHOOSEN_DISK\ - -t 1:"$SCRATCHID"000000-0000-0000-0000-000000000000\ - -t 2:"$HOMEID"000000-0000-0000-0000-000000000000\ - -t 3:"$DNBD3ID"000000-0000-0000-0000-000000000000\ - -t 4:"$BOOTID"000000-0000-0000-0000-000000000000 > /dev/null - - DIALOGSTR="New partitions created:\n\n" - DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$SLX_CHOOSEN_DISK"1)\n" - DIALOGSTR=$DIALOGSTR" GUID: "$SCRATCHID"000000-0000-0000-0000-000000000000\n" - DIALOGSTR=$DIALOGSTR" Size: $SCRATCHSIZE Bytes ($SCRATCHSIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"HOME ("/dev/$SLX_CHOOSEN_DISK"2)\n" - DIALOGSTR=$DIALOGSTR" GUID: "$HOMEID"000000-0000-0000-0000-000000000000\n" - DIALOGSTR=$DIALOGSTR" Size: $HOMESIZE Bytes ($HOMESIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$SLX_CHOOSEN_DISK"3)\n" - DIALOGSTR=$DIALOGSTR" GUID: "$DNBD3ID"000000-0000-0000-0000-000000000000\n" - DIALOGSTR=$DIALOGSTR" Size: $DNBD3SIZE Bytes ($DNBD3SIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$SLX_CHOOSEN_DISK"4)\n" - DIALOGSTR=$DIALOGSTR" GUID: "$BOOTID"000000-0000-0000-0000-000000000000\n" - DIALOGSTR=$DIALOGSTR" Size: $BOOTSIZE Bytes ($BOOTSIZEGB GB)\n" + # sgdisk -g /dev/$SLX_CHOOSEN_DISK\ + # -t 1:"$SCRATCHID"000000-0000-0000-0000-000000000000\ + # -t 2:"$HOMEID"000000-0000-0000-0000-000000000000\ + # -t 3:"$DNBD3ID"000000-0000-0000-0000-000000000000\ + # -t 4:"$BOOTID"000000-0000-0000-0000-000000000000 > /dev/null + + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -ne 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} + DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" + DIALOGSTR=$DIALOGSTR" GUID: "$ID"000000-0000-0000-0000-000000000000\n" + DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" + fi + done else - DIALOGSTR="New partitions created:\n\n" - DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$SLX_CHOOSEN_DISK"1)\n" - DIALOGSTR=$DIALOGSTR" ID: $SCRATCHID\n" - DIALOGSTR=$DIALOGSTR" Size: $SCRATCHSIZE Bytes ($SCRATCHSIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"HOME ("/dev/$SLX_CHOOSEN_DISK"2)\n" - DIALOGSTR=$DIALOGSTR" ID: $HOMEID\n" - DIALOGSTR=$DIALOGSTR" Size: $HOMESIZE Bytes ($HOMESIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$SLX_CHOOSEN_DISK"3)\n" - DIALOGSTR=$DIALOGSTR" ID: $DNBD3ID\n" - DIALOGSTR=$DIALOGSTR" Size: $DNBD3SIZE Bytes ($DNBD3SIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$SLX_CHOOSEN_DISK"4)\n" - DIALOGSTR=$DIALOGSTR" ID: $BOOTID\n" - DIALOGSTR=$DIALOGSTR" Size: $BOOTSIZE Bytes ($BOOTSIZEGB GB)\n" + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -lt 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} + DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" + DIALOGSTR=$DIALOGSTR" Type: Primary\n" + DIALOGSTR=$DIALOGSTR" ID: "$ID"\n" + DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" + elif [ $i -gt 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} + DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" + DIALOGSTR=$DIALOGSTR" Type: Logical\n" + DIALOGSTR=$DIALOGSTR" ID: "$ID"\n" + DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" + fi + done fi dialog --msgbox "$DIALOGSTR" 0 0 \ No newline at end of file -- cgit v1.2.3-55-g7522 From b90c258cb83a2e7e859b6bfe262b0cb039f3363e Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Thu, 7 Aug 2014 12:10:23 -0300 Subject: [partitioner]implementing the detection of existing partitions. --- remote/modules/partitioner/partitioner.sh | 111 +++++++++++++++++++----------- 1 file changed, 72 insertions(+), 39 deletions(-) diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh index f03a8b76..05160630 100755 --- a/remote/modules/partitioner/partitioner.sh +++ b/remote/modules/partitioner/partitioner.sh @@ -14,10 +14,9 @@ BLOCKSIZE=1024 # picking disk that will be used DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") -test $DISKS 2> /dev/null -if [ $? -eq 1 ]; then +if [ -z "$DISKS" ]; then dialog --msgbox "ERROR: Can't find an hard disk." 5 40 - return 1 + exit 1 fi if [ -z "$SLX_CHOOSEN_DISK" ]; then @@ -46,14 +45,15 @@ if [ -z "$SLX_CHOOSEN_DISK" ]; then DIALOGSTR=$DIALOGSTR"Which of these disks you want to use?\n" SLX_CHOOSEN_DISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) if [ $? -eq 1 ]; then - return 1; + exit 1; fi + # verify if the choosen disk is a valid disk echo $DISKS | tr ' ' \\n | grep -e ^$SLX_CHOOSEN_DISK$ > /dev/null 2>/dev/null while [ $? -ne 0 ]; do dialog --msgbox "Invalid option.\nTry again." 0 0 SLX_CHOOSEN_DISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) if [ $? -eq 1 ]; then - return 1; + exit 1; fi echo $DISKS | tr ' ' \\n | grep -e ^$SLX_CHOOSEN_DISK$ > /dev/null 2>/dev/null done @@ -62,10 +62,11 @@ if [ -z "$SLX_CHOOSEN_DISK" ]; then SLX_CHOOSEN_DISK=$(echo $DISKS | tr ' ' \\n | head -n1) else dialog --msgbox "ERROR: Can't find an hard disk." 5 40 - return 1 + exit 1 fi fi +# if SLX_PARTITION_TABLE is set then put his content in a associative array declare -A PARTTBL COUNTER=1 if [ -n "$SLX_PARTITION_TABLE" ]; then @@ -83,22 +84,22 @@ if [ -n "$SLX_PARTITION_TABLE" ]; then else PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=1 fi + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists?"]=0 COUNTER=$(($COUNTER+1)) done fi unset IFS - +# check if the choosen disk is greater than the new partition table size. DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) PARTSSIZE=0 for (( i = 1; i < $COUNTER; i++ )); do PARTSSIZE=$PARTSSIZE+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]} done - echo "$DISKSIZE -lt $(($PARTSSIZE*1024*1024*1024+$COUNTER*1024*1024))" if [ $DISKSIZE -lt $(($PARTSSIZE*1024*1024*1024+$COUNTER*1024*1024)) ]; then dialog --msgbox "ERROR: Insufficient space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 - return 1 + exit 1 fi # choosing the partition type (MSDOS or GPT) if it wasn't set in config file @@ -106,7 +107,7 @@ if [ -z "$SLX_PARTITION_TYPE" ]; then SLX_PARTITION_TYPE=msdos ANS=$(dialog --no-tags --menu "Choose the partitions type" 0 0 0 "1" " MSDOS " "2" " GPT " 3>&1 1>&2 2>&3) if [ $? -eq 1 ]; then - return 1 + exit 1 fi if [ $ANS -eq 1 ]; then SLX_PARTITION_TYPE=msdos @@ -137,7 +138,7 @@ if [ $SLX_AUTOMATIC_PARTITIONING = "no" ]; then dialog --defaultno --yesno "$DIALOGSTR" 0 0 if [ $? -eq 1 ]; then - return 1 + exit 1 fi fi @@ -146,41 +147,73 @@ fi SECTORSIZE=512 # delete partition table -if [ $SLX_OVERRIDE_PARTITIONS = "yes" ]; then - : - # sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2> /dev/null -fi +if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then + # : + sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2> /dev/null -# constructing the sfdisk input file -echo "unit: sectors -"> /tmp/partitiontable.tmp + # constructing the sfdisk input file + echo "unit: sectors + "> /tmp/partitiontable.tmp -START=$((1*1024*1024/$SECTORSIZE)) -for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -ne 4 ]; then - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024/$SECTORSIZE)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID", bootable " >> /tmp/partitiontable.tmp + START=$((1*1024*1024/$SECTORSIZE)) + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -ne 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024/$SECTORSIZE)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID", bootable " >> /tmp/partitiontable.tmp + else + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID >> /tmp/partitiontable.tmp + fi + START=$(($START+$SIZE+1*1024*1024/$SECTORSIZE)) else - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID >> /tmp/partitiontable.tmp + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$(($DISKSIZE/$SECTORSIZE-1))", Id= 5" >> /tmp/partitiontable.tmp + START=$(($START+1*1024*1024/$SECTORSIZE)) fi - START=$(($START+$SIZE+1*1024*1024/$SECTORSIZE)) - else - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$(($DISKSIZE/$SECTORSIZE-1))", Id= 5" >> /tmp/partitiontable.tmp - START=$(($START+1*1024*1024/$SECTORSIZE)) - fi -done -# sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null -rm -f /tmp/partitiontable.tmp + done + sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null + rm -f /tmp/partitiontable.tmp +# stopped here!!! +elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK | grep $SLX_CHOOSEN_DISK'1' | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2) = 'ee' ]; then +# finding existent partitions in GPT + for PART in $PARTS; do + for (( i = 1; i < $(($COUNTER-1)); i++ )); do + if [ $i -ne 4 ]; then + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists?"]} -ne 1 ]; then + sgdisk /dev/$SLX_CHOOSEN_DISK -i $i | grep "unique GUID" | cut -d ' ' -f4 | grep '${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}000000-0000-0000-0000-000000000000' + if [ $? -eq 0 ]; then + echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists?"]=1 + break; + fi + fi + fi + i=$(($i+1)) + done + done +else +# finding existent partitions in MS-DOS + for PART in $PARTS; do + for (( i = 1; i < $(($COUNTER-1)); i++ )); do + if [ $i -ne 4 ]; then + [ sfdisk -d /dev/$SLX_CHOOSEN_DISK | grep $PART | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2 = '${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}' ] + if [ $? -eq 0 ]; then + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists?"]=1 + break; + fi + fi + i=$(($i+1)) + done + done +fi DIALOGSTR="New partitions created:\n\n" if [ $SLX_PARTITION_TYPE = GPT ]; then - # sgdisk -g /dev/$SLX_CHOOSEN_DISK\ - # -t 1:"$SCRATCHID"000000-0000-0000-0000-000000000000\ - # -t 2:"$HOMEID"000000-0000-0000-0000-000000000000\ - # -t 3:"$DNBD3ID"000000-0000-0000-0000-000000000000\ - # -t 4:"$BOOTID"000000-0000-0000-0000-000000000000 > /dev/null + sgdisk -g /dev/$SLX_CHOOSEN_DISK\ + -t 1:"$SCRATCHID"000000-0000-0000-0000-000000000000\ + -t 2:"$HOMEID"000000-0000-0000-0000-000000000000\ + -t 3:"$DNBD3ID"000000-0000-0000-0000-000000000000\ + -t 4:"$BOOTID"000000-0000-0000-0000-000000000000 > /dev/null for (( i = 1; i < $COUNTER; i++ )); do if [ $i -ne 4 ]; then -- cgit v1.2.3-55-g7522 From 9793f89411092cdf1edf8fe05a7187cfe89f5329 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Mon, 11 Aug 2014 12:00:53 -0300 Subject: [partitioner] fixing the fetch of existent GPT partitions. --- remote/modules/partitioner/config | 6 ++-- remote/modules/partitioner/partitioner.sh | 56 ++++++++++++++++++------------- 2 files changed, 36 insertions(+), 26 deletions(-) diff --git a/remote/modules/partitioner/config b/remote/modules/partitioner/config index f2e20ca8..bf34dcca 100644 --- a/remote/modules/partitioner/config +++ b/remote/modules/partitioner/config @@ -1,8 +1,8 @@ #Partitions -#SLX_PARTITION_TYPE='GPT' -#SLX_CHOOSEN_DISK='sda' +SLX_PARTITION_TYPE='GPT' +# SLX_CHOOSEN_DISK='sda' SLX_AUTOMATIC_PARTITIONING='no' -SLX_OVERRIDE_PARTITIONS='no' +SLX_DELETE_PARTITION_TABLE='no' SLX_PARTITION_TABLE=' 44,10G,/tmp 43,10G,/boot,bootable diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh index 05160630..5822851a 100755 --- a/remote/modules/partitioner/partitioner.sh +++ b/remote/modules/partitioner/partitioner.sh @@ -172,25 +172,29 @@ if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then fi done sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null - rm -f /tmp/partitiontable.tmp -# stopped here!!! -elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK | grep $SLX_CHOOSEN_DISK'1' | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2) = 'ee' ]; then + # rm -f /tmp/partitiontable.tmp +elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK'1' | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2) = 'ee' ]; then + # finding existent partitions in GPT - for PART in $PARTS; do - for (( i = 1; i < $(($COUNTER-1)); i++ )); do - if [ $i -ne 4 ]; then - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists?"]} -ne 1 ]; then - sgdisk /dev/$SLX_CHOOSEN_DISK -i $i | grep "unique GUID" | cut -d ' ' -f4 | grep '${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}000000-0000-0000-0000-000000000000' - if [ $? -eq 0 ]; then - echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists?"]=1 - break; - fi - fi + echo 'GPT' + PARTS=$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK[0-9] | tr -s ' ' | cut -d ' ' -f5) # this line fix the empty PARTS error, continue from here + echo $PARTS + for PART in $PARTS; do + for (( i = 1; i < $(($COUNTER-1)); i++ )); do + if [ $i -ne 4 ]; then + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists?"]} -ne 1 ]; then + echo "sgdisk /dev/$SLX_CHOOSEN_DISK -i $i | grep \"unique GUID\" | cut -d ' ' -f4 | grep '${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}000000-0000-0000-0000-000000000000'" + sgdisk /dev/$SLX_CHOOSEN_DISK -i $i | grep "unique GUID" | cut -d ' ' -f4 | grep '${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}000000-0000-0000-0000-000000000000' + if [ $? -eq 0 ]; then + echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists?"]=1 + echo 'boa tarde1' fi - i=$(($i+1)) - done - done + fi + fi + i=$(($i+1)) + done + done else # finding existent partitions in MS-DOS for PART in $PARTS; do @@ -208,12 +212,18 @@ else fi DIALOGSTR="New partitions created:\n\n" -if [ $SLX_PARTITION_TYPE = GPT ]; then - sgdisk -g /dev/$SLX_CHOOSEN_DISK\ - -t 1:"$SCRATCHID"000000-0000-0000-0000-000000000000\ - -t 2:"$HOMEID"000000-0000-0000-0000-000000000000\ - -t 3:"$DNBD3ID"000000-0000-0000-0000-000000000000\ - -t 4:"$BOOTID"000000-0000-0000-0000-000000000000 > /dev/null +echo "SLX_PARTITION_TYPE = "$SLX_PARTITION_TYPE +if [ $SLX_PARTITION_TYPE = 'GPT' ]; then + # create the command that will convert the MSDOS type to GPT and change the unique GUIDs + CMD="sgdisk -g /dev/$SLX_CHOOSEN_DISK" + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -ne 4 ]; then + CMD=$CMD" -u "$i":"${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" + CMD=$CMD" -c "$i":\""${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]}"\"" + fi + done + CMD=$CMD" > /dev/null" + $CMD for (( i = 1; i < $COUNTER; i++ )); do if [ $i -ne 4 ]; then -- cgit v1.2.3-55-g7522 From 5578edcf252f2e70aa1e143a171e2ed646133878 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Tue, 12 Aug 2014 12:13:54 -0300 Subject: [partitioner] existent partitions detection working for GPT and MSDOS. TODO: Create the nonexistent partitions if there is enough freespace. --- remote/modules/partitioner/partitioner.sh | 50 ++++++++++++++++++------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh index 5822851a..f2a7dfc3 100755 --- a/remote/modules/partitioner/partitioner.sh +++ b/remote/modules/partitioner/partitioner.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -e +# set -e PARTITIONSPATH="/proc/partitions" CONFIGPATH="./config" @@ -84,11 +84,13 @@ if [ -n "$SLX_PARTITION_TABLE" ]; then else PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=1 fi - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists?"]=0 + # set the partitions to non-existents + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists"]=0 COUNTER=$(($COUNTER+1)) done + unset IFS fi -unset IFS +# PARTTBL starts at 1 and ends at COUNTER-1 # check if the choosen disk is greater than the new partition table size. DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) @@ -174,51 +176,57 @@ if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null # rm -f /tmp/partitiontable.tmp elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK'1' | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2) = 'ee' ]; then - # finding existent partitions in GPT echo 'GPT' PARTS=$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK[0-9] | tr -s ' ' | cut -d ' ' -f5) # this line fix the empty PARTS error, continue from here - echo $PARTS for PART in $PARTS; do - for (( i = 1; i < $(($COUNTER-1)); i++ )); do + for (( i = 1; i < $COUNTER; i++ )); do + echo "i=$i PART=$PART" if [ $i -ne 4 ]; then - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists?"]} -ne 1 ]; then - echo "sgdisk /dev/$SLX_CHOOSEN_DISK -i $i | grep \"unique GUID\" | cut -d ' ' -f4 | grep '${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}000000-0000-0000-0000-000000000000'" - sgdisk /dev/$SLX_CHOOSEN_DISK -i $i | grep "unique GUID" | cut -d ' ' -f4 | grep '${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}000000-0000-0000-0000-000000000000' + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then + echo "sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} | grep '${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}000000-0000-0000-0000-000000000000'" + sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" if [ $? -eq 0 ]; then echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists?"]=1 - echo 'boa tarde1' + PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART + break fi fi fi - i=$(($i+1)) done done + # FREESPACE needed here else # finding existent partitions in MS-DOS + echo 'MSDOS' + PARTS=$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK[0-9] | tr -s ' ' | cut -d ' ' -f5) # this line fix the empty PARTS error, continue from here for PART in $PARTS; do - for (( i = 1; i < $(($COUNTER-1)); i++ )); do + for (( i = 1; i < $COUNTER; i++ )); do + echo "i=$i PART=$PART" if [ $i -ne 4 ]; then - [ sfdisk -d /dev/$SLX_CHOOSEN_DISK | grep $PART | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2 = '${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}' ] - if [ $? -eq 0 ]; then - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists?"]=1 - break; + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then + echo "sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $PART | tr -s ' ' | cut -d ' ' -f7 | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" + sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $PART | tr -s ' ' | cut -d ' ' -f7 | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + if [ $? -eq 0 ]; then + echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." + PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART + break + fi fi fi - i=$(($i+1)) done done fi DIALOGSTR="New partitions created:\n\n" -echo "SLX_PARTITION_TYPE = "$SLX_PARTITION_TYPE if [ $SLX_PARTITION_TYPE = 'GPT' ]; then - # create the command that will convert the MSDOS type to GPT and change the unique GUIDs + # create the command (CMD) that will convert the MSDOS type to GPT and change the unique GUIDs CMD="sgdisk -g /dev/$SLX_CHOOSEN_DISK" for (( i = 1; i < $COUNTER; i++ )); do if [ $i -ne 4 ]; then - CMD=$CMD" -u "$i":"${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then + CMD=$CMD" -u "$i":"${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" + fi CMD=$CMD" -c "$i":\""${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]}"\"" fi done -- cgit v1.2.3-55-g7522 From 6ae6bd8825c17c8354a794e77393accc58e495a2 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Fri, 15 Aug 2014 12:03:17 -0300 Subject: [partitioner] freespace check done. --- remote/modules/partitioner/partitioner.sh | 93 ++++++++++++++++++------------- 1 file changed, 53 insertions(+), 40 deletions(-) diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh index f2a7dfc3..bc7fac84 100755 --- a/remote/modules/partitioner/partitioner.sh +++ b/remote/modules/partitioner/partitioner.sh @@ -15,10 +15,9 @@ BLOCKSIZE=1024 # picking disk that will be used DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") if [ -z "$DISKS" ]; then - dialog --msgbox "ERROR: Can't find an hard disk." 5 40 + dialog --msgbox "ERROR: Can't find an hard disk." 10 40 exit 1 fi - if [ -z "$SLX_CHOOSEN_DISK" ]; then DIALOGSTR="This computer has the following partitions:\n" for disk in $DISKS; do @@ -40,7 +39,6 @@ if [ -z "$SLX_CHOOSEN_DISK" ]; then GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" done - if [ $(echo $DISKS | tr ' ' \\n | wc -l) -gt 1 ]; then DIALOGSTR=$DIALOGSTR"Which of these disks you want to use?\n" SLX_CHOOSEN_DISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) @@ -61,11 +59,10 @@ if [ -z "$SLX_CHOOSEN_DISK" ]; then elif [ $(echo $DISKS | tr ' ' \\n | wc -l) -eq 1 ]; then SLX_CHOOSEN_DISK=$(echo $DISKS | tr ' ' \\n | head -n1) else - dialog --msgbox "ERROR: Can't find an hard disk." 5 40 + dialog --msgbox "ERROR: Can't find an hard disk." 10 40 exit 1 fi fi - # if SLX_PARTITION_TABLE is set then put his content in a associative array declare -A PARTTBL COUNTER=1 @@ -89,17 +86,23 @@ if [ -n "$SLX_PARTITION_TABLE" ]; then COUNTER=$(($COUNTER+1)) done unset IFS +else + dialog --msgbox "ERROR: You didn't set a valid partition table. Please check your config file." 10 40 + exit 1 fi # PARTTBL starts at 1 and ends at COUNTER-1 # check if the choosen disk is greater than the new partition table size. DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) -PARTSSIZE=0 +NEEDED_SPACE=0 for (( i = 1; i < $COUNTER; i++ )); do - PARTSSIZE=$PARTSSIZE+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]} + if [[ $i -ne 4 ]]; then + NEEDED_SPACE=$(($NEEDED_SPACE+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]})) + fi done -echo "$DISKSIZE -lt $(($PARTSSIZE*1024*1024*1024+$COUNTER*1024*1024))" -if [ $DISKSIZE -lt $(($PARTSSIZE*1024*1024*1024+$COUNTER*1024*1024)) ]; then +NEEDED_SPACE=$(($NEEDED_SPACE*1024*1024*1024+$COUNTER*1024*1024)) +echo "$DISKSIZE -lt $NEEDED_SPACE" +if [ $DISKSIZE -lt $NEEDED_SPACE ]; then dialog --msgbox "ERROR: Insufficient space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 exit 1 fi @@ -118,26 +121,26 @@ if [ -z "$SLX_PARTITION_TYPE" ]; then fi fi -# asking confirmation to create the partitions -if [ $SLX_AUTOMATIC_PARTITIONING = "no" ]; then - GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) - DIALOGSTR="$SLX_CHOOSEN_DISK $DISKSIZE Bytes ($GBSIZE GB)\n" - PARTS=$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK[0-9] | tr -s ' ' | cut -d ' ' -f5) - USED=0 - for PART in $PARTS; do - PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) - USED=$(($USED+$PARTSIZE)) - GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" - done - DIALOGSTR=$DIALOGSTR" ----------\n" - FREESPACE=$(($DISKSIZE-$USED)) - GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" - GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" - DIALOGSTR=$DIALOGSTR"All /dev/$SLX_CHOOSEN_DISK partitions will be deleted, ok?" +GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) +DIALOGSTR="$SLX_CHOOSEN_DISK $DISKSIZE Bytes ($GBSIZE GB)\n" +PARTS=$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK[0-9] | tr -s ' ' | cut -d ' ' -f5) +USED=0 +for PART in $PARTS; do + PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) + USED=$(($USED+$PARTSIZE)) + GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) + DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" +done +DIALOGSTR=$DIALOGSTR" ----------\n" +FREESPACE=$(($DISKSIZE-$USED)) +GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) +DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" +GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) +DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" +DIALOGSTR=$DIALOGSTR"All /dev/$SLX_CHOOSEN_DISK partitions will be deleted, ok?" +# asking confirmation to create the partitions +if [[ $SLX_AUTOMATIC_PARTITIONING = "no" && SLX_DELETE_PARTITION_TABLE = 'yes' ]]; then dialog --defaultno --yesno "$DIALOGSTR" 0 0 if [ $? -eq 1 ]; then exit 1 @@ -148,10 +151,13 @@ fi # SECTORSIZE=$(sfdisk /dev/$SLX_CHOOSEN_DISK -l -u S 2> /dev/null | grep Units | cut -d ' ' -f5) SECTORSIZE=512 -# delete partition table +if [[ $USED -eq 0 ]]; then + SLX_DELETE_PARTITION_TABLE="yes" +fi + if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then - # : - sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2> /dev/null + # delete partition table + sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2> /dev/null # erase all partitions # constructing the sfdisk input file echo "unit: sectors @@ -178,44 +184,51 @@ if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK'1' | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2) = 'ee' ]; then # finding existent partitions in GPT echo 'GPT' - PARTS=$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK[0-9] | tr -s ' ' | cut -d ' ' -f5) # this line fix the empty PARTS error, continue from here for PART in $PARTS; do for (( i = 1; i < $COUNTER; i++ )); do - echo "i=$i PART=$PART" if [ $i -ne 4 ]; then if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then - echo "sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} | grep '${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}000000-0000-0000-0000-000000000000'" - sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" + sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" > /dev/null if [ $? -eq 0 ]; then echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART + NEEDED_SPACE=$(($NEEDED_SPACE-${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) break fi fi fi done done - # FREESPACE needed here + echo "FREESPACE="$FREESPACE + echo "NEEDED_SPACE="$NEEDED_SPACE + if [[ $FREESPACE -lt $NEEDED_SPACE ]]; then + dialog --msgbox "ERROR: Insufficient free space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 + exit 1 + fi else # finding existent partitions in MS-DOS echo 'MSDOS' - PARTS=$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK[0-9] | tr -s ' ' | cut -d ' ' -f5) # this line fix the empty PARTS error, continue from here for PART in $PARTS; do for (( i = 1; i < $COUNTER; i++ )); do - echo "i=$i PART=$PART" if [ $i -ne 4 ]; then if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then - echo "sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $PART | tr -s ' ' | cut -d ' ' -f7 | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" - sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $PART | tr -s ' ' | cut -d ' ' -f7 | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $PART | tr -s ' ' | cut -d ' ' -f7 | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} > /dev/null if [ $? -eq 0 ]; then echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART + NEEDED_SPACE=$(($NEEDED_SPACE-${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) break fi fi fi done done + echo "FREESPACE="$FREESPACE + echo "NEEDED_SPACE="$NEEDED_SPACE + if [[ $FREESPACE -lt $NEEDED_SPACE ]]; then + dialog --msgbox "ERROR: Insufficient free space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 + exit 1 + fi fi DIALOGSTR="New partitions created:\n\n" -- cgit v1.2.3-55-g7522 From 004ee196601fc71dc6c80ca3e916639c0bd7f504 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Mon, 18 Aug 2014 12:11:14 -0300 Subject: [partitioner] setup_partitions changes copied from 'client-cache' branch. --- .../opt/openslx/scripts/systemd-setup_partitions | 52 ++++++++++++++++------ 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index f9640589..8a541d56 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -14,8 +14,10 @@ ############################################################################# -# Mount point for persistent scratch partition (type 45) -PERSISTENT="/opt/openslx/persistent" +# Mount point for persistent scratch partition (type 49 for BOOT, type48 for CACHE, type 47 for HOME) +PERSISTENT_BOOT="/boot" +PERSISTENT_CACHE="/cache" +PERSISTENT_HOME="/home" # General formatter for the /tmp partition on a local harddisk diskfm () { @@ -120,20 +122,43 @@ done # Put detected linux partitions (83) into /etc/fstab with "noauto", special # partition 45 (persistent scratch) to /var/scratch and 46 to /var/openslx -HAVE_PERSISTENT=no -for partid in 83 45 46 ; do +HAVE_PERSISTENT_BOOT=no +HAVE_PERSISTENT_CACHE=no +HAVE_PERSISTENT_HOME=no +for partid in 83 49 48 47 46; do for hdpartnr in $(sed -n -e "/ ${partid} /p" "/etc/disk.partition" | sed -e "s/[[:space:]].*//"); do if [ "${partid}" -eq 83 ]; then mkdir -p "/media/${hdpartnr#/dev/*}" echo -e "${hdpartnr}\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto,noexec\t 0 0" >> "/etc/fstab" - elif [ "${partid}" -eq 45 -a "$HAVE_PERSISTENT" = "no" ]; then - mkdir -p "$PERSISTENT" - if ! mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT"; then + + elif [ "${partid}" -eq 49 -a "$HAVE_PERSISTENT_BOOT" = "no" ]; then + mkdir -p "$PERSISTENT_BOOT" + if ! mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_BOOT"; then diskfm "$hdpartnr" "jfs xfs ext3" || continue - mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT" || continue + mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_BOOT" || continue fi - HAVE_PERSISTENT=yes - echo -e "${hdpartnr}\t${PERSISTENT}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" + HAVE_PERSISTENT_BOOT=yes + echo -e "${hdpartnr}\t${PERSISTENT_BOOT}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" + + elif [ "${partid}" -eq 48 -a "$HAVE_PERSISTENT_CACHE" = "no" ]; then + mkdir -p "$PERSISTENT_CACHE" + if ! mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_CACHE"; then + diskfm "$hdpartnr" "jfs xfs ext3" || continue + mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_CACHE" || continue + fi + HAVE_PERSISTENT_CACHE=yes + echo -e "${hdpartnr}\t${PERSISTENT_CACHE}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" + + elif [ "${partid}" -eq 47 -a "$HAVE_PERSISTENT_HOME" = "no" ]; then + mkdir -p "$PERSISTENT_HOME" + if ! mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_HOME"; then + diskfm "$hdpartnr" "jfs xfs ext3" || continue + mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_HOME" || continue + fi + HAVE_PERSISTENT_HOME=yes + echo -e "${hdpartnr}\t${PERSISTENT_HOME}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" + + elif [ "${partid}" -eq 46 ]; then mkdir -p "/media/${hdpartnr#/dev/*}" #mount -t auto ${hdpartnr} /mnt/media/${hdpartnr#/dev/*} \n\ @@ -143,7 +168,9 @@ for partid in 83 45 46 ; do fi done done -[ "$HAVE_PERSISTENT" = "no" -a -d "$PERSISTENT" ] && rm -f "$PERSISTENT" +[ "$HAVE_PERSISTENT_BOOT" = "no" -a -d "$PERSISTENT_BOOT" ] && rm -f "$PERSISTENT_BOOT" +[ "$HAVE_PERSISTENT_CACHE" = "no" -a -d "$PERSISTENT_CACHE" ] && rm -f "$PERSISTENT_CACHE" +[ "$HAVE_PERSISTENT_HOME" = "no" -a -d "$PERSISTENT_HOME" ] && rm -f "$PERSISTENT_HOME" mount -a @@ -156,5 +183,4 @@ if [ "$HAVE_SWAP" = "no" ]; then slxlog "partition-swap" "Have no (formatted) swap partition, using zram swap only!" "/etc/disk.partition" fi -exit 0 - +exit 0 \ No newline at end of file -- cgit v1.2.3-55-g7522 From babd1c7e8873530e595f8984e817abb851957c14 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Wed, 20 Aug 2014 13:01:16 -0300 Subject: [partitioner] setup_partitions adapted to work with GPT (need some tests) --- .../opt/openslx/scripts/systemd-setup_partitions | 36 +++++++++++++++------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index 8a541d56..f71410f3 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -90,15 +90,29 @@ mount_temp_fallback () { rmdir /tmptmp return 0 } - -fdisk -l | sed -n "/^\/dev\//p" > "/etc/disk.partition" +for hd in $(cat /proc/partitions | tr -s ' ' | cut -d ' ' -f5 | grep -o -e "[a-z]*$"); do + echo -n "$hd - " >> "/etc/disk.partition" + sfdisk -d /dev/$hd 2>&1 | grep 'GPT' > /dev/null + if [[ $? -eq 1 ]]; then + echo "MSDOS" >> "/etc/disk.partition" + fdisk /dev/$hd -l | sed -n "/^\/dev\//p" | tr -s ' ' | cut -d ' ' -f1,5 >> "/etc/disk.partition" + else + echo "GPT" >> "/etc/disk.partition" + for part in $(cat /proc/partitions | tr -s ' ' | cut -d ' ' -f5 | grep -o -e "$hd[0-9][0-9]*$"); do + LINE="/dev/$part " + LINE=$LINE$(sgdisk /dev/$hd -i ${part:3} | grep 'GUID code' | cut -d ' ' -f4) + echo -e $LINE >> "/etc/disk.partition" + done + fi +done echo "Partitions:" cat "/etc/disk.partition" # Check for standard swap partitions and make them available to the system HAVE_SWAP=no -for hdpartnr in $(sed -n -e "/ 82 /p" "/etc/disk.partition" | sed -e "s/[[:space:]].*//"); do +# gpt swap GUID = 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F +for hdpartnr in $(grep -e "82$\|0657FD6D-A4AB-43C4-84E5-0933C84B4F4F$" /etc/disk.partition | cut -d ' ' -f1); do echo -e "$hdpartnr\tswap\t\tswap\t\tdefaults\t 0 0" >> "/etc/fstab" swapon "$hdpartnr" -p 10 && HAVE_SWAP=yes # low priority, in case we have zram swap, prefer that) done @@ -107,7 +121,7 @@ done # space, thus no normal filesystem will be incidentally deleted or # corrupted HAVE_TEMP=no -for hdpartnr in $(sed -n -e "/ 44 /p" "/etc/disk.partition" | sed -e "s/[[:space:]].*//"); do +for hdpartnr in $(grep -e "44$\|44000000-0000-0000-0000-000000000000$" /etc/disk.partition | cut -d ' ' -f1); do # check for supported filesystem and formatter if diskfm "$hdpartnr"; then # echo "$hdpartnr is mounted to /mnt/tmp at $(sysup)" >/tmp/tmpready @@ -125,13 +139,13 @@ done HAVE_PERSISTENT_BOOT=no HAVE_PERSISTENT_CACHE=no HAVE_PERSISTENT_HOME=no -for partid in 83 49 48 47 46; do - for hdpartnr in $(sed -n -e "/ ${partid} /p" "/etc/disk.partition" | sed -e "s/[[:space:]].*//"); do - if [ "${partid}" -eq 83 ]; then +for partid in 83 0FC63DAF-8483-4772-8E79-3D69D8477DE4 49 48 47 46; do + for hdpartnr in $(grep -e $partid /etc/disk.partition | cut -d ' ' -f1); do + if [ "${partid}" -eq 83 -o "$partid" = "0FC63DAF-8483-4772-8E79-3D69D8477DE4" ]; then mkdir -p "/media/${hdpartnr#/dev/*}" echo -e "${hdpartnr}\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto,noexec\t 0 0" >> "/etc/fstab" - elif [ "${partid}" -eq 49 -a "$HAVE_PERSISTENT_BOOT" = "no" ]; then + elif [ "${partid}" -eq 49 -o "$partid" = "49000000-0000-0000-0000-000000000000" -a "$HAVE_PERSISTENT_BOOT" = "no" ]; then mkdir -p "$PERSISTENT_BOOT" if ! mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_BOOT"; then diskfm "$hdpartnr" "jfs xfs ext3" || continue @@ -140,7 +154,7 @@ for partid in 83 49 48 47 46; do HAVE_PERSISTENT_BOOT=yes echo -e "${hdpartnr}\t${PERSISTENT_BOOT}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" - elif [ "${partid}" -eq 48 -a "$HAVE_PERSISTENT_CACHE" = "no" ]; then + elif [ "${partid}" -eq 48 -o "$partid" = "48000000-0000-0000-0000-000000000000" -a "$HAVE_PERSISTENT_CACHE" = "no" ]; then mkdir -p "$PERSISTENT_CACHE" if ! mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_CACHE"; then diskfm "$hdpartnr" "jfs xfs ext3" || continue @@ -149,7 +163,7 @@ for partid in 83 49 48 47 46; do HAVE_PERSISTENT_CACHE=yes echo -e "${hdpartnr}\t${PERSISTENT_CACHE}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" - elif [ "${partid}" -eq 47 -a "$HAVE_PERSISTENT_HOME" = "no" ]; then + elif [ "${partid}" -eq 47 -o "$partid" = "47000000-0000-0000-0000-000000000000" -a "$HAVE_PERSISTENT_HOME" = "no" ]; then mkdir -p "$PERSISTENT_HOME" if ! mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_HOME"; then diskfm "$hdpartnr" "jfs xfs ext3" || continue @@ -159,7 +173,7 @@ for partid in 83 49 48 47 46; do echo -e "${hdpartnr}\t${PERSISTENT_HOME}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" - elif [ "${partid}" -eq 46 ]; then + elif [ "${partid}" -eq 46 -o "$partid" = "46000000-0000-0000-0000-000000000000" ]; then mkdir -p "/media/${hdpartnr#/dev/*}" #mount -t auto ${hdpartnr} /mnt/media/${hdpartnr#/dev/*} \n\ #test -d /mnt/media/${hdpartnr#/dev/*}/home && \ -- cgit v1.2.3-55-g7522 From a177e6c101586bb89a8d6c642b891aa071f65674 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Thu, 21 Aug 2014 14:16:45 -0300 Subject: [partitioner] setup_partitions using GPT types and SLX_PARTITION_TABLE, lacking default configuration and some tests. --- remote/modules/partitioner/partitioner.sh | 2 +- .../opt/openslx/scripts/systemd-setup_partitions | 131 +++++++++++---------- 2 files changed, 69 insertions(+), 64 deletions(-) diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh index bc7fac84..118d420a 100755 --- a/remote/modules/partitioner/partitioner.sh +++ b/remote/modules/partitioner/partitioner.sh @@ -238,7 +238,7 @@ if [ $SLX_PARTITION_TYPE = 'GPT' ]; then for (( i = 1; i < $COUNTER; i++ )); do if [ $i -ne 4 ]; then if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then - CMD=$CMD" -u "$i":"${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" + CMD=$CMD" -t "$i":"${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" fi CMD=$CMD" -c "$i":\""${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]}"\"" fi diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index f71410f3..17202418 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -15,6 +15,7 @@ ############################################################################# # Mount point for persistent scratch partition (type 49 for BOOT, type48 for CACHE, type 47 for HOME) + PERSISTENT_BOOT="/boot" PERSISTENT_CACHE="/cache" PERSISTENT_HOME="/home" @@ -90,6 +91,38 @@ mount_temp_fallback () { rmdir /tmptmp return 0 } + +mount_part() { # $1=mountpoint, $2=partition(/dev/*) + mkdir -p "$1" + if ! mount -t auto -o noexec "${2}" "$1"; then + diskfm "$2" "jfs xfs ext3" || continue + mount -t auto -o noexec "${2}" "$1" || continue + fi + echo -e "${2}\t${1}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" +} + +declare -A PARTTBL +COUNTER=1 +if [ -n "$SLX_PARTITION_TABLE" ]; then + for PARTITION in $SLX_PARTITION_TABLE; do + IFS=, + set $PARTITION + PARTTBL["$COUNTER/id"]=$1 + PARTTBL["$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") + PARTTBL["$COUNTER/mountpoint"]=$3 + if [ -e $4 ]; then + PARTTBL["$COUNTER/bootable"]=0 + else + PARTTBL["$COUNTER/bootable"]=1 + fi + # set the partitions to non-existents + PARTTBL["$COUNTER/persistent"]="no" + COUNTER=$(($COUNTER+1)) + done + unset IFS +fi + +# create the /etc/disk.partition file with all the partitions and respective id's (MSDOS and GPT) for hd in $(cat /proc/partitions | tr -s ' ' | cut -d ' ' -f5 | grep -o -e "[a-z]*$"); do echo -n "$hd - " >> "/etc/disk.partition" sfdisk -d /dev/$hd 2>&1 | grep 'GPT' > /dev/null @@ -111,80 +144,52 @@ cat "/etc/disk.partition" # Check for standard swap partitions and make them available to the system HAVE_SWAP=no -# gpt swap GUID = 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F -for hdpartnr in $(grep -e "82$\|0657FD6D-A4AB-43C4-84E5-0933C84B4F4F$" /etc/disk.partition | cut -d ' ' -f1); do - echo -e "$hdpartnr\tswap\t\tswap\t\tdefaults\t 0 0" >> "/etc/fstab" - swapon "$hdpartnr" -p 10 && HAVE_SWAP=yes # low priority, in case we have zram swap, prefer that) +for swppart in $(grep -e "82$\|0657FD6D-A4AB-43C4-84E5-0933C84B4F4F$" /etc/disk.partition | cut -d ' ' -f1); do + echo -e "$swppart\tswap\t\tswap\t\tdefaults\t 0 0" >> "/etc/fstab" + swapon "$swppart" -p 10 && HAVE_SWAP=yes # low priority, in case we have zram swap, prefer that) +done +# Put detected linux partitions (83) into /etc/fstab with "noauto" +for linuxpart in $(grep -e "83$\|0FC63DAF-8483-4772-8E79-3D69D8477DE4$" /etc/disk.partition | cut -d ' ' -f1); do + mkdir -p "/media/${linuxpart#/dev/*}" + echo -e "${linuxpart}\t/media/${linuxpart#/dev/*}\tauto\t\tnoauto,noexec\t 0 0" >> "/etc/fstab" +done + +for openslxpart in $(grep -e "46$\|46000000-0000-0000-0000-000000000000$" /etc/disk.partition | cut -d ' ' -f1); do + mkdir -p "/media/${openslxpart#/dev/*}" + #mount -t auto ${openslxpart} /mnt/media/${openslxpart#/dev/*} \n\ + #test -d /mnt/media/${openslxpart#/dev/*}/home && \ + # ln -sf /media/${openslxpart#/dev/*} /var/home + echo -e "${openslxpart}\t/media/${openslxpart#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab" done # We use special non assigned partition type (id44) for harddisk scratch # space, thus no normal filesystem will be incidentally deleted or # corrupted -HAVE_TEMP=no -for hdpartnr in $(grep -e "44$\|44000000-0000-0000-0000-000000000000$" /etc/disk.partition | cut -d ' ' -f1); do - # check for supported filesystem and formatter - if diskfm "$hdpartnr"; then - # echo "$hdpartnr is mounted to /mnt/tmp at $(sysup)" >/tmp/tmpready - mount_temp "$mopt" "$hdpartnr" || continue - echo -e "${hdpartnr}\t/tmp\t\tauto\t\tnoexec\t 0 0" >> "/etc/fstab" - HAVE_TEMP=yes - break - else - echo "formatting failed for some reason" - fi # Made this non-forking, systemd should handle it - 2013-05-28 -done # Put detected linux partitions (83) into /etc/fstab with "noauto", special # partition 45 (persistent scratch) to /var/scratch and 46 to /var/openslx -HAVE_PERSISTENT_BOOT=no -HAVE_PERSISTENT_CACHE=no -HAVE_PERSISTENT_HOME=no -for partid in 83 0FC63DAF-8483-4772-8E79-3D69D8477DE4 49 48 47 46; do - for hdpartnr in $(grep -e $partid /etc/disk.partition | cut -d ' ' -f1); do - if [ "${partid}" -eq 83 -o "$partid" = "0FC63DAF-8483-4772-8E79-3D69D8477DE4" ]; then - mkdir -p "/media/${hdpartnr#/dev/*}" - echo -e "${hdpartnr}\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto,noexec\t 0 0" >> "/etc/fstab" - - elif [ "${partid}" -eq 49 -o "$partid" = "49000000-0000-0000-0000-000000000000" -a "$HAVE_PERSISTENT_BOOT" = "no" ]; then - mkdir -p "$PERSISTENT_BOOT" - if ! mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_BOOT"; then - diskfm "$hdpartnr" "jfs xfs ext3" || continue - mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_BOOT" || continue - fi - HAVE_PERSISTENT_BOOT=yes - echo -e "${hdpartnr}\t${PERSISTENT_BOOT}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" - - elif [ "${partid}" -eq 48 -o "$partid" = "48000000-0000-0000-0000-000000000000" -a "$HAVE_PERSISTENT_CACHE" = "no" ]; then - mkdir -p "$PERSISTENT_CACHE" - if ! mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_CACHE"; then - diskfm "$hdpartnr" "jfs xfs ext3" || continue - mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_CACHE" || continue - fi - HAVE_PERSISTENT_CACHE=yes - echo -e "${hdpartnr}\t${PERSISTENT_CACHE}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" - - elif [ "${partid}" -eq 47 -o "$partid" = "47000000-0000-0000-0000-000000000000" -a "$HAVE_PERSISTENT_HOME" = "no" ]; then - mkdir -p "$PERSISTENT_HOME" - if ! mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_HOME"; then - diskfm "$hdpartnr" "jfs xfs ext3" || continue - mount -t auto -o noexec "${hdpartnr}" "$PERSISTENT_HOME" || continue - fi - HAVE_PERSISTENT_HOME=yes - echo -e "${hdpartnr}\t${PERSISTENT_HOME}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" - - - elif [ "${partid}" -eq 46 -o "$partid" = "46000000-0000-0000-0000-000000000000" ]; then - mkdir -p "/media/${hdpartnr#/dev/*}" - #mount -t auto ${hdpartnr} /mnt/media/${hdpartnr#/dev/*} \n\ - #test -d /mnt/media/${hdpartnr#/dev/*}/home && \ - # ln -sf /media/${hdpartnr#/dev/*} /var/home - echo -e "${hdpartnr}\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab" + +# for partid in 83 0FC63DAF-8483-4772-8E79-3D69D8477DE4 49 48 47 46; do + +HAVE_TEMP="no" +for (( i = 1; i < $COUNTER; i++ )); do + for hdpartnr in $(grep -e ${PARTTBL["$i/id"]} /etc/disk.partition | cut -d ' ' -f1); do + if [ "${PARTTBL["$i/mountpoint"]}" = "/tmp" ]; then + if diskfm "$hdpartnr"; then + # echo "$hdpartnr is mounted to /mnt/tmp at $(sysup)" >/tmp/tmpready + mount_temp "$mopt" "$hdpartnr" || continue + echo -e "${hdpartnr}\t/tmp\t\tauto\t\tnoexec\t 0 0" >> "/etc/fstab" + HAVE_TEMP="yes" + break + else + echo "formatting failed for some reason" + fi # Made this non-forking, systemd should handle it - 2013-05-28 fi + mount_part "${PARTTBL["$i/mountpoint"]}" $hdpartnr + PARTTBL["$i/persistent"]="yes" done + [ "${PARTTBL["$i/persistent"]}" = "no" -a -d "${PARTTBL["$i/mountpoint"]}" ] && rm -f "${PARTTBL["$i/mountpoint"]}" done -[ "$HAVE_PERSISTENT_BOOT" = "no" -a -d "$PERSISTENT_BOOT" ] && rm -f "$PERSISTENT_BOOT" -[ "$HAVE_PERSISTENT_CACHE" = "no" -a -d "$PERSISTENT_CACHE" ] && rm -f "$PERSISTENT_CACHE" -[ "$HAVE_PERSISTENT_HOME" = "no" -a -d "$PERSISTENT_HOME" ] && rm -f "$PERSISTENT_HOME" mount -a -- cgit v1.2.3-55-g7522 From 5ced35281751f98b8c1a0c4d28f0653f7b3aabf2 Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Thu, 21 Aug 2014 14:35:50 -0300 Subject: [partitioner] made partitioner a config module --- partitioner/config | 17 ++ remote/modules/partitioner/config | 17 -- remote/modules/partitioner/partitioner.sh | 281 --------------------- server/configs/curitiba/partitioner | 1 + .../partitioner/opt/openslx/scripts/partitioner | 281 +++++++++++++++++++++ 5 files changed, 299 insertions(+), 298 deletions(-) create mode 100644 partitioner/config delete mode 100644 remote/modules/partitioner/config delete mode 100755 remote/modules/partitioner/partitioner.sh create mode 120000 server/configs/curitiba/partitioner create mode 100755 server/modules/partitioner/opt/openslx/scripts/partitioner diff --git a/partitioner/config b/partitioner/config new file mode 100644 index 00000000..bf34dcca --- /dev/null +++ b/partitioner/config @@ -0,0 +1,17 @@ +#Partitions +SLX_PARTITION_TYPE='GPT' +# SLX_CHOOSEN_DISK='sda' +SLX_AUTOMATIC_PARTITIONING='no' +SLX_DELETE_PARTITION_TABLE='no' +SLX_PARTITION_TABLE=' +44,10G,/tmp +43,10G,/boot,bootable +42,10G,/cache +41,10G,/home +40,5G,/teste' + +#Create GPT or msdos style partition table +#Choose disk to partition +#Don't be interactive, use carefully +#Override existing partitions +#Partition table in the format: ID,Size,Mountpoint,Bootable \ No newline at end of file diff --git a/remote/modules/partitioner/config b/remote/modules/partitioner/config deleted file mode 100644 index bf34dcca..00000000 --- a/remote/modules/partitioner/config +++ /dev/null @@ -1,17 +0,0 @@ -#Partitions -SLX_PARTITION_TYPE='GPT' -# SLX_CHOOSEN_DISK='sda' -SLX_AUTOMATIC_PARTITIONING='no' -SLX_DELETE_PARTITION_TABLE='no' -SLX_PARTITION_TABLE=' -44,10G,/tmp -43,10G,/boot,bootable -42,10G,/cache -41,10G,/home -40,5G,/teste' - -#Create GPT or msdos style partition table -#Choose disk to partition -#Don't be interactive, use carefully -#Override existing partitions -#Partition table in the format: ID,Size,Mountpoint,Bootable \ No newline at end of file diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh deleted file mode 100755 index 118d420a..00000000 --- a/remote/modules/partitioner/partitioner.sh +++ /dev/null @@ -1,281 +0,0 @@ -#!/bin/bash - -# set -e - -PARTITIONSPATH="/proc/partitions" -CONFIGPATH="./config" - -# BLOCKSIZE=$(sfdisk -l /dev/$CHOSENDISK | grep -o -e "blocks of [0-9]* bytes" | cut -d ' ' -f3) -BLOCKSIZE=1024 - -. $CONFIGPATH -# testing if the sizes and ID's of the disk is defined in the config file - - -# picking disk that will be used -DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") -if [ -z "$DISKS" ]; then - dialog --msgbox "ERROR: Can't find an hard disk." 10 40 - exit 1 -fi -if [ -z "$SLX_CHOOSEN_DISK" ]; then - DIALOGSTR="This computer has the following partitions:\n" - for disk in $DISKS; do - DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $disk$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) - PARTS=$(cat $PARTITIONSPATH | grep -e $disk[0-9] | tr -s ' ' | cut -d ' ' -f5) - GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR"$disk $DISKSIZE Bytes ($GBSIZE GB)\n" - USED=0 - for PART in $PARTS; do - PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*1024)) - USED=$(($USED+$PARTSIZE)) - GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" - done - DIALOGSTR=$DIALOGSTR" ----------\n" - FREESPACE=$(($DISKSIZE-$USED)) - GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" - GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" - done - if [ $(echo $DISKS | tr ' ' \\n | wc -l) -gt 1 ]; then - DIALOGSTR=$DIALOGSTR"Which of these disks you want to use?\n" - SLX_CHOOSEN_DISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) - if [ $? -eq 1 ]; then - exit 1; - fi - # verify if the choosen disk is a valid disk - echo $DISKS | tr ' ' \\n | grep -e ^$SLX_CHOOSEN_DISK$ > /dev/null 2>/dev/null - while [ $? -ne 0 ]; do - dialog --msgbox "Invalid option.\nTry again." 0 0 - SLX_CHOOSEN_DISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) - if [ $? -eq 1 ]; then - exit 1; - fi - echo $DISKS | tr ' ' \\n | grep -e ^$SLX_CHOOSEN_DISK$ > /dev/null 2>/dev/null - done - # ask a confirmation (all your data will be lost etc) - elif [ $(echo $DISKS | tr ' ' \\n | wc -l) -eq 1 ]; then - SLX_CHOOSEN_DISK=$(echo $DISKS | tr ' ' \\n | head -n1) - else - dialog --msgbox "ERROR: Can't find an hard disk." 10 40 - exit 1 - fi -fi -# if SLX_PARTITION_TABLE is set then put his content in a associative array -declare -A PARTTBL -COUNTER=1 -if [ -n "$SLX_PARTITION_TABLE" ]; then - for PARTITION in $SLX_PARTITION_TABLE; do - IFS=, - set $PARTITION - if [ $COUNTER -eq 4 ]; then - COUNTER=$(($COUNTER+1)) - fi - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/id"]=$1 - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$3 - if [ -e $4 ]; then - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=0 - else - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=1 - fi - # set the partitions to non-existents - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists"]=0 - COUNTER=$(($COUNTER+1)) - done - unset IFS -else - dialog --msgbox "ERROR: You didn't set a valid partition table. Please check your config file." 10 40 - exit 1 -fi -# PARTTBL starts at 1 and ends at COUNTER-1 - -# check if the choosen disk is greater than the new partition table size. -DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) -NEEDED_SPACE=0 -for (( i = 1; i < $COUNTER; i++ )); do - if [[ $i -ne 4 ]]; then - NEEDED_SPACE=$(($NEEDED_SPACE+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]})) - fi -done -NEEDED_SPACE=$(($NEEDED_SPACE*1024*1024*1024+$COUNTER*1024*1024)) -echo "$DISKSIZE -lt $NEEDED_SPACE" -if [ $DISKSIZE -lt $NEEDED_SPACE ]; then - dialog --msgbox "ERROR: Insufficient space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 - exit 1 -fi - -# choosing the partition type (MSDOS or GPT) if it wasn't set in config file -if [ -z "$SLX_PARTITION_TYPE" ]; then - SLX_PARTITION_TYPE=msdos - ANS=$(dialog --no-tags --menu "Choose the partitions type" 0 0 0 "1" " MSDOS " "2" " GPT " 3>&1 1>&2 2>&3) - if [ $? -eq 1 ]; then - exit 1 - fi - if [ $ANS -eq 1 ]; then - SLX_PARTITION_TYPE=msdos - else - SLX_PARTITION_TYPE=GPT - fi -fi - -GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) -DIALOGSTR="$SLX_CHOOSEN_DISK $DISKSIZE Bytes ($GBSIZE GB)\n" -PARTS=$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK[0-9] | tr -s ' ' | cut -d ' ' -f5) -USED=0 -for PART in $PARTS; do - PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) - USED=$(($USED+$PARTSIZE)) - GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" -done -DIALOGSTR=$DIALOGSTR" ----------\n" -FREESPACE=$(($DISKSIZE-$USED)) -GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) -DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" -GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) -DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" -DIALOGSTR=$DIALOGSTR"All /dev/$SLX_CHOOSEN_DISK partitions will be deleted, ok?" - -# asking confirmation to create the partitions -if [[ $SLX_AUTOMATIC_PARTITIONING = "no" && SLX_DELETE_PARTITION_TABLE = 'yes' ]]; then - dialog --defaultno --yesno "$DIALOGSTR" 0 0 - if [ $? -eq 1 ]; then - exit 1 - fi -fi - -# pick the size of a sector (usually 512 bytes) -# SECTORSIZE=$(sfdisk /dev/$SLX_CHOOSEN_DISK -l -u S 2> /dev/null | grep Units | cut -d ' ' -f5) -SECTORSIZE=512 - -if [[ $USED -eq 0 ]]; then - SLX_DELETE_PARTITION_TABLE="yes" -fi - -if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then - # delete partition table - sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2> /dev/null # erase all partitions - - # constructing the sfdisk input file - echo "unit: sectors - "> /tmp/partitiontable.tmp - - START=$((1*1024*1024/$SECTORSIZE)) - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -ne 4 ]; then - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024/$SECTORSIZE)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID", bootable " >> /tmp/partitiontable.tmp - else - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID >> /tmp/partitiontable.tmp - fi - START=$(($START+$SIZE+1*1024*1024/$SECTORSIZE)) - else - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$(($DISKSIZE/$SECTORSIZE-1))", Id= 5" >> /tmp/partitiontable.tmp - START=$(($START+1*1024*1024/$SECTORSIZE)) - fi - done - sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null - # rm -f /tmp/partitiontable.tmp -elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK'1' | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2) = 'ee' ]; then -# finding existent partitions in GPT - echo 'GPT' - for PART in $PARTS; do - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -ne 4 ]; then - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then - sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" > /dev/null - if [ $? -eq 0 ]; then - echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." - PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART - NEEDED_SPACE=$(($NEEDED_SPACE-${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - break - fi - fi - fi - done - done - echo "FREESPACE="$FREESPACE - echo "NEEDED_SPACE="$NEEDED_SPACE - if [[ $FREESPACE -lt $NEEDED_SPACE ]]; then - dialog --msgbox "ERROR: Insufficient free space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 - exit 1 - fi -else -# finding existent partitions in MS-DOS - echo 'MSDOS' - for PART in $PARTS; do - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -ne 4 ]; then - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then - sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $PART | tr -s ' ' | cut -d ' ' -f7 | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} > /dev/null - if [ $? -eq 0 ]; then - echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." - PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART - NEEDED_SPACE=$(($NEEDED_SPACE-${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - break - fi - fi - fi - done - done - echo "FREESPACE="$FREESPACE - echo "NEEDED_SPACE="$NEEDED_SPACE - if [[ $FREESPACE -lt $NEEDED_SPACE ]]; then - dialog --msgbox "ERROR: Insufficient free space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 - exit 1 - fi -fi - -DIALOGSTR="New partitions created:\n\n" -if [ $SLX_PARTITION_TYPE = 'GPT' ]; then - # create the command (CMD) that will convert the MSDOS type to GPT and change the unique GUIDs - CMD="sgdisk -g /dev/$SLX_CHOOSEN_DISK" - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -ne 4 ]; then - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then - CMD=$CMD" -t "$i":"${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" - fi - CMD=$CMD" -c "$i":\""${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]}"\"" - fi - done - CMD=$CMD" > /dev/null" - $CMD - - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -ne 4 ]; then - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} - DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" - DIALOGSTR=$DIALOGSTR" GUID: "$ID"000000-0000-0000-0000-000000000000\n" - DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" - fi - done -else - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -lt 4 ]; then - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} - DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" - DIALOGSTR=$DIALOGSTR" Type: Primary\n" - DIALOGSTR=$DIALOGSTR" ID: "$ID"\n" - DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" - elif [ $i -gt 4 ]; then - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} - DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" - DIALOGSTR=$DIALOGSTR" Type: Logical\n" - DIALOGSTR=$DIALOGSTR" ID: "$ID"\n" - DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" - fi - done -fi - -dialog --msgbox "$DIALOGSTR" 0 0 \ No newline at end of file diff --git a/server/configs/curitiba/partitioner b/server/configs/curitiba/partitioner new file mode 120000 index 00000000..b45bce02 --- /dev/null +++ b/server/configs/curitiba/partitioner @@ -0,0 +1 @@ +../../modules/partitioner \ No newline at end of file diff --git a/server/modules/partitioner/opt/openslx/scripts/partitioner b/server/modules/partitioner/opt/openslx/scripts/partitioner new file mode 100755 index 00000000..e5e94f4e --- /dev/null +++ b/server/modules/partitioner/opt/openslx/scripts/partitioner @@ -0,0 +1,281 @@ +#!/bin/bash + +# set -e + +PARTITIONSPATH="/proc/partitions" +CONFIGPATH="/opt/openslx/config" + +# BLOCKSIZE=$(sfdisk -l /dev/$CHOSENDISK | grep -o -e "blocks of [0-9]* bytes" | cut -d ' ' -f3) +BLOCKSIZE=1024 + +. $CONFIGPATH +# testing if the sizes and ID's of the disk is defined in the config file + + +# picking disk that will be used +DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") +if [ -z "$DISKS" ]; then + dialog --msgbox "ERROR: Can't find an hard disk." 10 40 + exit 1 +fi +if [ -z "$SLX_CHOOSEN_DISK" ]; then + DIALOGSTR="This computer has the following partitions:\n" + for disk in $DISKS; do + DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $disk$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) + PARTS=$(cat $PARTITIONSPATH | grep -e $disk[0-9] | tr -s ' ' | cut -d ' ' -f5) + GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) + DIALOGSTR=$DIALOGSTR"$disk $DISKSIZE Bytes ($GBSIZE GB)\n" + USED=0 + for PART in $PARTS; do + PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*1024)) + USED=$(($USED+$PARTSIZE)) + GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) + DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" + done + DIALOGSTR=$DIALOGSTR" ----------\n" + FREESPACE=$(($DISKSIZE-$USED)) + GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) + DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" + GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) + DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" + done + if [ $(echo $DISKS | tr ' ' \\n | wc -l) -gt 1 ]; then + DIALOGSTR=$DIALOGSTR"Which of these disks you want to use?\n" + SLX_CHOOSEN_DISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) + if [ $? -eq 1 ]; then + exit 1; + fi + # verify if the choosen disk is a valid disk + echo $DISKS | tr ' ' \\n | grep -e ^$SLX_CHOOSEN_DISK$ > /dev/null 2>/dev/null + while [ $? -ne 0 ]; do + dialog --msgbox "Invalid option.\nTry again." 0 0 + SLX_CHOOSEN_DISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) + if [ $? -eq 1 ]; then + exit 1; + fi + echo $DISKS | tr ' ' \\n | grep -e ^$SLX_CHOOSEN_DISK$ > /dev/null 2>/dev/null + done + # ask a confirmation (all your data will be lost etc) + elif [ $(echo $DISKS | tr ' ' \\n | wc -l) -eq 1 ]; then + SLX_CHOOSEN_DISK=$(echo $DISKS | tr ' ' \\n | head -n1) + else + dialog --msgbox "ERROR: Can't find an hard disk." 10 40 + exit 1 + fi +fi +# if SLX_PARTITION_TABLE is set then put his content in a associative array +declare -A PARTTBL +COUNTER=1 +if [ -n "$SLX_PARTITION_TABLE" ]; then + for PARTITION in $SLX_PARTITION_TABLE; do + IFS=, + set $PARTITION + if [ $COUNTER -eq 4 ]; then + COUNTER=$(($COUNTER+1)) + fi + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/id"]=$1 + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$3 + if [ -e $4 ]; then + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=0 + else + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=1 + fi + # set the partitions to non-existents + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists"]=0 + COUNTER=$(($COUNTER+1)) + done + unset IFS +else + dialog --msgbox "ERROR: You didn't set a valid partition table. Please check your config file." 10 40 + exit 1 +fi +# PARTTBL starts at 1 and ends at COUNTER-1 + +# check if the choosen disk is greater than the new partition table size. +DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) +NEEDED_SPACE=0 +for (( i = 1; i < $COUNTER; i++ )); do + if [[ $i -ne 4 ]]; then + NEEDED_SPACE=$(($NEEDED_SPACE+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]})) + fi +done +NEEDED_SPACE=$(($NEEDED_SPACE*1024*1024*1024+$COUNTER*1024*1024)) +echo "$DISKSIZE -lt $NEEDED_SPACE" +if [ $DISKSIZE -lt $NEEDED_SPACE ]; then + dialog --msgbox "ERROR: Insufficient space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 + exit 1 +fi + +# choosing the partition type (MSDOS or GPT) if it wasn't set in config file +if [ -z "$SLX_PARTITION_TYPE" ]; then + SLX_PARTITION_TYPE=msdos + ANS=$(dialog --no-tags --menu "Choose the partitions type" 0 0 0 "1" " MSDOS " "2" " GPT " 3>&1 1>&2 2>&3) + if [ $? -eq 1 ]; then + exit 1 + fi + if [ $ANS -eq 1 ]; then + SLX_PARTITION_TYPE=msdos + else + SLX_PARTITION_TYPE=GPT + fi +fi + +GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) +DIALOGSTR="$SLX_CHOOSEN_DISK $DISKSIZE Bytes ($GBSIZE GB)\n" +PARTS=$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK[0-9] | tr -s ' ' | cut -d ' ' -f5) +USED=0 +for PART in $PARTS; do + PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) + USED=$(($USED+$PARTSIZE)) + GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) + DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" +done +DIALOGSTR=$DIALOGSTR" ----------\n" +FREESPACE=$(($DISKSIZE-$USED)) +GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) +DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" +GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) +DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" +DIALOGSTR=$DIALOGSTR"All /dev/$SLX_CHOOSEN_DISK partitions will be deleted, ok?" + +# asking confirmation to create the partitions +if [[ $SLX_AUTOMATIC_PARTITIONING = "no" && SLX_DELETE_PARTITION_TABLE = 'yes' ]]; then + dialog --defaultno --yesno "$DIALOGSTR" 0 0 + if [ $? -eq 1 ]; then + exit 1 + fi +fi + +# pick the size of a sector (usually 512 bytes) +# SECTORSIZE=$(sfdisk /dev/$SLX_CHOOSEN_DISK -l -u S 2> /dev/null | grep Units | cut -d ' ' -f5) +SECTORSIZE=512 + +if [[ $USED -eq 0 ]]; then + SLX_DELETE_PARTITION_TABLE="yes" +fi + +if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then + # delete partition table + sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2> /dev/null # erase all partitions + + # constructing the sfdisk input file + echo "unit: sectors + "> /tmp/partitiontable.tmp + + START=$((1*1024*1024/$SECTORSIZE)) + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -ne 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024/$SECTORSIZE)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID", bootable " >> /tmp/partitiontable.tmp + else + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID >> /tmp/partitiontable.tmp + fi + START=$(($START+$SIZE+1*1024*1024/$SECTORSIZE)) + else + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$(($DISKSIZE/$SECTORSIZE-1))", Id= 5" >> /tmp/partitiontable.tmp + START=$(($START+1*1024*1024/$SECTORSIZE)) + fi + done + sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null + # rm -f /tmp/partitiontable.tmp +elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK'1' | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2) = 'ee' ]; then +# finding existent partitions in GPT + echo 'GPT' + for PART in $PARTS; do + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -ne 4 ]; then + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then + sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" > /dev/null + if [ $? -eq 0 ]; then + echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." + PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART + NEEDED_SPACE=$(($NEEDED_SPACE-${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + break + fi + fi + fi + done + done + echo "FREESPACE="$FREESPACE + echo "NEEDED_SPACE="$NEEDED_SPACE + if [[ $FREESPACE -lt $NEEDED_SPACE ]]; then + dialog --msgbox "ERROR: Insufficient free space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 + exit 1 + fi +else +# finding existent partitions in MS-DOS + echo 'MSDOS' + for PART in $PARTS; do + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -ne 4 ]; then + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then + sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $PART | tr -s ' ' | cut -d ' ' -f7 | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} > /dev/null + if [ $? -eq 0 ]; then + echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." + PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART + NEEDED_SPACE=$(($NEEDED_SPACE-${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + break + fi + fi + fi + done + done + echo "FREESPACE="$FREESPACE + echo "NEEDED_SPACE="$NEEDED_SPACE + if [[ $FREESPACE -lt $NEEDED_SPACE ]]; then + dialog --msgbox "ERROR: Insufficient free space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 + exit 1 + fi +fi + +DIALOGSTR="New partitions created:\n\n" +if [ $SLX_PARTITION_TYPE = 'GPT' ]; then + # create the command (CMD) that will convert the MSDOS type to GPT and change the unique GUIDs + CMD="sgdisk -g /dev/$SLX_CHOOSEN_DISK" + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -ne 4 ]; then + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then + CMD=$CMD" -t "$i":"${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" + fi + CMD=$CMD" -c "$i":\""${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]}"\"" + fi + done + CMD=$CMD" > /dev/null" + $CMD + + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -ne 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} + DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" + DIALOGSTR=$DIALOGSTR" GUID: "$ID"000000-0000-0000-0000-000000000000\n" + DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" + fi + done +else + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -lt 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} + DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" + DIALOGSTR=$DIALOGSTR" Type: Primary\n" + DIALOGSTR=$DIALOGSTR" ID: "$ID"\n" + DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" + elif [ $i -gt 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} + DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" + DIALOGSTR=$DIALOGSTR" Type: Logical\n" + DIALOGSTR=$DIALOGSTR" ID: "$ID"\n" + DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" + fi + done +fi + +dialog --msgbox "$DIALOGSTR" 0 0 -- cgit v1.2.3-55-g7522 From 19600e53db2260b61a78af1d1e5e1d2c07dfa879 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Thu, 21 Aug 2014 18:57:26 -0300 Subject: [partitioner] default statements implemented. --- .../opt/openslx/scripts/systemd-setup_partitions | 83 ++++++++++------------ .../partitioner/opt/openslx/scripts/partitioner | 83 +++++++++++++--------- 2 files changed, 85 insertions(+), 81 deletions(-) diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index 17202418..748e017d 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -1,4 +1,4 @@ -#!/bin/ash +#!/bin/bash # Copyright (c) 2013 - OpenSLX GmbH # # This program is free software distributed under the GPL version 2. @@ -13,12 +13,8 @@ # detecting swap and special partitions ############################################################################# - -# Mount point for persistent scratch partition (type 49 for BOOT, type48 for CACHE, type 47 for HOME) - -PERSISTENT_BOOT="/boot" -PERSISTENT_CACHE="/cache" -PERSISTENT_HOME="/home" +CONFIGPATH="./config" +. $CONFIGPATH # General formatter for the /tmp partition on a local harddisk diskfm () { @@ -94,43 +90,49 @@ mount_temp_fallback () { mount_part() { # $1=mountpoint, $2=partition(/dev/*) mkdir -p "$1" - if ! mount -t auto -o noexec "${2}" "$1"; then + if ! mount -t auto -o noexec "${2}" "$1" 2> /dev/null ; then diskfm "$2" "jfs xfs ext3" || continue mount -t auto -o noexec "${2}" "$1" || continue fi echo -e "${2}\t${1}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" } +# default case +if [ -z "$SLX_PARTITION_TABLE" ]; then + SLX_PARTITION_TABLE=' + 44,10G,/tmp + 45,10G,/var/scratch' +fi + declare -A PARTTBL COUNTER=1 -if [ -n "$SLX_PARTITION_TABLE" ]; then - for PARTITION in $SLX_PARTITION_TABLE; do - IFS=, - set $PARTITION - PARTTBL["$COUNTER/id"]=$1 - PARTTBL["$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") - PARTTBL["$COUNTER/mountpoint"]=$3 - if [ -e $4 ]; then - PARTTBL["$COUNTER/bootable"]=0 - else - PARTTBL["$COUNTER/bootable"]=1 - fi - # set the partitions to non-existents - PARTTBL["$COUNTER/persistent"]="no" - COUNTER=$(($COUNTER+1)) - done - unset IFS -fi +for PARTITION in $SLX_PARTITION_TABLE; do + IFS=, + set $PARTITION + PARTTBL["$COUNTER/id"]=$1 + PARTTBL["$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") + PARTTBL["$COUNTER/mountpoint"]=$3 + if [ -e $4 ]; then + PARTTBL["$COUNTER/bootable"]=0 + else + PARTTBL["$COUNTER/bootable"]=1 + fi + PARTTBL["$COUNTER/persistent"]="no" + COUNTER=$(($COUNTER+1)) +done +unset IFS + # create the /etc/disk.partition file with all the partitions and respective id's (MSDOS and GPT) +echo "PARTITION - ID" > "/etc/disk.partition" for hd in $(cat /proc/partitions | tr -s ' ' | cut -d ' ' -f5 | grep -o -e "[a-z]*$"); do - echo -n "$hd - " >> "/etc/disk.partition" + echo -n "$hd (" >> "/etc/disk.partition" sfdisk -d /dev/$hd 2>&1 | grep 'GPT' > /dev/null if [[ $? -eq 1 ]]; then - echo "MSDOS" >> "/etc/disk.partition" - fdisk /dev/$hd -l | sed -n "/^\/dev\//p" | tr -s ' ' | cut -d ' ' -f1,5 >> "/etc/disk.partition" + echo "MSDOS)" >> "/etc/disk.partition" + fdisk /dev/$hd -l | sed -n "/^\/dev\//p" | tr -d '*' | tr -s ' ' | cut -d ' ' -f1,5 >> "/etc/disk.partition" else - echo "GPT" >> "/etc/disk.partition" + echo "GPT)" >> "/etc/disk.partition" for part in $(cat /proc/partitions | tr -s ' ' | cut -d ' ' -f5 | grep -o -e "$hd[0-9][0-9]*$"); do LINE="/dev/$part " LINE=$LINE$(sgdisk /dev/$hd -i ${part:3} | grep 'GUID code' | cut -d ' ' -f4) @@ -141,7 +143,6 @@ done echo "Partitions:" cat "/etc/disk.partition" - # Check for standard swap partitions and make them available to the system HAVE_SWAP=no for swppart in $(grep -e "82$\|0657FD6D-A4AB-43C4-84E5-0933C84B4F4F$" /etc/disk.partition | cut -d ' ' -f1); do @@ -162,37 +163,28 @@ for openslxpart in $(grep -e "46$\|46000000-0000-0000-0000-000000000000$" /etc/d echo -e "${openslxpart}\t/media/${openslxpart#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab" done -# We use special non assigned partition type (id44) for harddisk scratch -# space, thus no normal filesystem will be incidentally deleted or -# corrupted - -# Put detected linux partitions (83) into /etc/fstab with "noauto", special -# partition 45 (persistent scratch) to /var/scratch and 46 to /var/openslx - -# for partid in 83 0FC63DAF-8483-4772-8E79-3D69D8477DE4 49 48 47 46; do - HAVE_TEMP="no" for (( i = 1; i < $COUNTER; i++ )); do - for hdpartnr in $(grep -e ${PARTTBL["$i/id"]} /etc/disk.partition | cut -d ' ' -f1); do + for hdpartnr in $(grep -e ${PARTTBL["$i/id"]}"$\|"${PARTTBL["$i/id"]}"000000-0000-0000-0000-000000000000$" /etc/disk.partition | cut -d ' ' -f1); do if [ "${PARTTBL["$i/mountpoint"]}" = "/tmp" ]; then if diskfm "$hdpartnr"; then # echo "$hdpartnr is mounted to /mnt/tmp at $(sysup)" >/tmp/tmpready mount_temp "$mopt" "$hdpartnr" || continue echo -e "${hdpartnr}\t/tmp\t\tauto\t\tnoexec\t 0 0" >> "/etc/fstab" HAVE_TEMP="yes" - break + PARTTBL["$i/persistent"]="yes" else echo "formatting failed for some reason" fi # Made this non-forking, systemd should handle it - 2013-05-28 + else + mount_part "${PARTTBL["$i/mountpoint"]}" $hdpartnr + PARTTBL["$i/persistent"]="yes" fi - mount_part "${PARTTBL["$i/mountpoint"]}" $hdpartnr - PARTTBL["$i/persistent"]="yes" done [ "${PARTTBL["$i/persistent"]}" = "no" -a -d "${PARTTBL["$i/mountpoint"]}" ] && rm -f "${PARTTBL["$i/mountpoint"]}" done mount -a - # Make huge tmpfs if nothing could be mounted for /tmp if [ "$HAVE_TEMP" = "no" ]; then mount_temp -t tmpfs -o size=20G none @@ -201,5 +193,4 @@ fi if [ "$HAVE_SWAP" = "no" ]; then slxlog "partition-swap" "Have no (formatted) swap partition, using zram swap only!" "/etc/disk.partition" fi - exit 0 \ No newline at end of file diff --git a/server/modules/partitioner/opt/openslx/scripts/partitioner b/server/modules/partitioner/opt/openslx/scripts/partitioner index e5e94f4e..03b30442 100755 --- a/server/modules/partitioner/opt/openslx/scripts/partitioner +++ b/server/modules/partitioner/opt/openslx/scripts/partitioner @@ -3,7 +3,8 @@ # set -e PARTITIONSPATH="/proc/partitions" -CONFIGPATH="/opt/openslx/config" +CONFIGPATH="./config" +# CONFIGPATH="/opt/openslx/config" # BLOCKSIZE=$(sfdisk -l /dev/$CHOSENDISK | grep -o -e "blocks of [0-9]* bytes" | cut -d ' ' -f3) BLOCKSIZE=1024 @@ -19,6 +20,10 @@ if [ -z "$DISKS" ]; then exit 1 fi if [ -z "$SLX_CHOOSEN_DISK" ]; then + if [ $SLX_AUTOMATIC_PARTITIONING = "yes" ]; then + dialog --msgbox "ERROR: You didn' define any hard disk in your configuration file." 10 40 + exit 1 + fi DIALOGSTR="This computer has the following partitions:\n" for disk in $DISKS; do DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $disk$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) @@ -63,33 +68,39 @@ if [ -z "$SLX_CHOOSEN_DISK" ]; then exit 1 fi fi +if [ -z "$SLX_PARTITION_TABLE" ]; then + if [ $SLX_AUTOMATIC_PARTITIONING = "yes" ]; then + SLX_PARTITION_TABLE=' + 44,10G,/tmp + 45,10G,/var/scratch' + else + dialog --msgbox "ERROR: You didn't set a valid partition table. Please check your config file." 10 40 + exit 1 + fi +fi + # if SLX_PARTITION_TABLE is set then put his content in a associative array declare -A PARTTBL COUNTER=1 -if [ -n "$SLX_PARTITION_TABLE" ]; then - for PARTITION in $SLX_PARTITION_TABLE; do - IFS=, - set $PARTITION - if [ $COUNTER -eq 4 ]; then - COUNTER=$(($COUNTER+1)) - fi - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/id"]=$1 - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$3 - if [ -e $4 ]; then - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=0 - else - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=1 - fi - # set the partitions to non-existents - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists"]=0 +for PARTITION in $SLX_PARTITION_TABLE; do + IFS=, + set $PARTITION + if [ $COUNTER -eq 4 ]; then COUNTER=$(($COUNTER+1)) - done - unset IFS -else - dialog --msgbox "ERROR: You didn't set a valid partition table. Please check your config file." 10 40 - exit 1 -fi + fi + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/id"]=$1 + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$3 + if [ -e $4 ]; then + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=0 + else + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=1 + fi + # set the partitions to non-existents + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists"]=0 + COUNTER=$(($COUNTER+1)) +done +unset IFS # PARTTBL starts at 1 and ends at COUNTER-1 # check if the choosen disk is greater than the new partition table size. @@ -101,7 +112,6 @@ for (( i = 1; i < $COUNTER; i++ )); do fi done NEEDED_SPACE=$(($NEEDED_SPACE*1024*1024*1024+$COUNTER*1024*1024)) -echo "$DISKSIZE -lt $NEEDED_SPACE" if [ $DISKSIZE -lt $NEEDED_SPACE ]; then dialog --msgbox "ERROR: Insufficient space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 exit 1 @@ -109,15 +119,18 @@ fi # choosing the partition type (MSDOS or GPT) if it wasn't set in config file if [ -z "$SLX_PARTITION_TYPE" ]; then - SLX_PARTITION_TYPE=msdos - ANS=$(dialog --no-tags --menu "Choose the partitions type" 0 0 0 "1" " MSDOS " "2" " GPT " 3>&1 1>&2 2>&3) - if [ $? -eq 1 ]; then - exit 1 - fi - if [ $ANS -eq 1 ]; then + if [ $SLX_AUTOMATIC_PARTITIONING = "yes" ]; then SLX_PARTITION_TYPE=msdos else - SLX_PARTITION_TYPE=GPT + ANS=$(dialog --no-tags --menu "Choose the partitions type" 0 0 0 "1" " MSDOS " "2" " GPT " 3>&1 1>&2 2>&3) + if [ $? -eq 1 ]; then + exit 1 + fi + if [ $ANS -eq 1 ]; then + SLX_PARTITION_TYPE=msdos + else + SLX_PARTITION_TYPE=GPT + fi fi fi @@ -140,7 +153,7 @@ DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" DIALOGSTR=$DIALOGSTR"All /dev/$SLX_CHOOSEN_DISK partitions will be deleted, ok?" # asking confirmation to create the partitions -if [[ $SLX_AUTOMATIC_PARTITIONING = "no" && SLX_DELETE_PARTITION_TABLE = 'yes' ]]; then +if [[ $SLX_AUTOMATIC_PARTITIONING = "no" && $SLX_DELETE_PARTITION_TABLE = 'yes' ]]; then dialog --defaultno --yesno "$DIALOGSTR" 0 0 if [ $? -eq 1 ]; then exit 1 @@ -188,7 +201,7 @@ elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK' for (( i = 1; i < $COUNTER; i++ )); do if [ $i -ne 4 ]; then if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then - sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" > /dev/null + sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} 2> /dev/null | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" > /dev/null if [ $? -eq 0 ]; then echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART @@ -243,7 +256,7 @@ if [ $SLX_PARTITION_TYPE = 'GPT' ]; then CMD=$CMD" -c "$i":\""${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]}"\"" fi done - CMD=$CMD" > /dev/null" + CMD=$CMD" > /dev/null 2> /dev/null" $CMD for (( i = 1; i < $COUNTER; i++ )); do -- cgit v1.2.3-55-g7522 From 99f317ae3bdd02c97e68725a06a2617c3706819d Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Fri, 22 Aug 2014 09:53:40 -0300 Subject: [partitioner] excluding special cases from the normal mount case. --- .../rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index 748e017d..cd42ee91 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -176,7 +176,7 @@ for (( i = 1; i < $COUNTER; i++ )); do else echo "formatting failed for some reason" fi # Made this non-forking, systemd should handle it - 2013-05-28 - else + elif [ "${PARTTBL["$i/id"]}" != "82" ] && [ "${PARTTBL["$i/id"]}" != "83" ] && [ "${PARTTBL["$i/id"]}" != "46" ]; then mount_part "${PARTTBL["$i/mountpoint"]}" $hdpartnr PARTTBL["$i/persistent"]="yes" fi -- cgit v1.2.3-55-g7522 From a219790a526046004a2f3c0ec66b3158deb3670f Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Wed, 27 Aug 2014 12:42:49 -0300 Subject: [partitioner] SLX_DELETE_PARTITION_TABLE='no' working for GPT partition table type. --- .../partitioner/opt/openslx/scripts/partitioner | 188 +++++++++++++-------- 1 file changed, 121 insertions(+), 67 deletions(-) diff --git a/server/modules/partitioner/opt/openslx/scripts/partitioner b/server/modules/partitioner/opt/openslx/scripts/partitioner index 03b30442..8eaf48a7 100755 --- a/server/modules/partitioner/opt/openslx/scripts/partitioner +++ b/server/modules/partitioner/opt/openslx/scripts/partitioner @@ -6,7 +6,7 @@ PARTITIONSPATH="/proc/partitions" CONFIGPATH="./config" # CONFIGPATH="/opt/openslx/config" -# BLOCKSIZE=$(sfdisk -l /dev/$CHOSENDISK | grep -o -e "blocks of [0-9]* bytes" | cut -d ' ' -f3) +# BLOCKSIZE=$(sfdisk -l /dev/$SLX_CHOOSEN_DISK | grep -o -e "blocks of [0-9]* bytes" | cut -d ' ' -f3) BLOCKSIZE=1024 . $CONFIGPATH @@ -90,11 +90,13 @@ for PARTITION in $SLX_PARTITION_TABLE; do fi PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/id"]=$1 PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$3 - if [ -e $4 ]; then - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=0 - else + if [ -n $3 ]; then + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$3 + fi + if [ -n $4 ]; then PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=1 + else + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=0 fi # set the partitions to non-existents PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists"]=0 @@ -194,30 +196,129 @@ if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then done sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null # rm -f /tmp/partitiontable.tmp -elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK'1' | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2) = 'ee' ]; then -# finding existent partitions in GPT - echo 'GPT' - for PART in $PARTS; do + #------ + DIALOGSTR="New partitions created:\n\n" + if [ $SLX_PARTITION_TYPE = 'GPT' ]; then + # create the command (CMD) that will convert the MSDOS type to GPT, change the unique GUIDs and set the bootable flags. + CMD="sgdisk -g /dev/$SLX_CHOOSEN_DISK" for (( i = 1; i < $COUNTER; i++ )); do if [ $i -ne 4 ]; then - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then - sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} 2> /dev/null | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" > /dev/null - if [ $? -eq 0 ]; then - echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." - PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART - NEEDED_SPACE=$(($NEEDED_SPACE-${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - break - fi + if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" != "82" ] && [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" != "83" ]; then + CMD=$CMD" -t "$i":"${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" + CMD=$CMD" -c "$i":\""${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]}"\"" + fi + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then + CMD=$CMD" -A "$i":set:2" + fi + fi + done + CMD=$CMD" > /dev/null 2> /dev/null" + $CMD + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -ne 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} + DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" + if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "82" ]; then + DIALOGSTR=$DIALOGSTR" GUID: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F\n" + elif [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "83" ]; then + DIALOGSTR=$DIALOGSTR" GUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4\n" + else + DIALOGSTR=$DIALOGSTR" GUID: "$ID"000000-0000-0000-0000-000000000000\n" fi + DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" fi done + else + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -lt 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} + DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" + DIALOGSTR=$DIALOGSTR" Type: Primary\n" + DIALOGSTR=$DIALOGSTR" ID: "$ID"\n" + DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" + elif [ $i -gt 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} + DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" + DIALOGSTR=$DIALOGSTR" Type: Logical\n" + DIALOGSTR=$DIALOGSTR" ID: "$ID"\n" + DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" + fi + done + fi +elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK'1' | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2) = 'ee' ]; then +# finding existent partitions in GPT + echo 'GPT' + NONEXISTENT_PARTITIONS="false" + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -ne 4 ]; then + for PART in $PARTS; do + if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "82" ]; then + sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} 2> /dev/null | grep "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F" > /dev/null + elif [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "83" ]; then + sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} 2> /dev/null | grep "0FC63DAF-8483-4772-8E79-3D69D8477DE4" > /dev/null + else + sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} 2> /dev/null | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" > /dev/null + fi + if [ $? -eq 0 ]; then + PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART + NEEDED_SPACE=$(($NEEDED_SPACE-${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + break + fi + done + if [[ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = "0" ]]; then + NONEXISTENT_PARTITIONS="true" + fi + fi done - echo "FREESPACE="$FREESPACE - echo "NEEDED_SPACE="$NEEDED_SPACE + # checking if there's sufficient space for the new partitions. if [[ $FREESPACE -lt $NEEDED_SPACE ]]; then dialog --msgbox "ERROR: Insufficient free space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 exit 1 fi + if [[ $NONEXISTENT_PARTITIONS = "false" ]]; then + DIALOGSTR="All your requested partitions already exists.\n\n" + DIALOGSTR=$DIALOGSTR"Partition ID\n" + for (( i = 1; i < $COUNTER; i++ )); do + if [[ $i -ne 4 ]]; then + DIALOGSTR=$DIALOGSTR"${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}\n" + fi + done + else + DIALOGSTR="New partitions created:\n\n" + for (( i = 1; i < $COUNTER; i++ )); do + j=1 + if [[ "${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]}" = "0" ]]; then + sgdisk /dev/$SLX_CHOOSEN_DISK -n $j:0:+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}G 2> /dev/null > /dev/null + while [[ $? -eq 4 ]]; do + j=$(($j+1)) + sgdisk /dev/$SLX_CHOOSEN_DISK -n $j:0:+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}G 2> /dev/null > /dev/null + done + PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$SLX_CHOOSEN_DISK$j + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} + DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]}")\n" + if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "82" ]; then + DIALOGSTR=$DIALOGSTR" GUID: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F\n" + elif [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "83" ]; then + DIALOGSTR=$DIALOGSTR" GUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4\n" + else + sgdisk /dev/$SLX_CHOOSEN_DISK -t $j:$ID"000000-0000-0000-0000-000000000000" -c $j:$MOUNTPOINT + DIALOGSTR=$DIALOGSTR" GUID: "$ID"000000-0000-0000-0000-000000000000\n" + fi + DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" + fi + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then + sgdisk /dev/$SLX_CHOOSEN_DISK -A $j:set:2 + fi + done + fi else # finding existent partitions in MS-DOS echo 'MSDOS' @@ -244,51 +345,4 @@ else fi fi -DIALOGSTR="New partitions created:\n\n" -if [ $SLX_PARTITION_TYPE = 'GPT' ]; then - # create the command (CMD) that will convert the MSDOS type to GPT and change the unique GUIDs - CMD="sgdisk -g /dev/$SLX_CHOOSEN_DISK" - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -ne 4 ]; then - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then - CMD=$CMD" -t "$i":"${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" - fi - CMD=$CMD" -c "$i":\""${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]}"\"" - fi - done - CMD=$CMD" > /dev/null 2> /dev/null" - $CMD - - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -ne 4 ]; then - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} - DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" - DIALOGSTR=$DIALOGSTR" GUID: "$ID"000000-0000-0000-0000-000000000000\n" - DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" - fi - done -else - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -lt 4 ]; then - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} - DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" - DIALOGSTR=$DIALOGSTR" Type: Primary\n" - DIALOGSTR=$DIALOGSTR" ID: "$ID"\n" - DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" - elif [ $i -gt 4 ]; then - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} - DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" - DIALOGSTR=$DIALOGSTR" Type: Logical\n" - DIALOGSTR=$DIALOGSTR" ID: "$ID"\n" - DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" - fi - done -fi - -dialog --msgbox "$DIALOGSTR" 0 0 +dialog --msgbox "$DIALOGSTR" 0 0 \ No newline at end of file -- cgit v1.2.3-55-g7522 From a31d00dd550522b829e263477cb2b5d2a481be44 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Thu, 28 Aug 2014 12:28:51 -0300 Subject: [partitioner] progress bar added on creation of new partitions. --- .../partitioner/opt/openslx/scripts/partitioner | 83 +++++++++++----------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/server/modules/partitioner/opt/openslx/scripts/partitioner b/server/modules/partitioner/opt/openslx/scripts/partitioner index 8eaf48a7..14f47389 100755 --- a/server/modules/partitioner/opt/openslx/scripts/partitioner +++ b/server/modules/partitioner/opt/openslx/scripts/partitioner @@ -93,7 +93,7 @@ for PARTITION in $SLX_PARTITION_TABLE; do if [ -n $3 ]; then PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$3 fi - if [ -n $4 ]; then + if [ -n "$4" ]; then PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=1 else PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=0 @@ -194,28 +194,24 @@ if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then START=$(($START+1*1024*1024/$SECTORSIZE)) fi done - sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null + sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null 2> /dev/null # rm -f /tmp/partitiontable.tmp #------ - DIALOGSTR="New partitions created:\n\n" if [ $SLX_PARTITION_TYPE = 'GPT' ]; then # create the command (CMD) that will convert the MSDOS type to GPT, change the unique GUIDs and set the bootable flags. - CMD="sgdisk -g /dev/$SLX_CHOOSEN_DISK" + DIALOGSTR="Creating Partitions...\n\n" + echo "0" | dialog --gauge "$DIALOGSTR" 0 0 0 + sgdisk /dev/$SLX_CHOOSEN_DISK -g >/dev/null 2>/dev/null for (( i = 1; i < $COUNTER; i++ )); do if [ $i -ne 4 ]; then + # dialog --msgbox "$DIALOGSTR" 0 0 if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" != "82" ] && [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" != "83" ]; then - CMD=$CMD" -t "$i":"${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" - CMD=$CMD" -c "$i":\""${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]}"\"" + sgdisk /dev/$SLX_CHOOSEN_DISK -t $i:${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}000000-0000-0000-0000-000000000000\ + sgdisk /dev/$SLX_CHOOSEN_DISK -c $i:\"${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]}\" >/dev/null 2>/dev/null fi if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then - CMD=$CMD" -A "$i":set:2" + sgdisk /dev/$SLX_CHOOSEN_DISK -A $i:set:2 >/dev/null 2>/dev/null fi - fi - done - CMD=$CMD" > /dev/null 2> /dev/null" - $CMD - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -ne 4 ]; then SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} @@ -228,6 +224,7 @@ if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then DIALOGSTR=$DIALOGSTR" GUID: "$ID"000000-0000-0000-0000-000000000000\n" fi DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" + echo $(( $i*100/($COUNTER-1) )) | dialog --gauge "$DIALOGSTR" 0 0 0 fi done else @@ -254,7 +251,7 @@ if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK'1' | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2) = 'ee' ]; then # finding existent partitions in GPT echo 'GPT' - NONEXISTENT_PARTITIONS="false" + NONEXISTENT_PARTITIONS=0 for (( i = 1; i < $COUNTER; i++ )); do if [ $i -ne 4 ]; then for PART in $PARTS; do @@ -272,7 +269,7 @@ elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK' fi done if [[ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = "0" ]]; then - NONEXISTENT_PARTITIONS="true" + NONEXISTENT_PARTITIONS=$(($NONEXISTENT_PARTITIONS+1)) fi fi done @@ -281,7 +278,7 @@ elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK' dialog --msgbox "ERROR: Insufficient free space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 exit 1 fi - if [[ $NONEXISTENT_PARTITIONS = "false" ]]; then + if [[ $NONEXISTENT_PARTITIONS -eq 0 ]]; then DIALOGSTR="All your requested partitions already exists.\n\n" DIALOGSTR=$DIALOGSTR"Partition ID\n" for (( i = 1; i < $COUNTER; i++ )); do @@ -290,33 +287,39 @@ elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK' fi done else - DIALOGSTR="New partitions created:\n\n" + DIALOGSTR="Creating partitions...\n\n" + echo "0" | dialog --gauge "$DIALOGSTR" 0 0 0 + CREATED=0 for (( i = 1; i < $COUNTER; i++ )); do j=1 - if [[ "${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]}" = "0" ]]; then - sgdisk /dev/$SLX_CHOOSEN_DISK -n $j:0:+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}G 2> /dev/null > /dev/null - while [[ $? -eq 4 ]]; do - j=$(($j+1)) - sgdisk /dev/$SLX_CHOOSEN_DISK -n $j:0:+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}G 2> /dev/null > /dev/null - done - PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$SLX_CHOOSEN_DISK$j - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} - DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]}")\n" - if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "82" ]; then - DIALOGSTR=$DIALOGSTR" GUID: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F\n" - elif [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "83" ]; then - DIALOGSTR=$DIALOGSTR" GUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4\n" - else - sgdisk /dev/$SLX_CHOOSEN_DISK -t $j:$ID"000000-0000-0000-0000-000000000000" -c $j:$MOUNTPOINT - DIALOGSTR=$DIALOGSTR" GUID: "$ID"000000-0000-0000-0000-000000000000\n" + if [[ $i -ne 4 ]]; then + if [[ "${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]}" = "0" ]]; then + sgdisk /dev/$SLX_CHOOSEN_DISK -n $j:0:+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}G 2> /dev/null > /dev/null + while [[ $? -eq 4 ]]; do + j=$(($j+1)) + sgdisk /dev/$SLX_CHOOSEN_DISK -n $j:0:+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}G 2> /dev/null > /dev/null + done + PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$SLX_CHOOSEN_DISK$j + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} + DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]}")\n" + if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "82" ]; then + DIALOGSTR=$DIALOGSTR" GUID: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F\n" + elif [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "83" ]; then + DIALOGSTR=$DIALOGSTR" GUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4\n" + else + sgdisk /dev/$SLX_CHOOSEN_DISK -t $j:$ID"000000-0000-0000-0000-000000000000" -c $j:$MOUNTPOINT >/dev/null 2>/dev/null + DIALOGSTR=$DIALOGSTR" GUID: "$ID"000000-0000-0000-0000-000000000000\n" + fi + DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" + CREATED=$(($CREATED+1)) + echo $(( $CREATED*100/($NONEXISTENT_PARTITIONS) )) | dialog --gauge "$DIALOGSTR" 0 0 0 + fi + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then + sgdisk /dev/$SLX_CHOOSEN_DISK -A $j:set:2 >/dev/null 2>/deb/null fi - DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" fi - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then - sgdisk /dev/$SLX_CHOOSEN_DISK -A $j:set:2 - fi done fi else @@ -344,5 +347,5 @@ else exit 1 fi fi - +DIALOGSTR=${DIALOGSTR/Creating Partitions.../New partitions created:} dialog --msgbox "$DIALOGSTR" 0 0 \ No newline at end of file -- cgit v1.2.3-55-g7522 From 11b8aae7d80d58f86b8c55b9c20fc06288004c3c Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Fri, 29 Aug 2014 09:46:07 -0300 Subject: [partitioner] minor fixes --- server/modules/partitioner/opt/openslx/scripts/partitioner | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/modules/partitioner/opt/openslx/scripts/partitioner b/server/modules/partitioner/opt/openslx/scripts/partitioner index 14f47389..75ac7105 100755 --- a/server/modules/partitioner/opt/openslx/scripts/partitioner +++ b/server/modules/partitioner/opt/openslx/scripts/partitioner @@ -120,7 +120,7 @@ if [ $DISKSIZE -lt $NEEDED_SPACE ]; then fi # choosing the partition type (MSDOS or GPT) if it wasn't set in config file -if [ -z "$SLX_PARTITION_TYPE" ]; then +if [ -z "$SLX_PARTITION_TYPE" ] && [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then if [ $SLX_AUTOMATIC_PARTITIONING = "yes" ]; then SLX_PARTITION_TYPE=msdos else @@ -228,6 +228,7 @@ if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then fi done else + DIALOGSTR="Creating Partitions...\n\n" for (( i = 1; i < $COUNTER; i++ )); do if [ $i -lt 4 ]; then SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) @@ -317,7 +318,7 @@ elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK' echo $(( $CREATED*100/($NONEXISTENT_PARTITIONS) )) | dialog --gauge "$DIALOGSTR" 0 0 0 fi if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then - sgdisk /dev/$SLX_CHOOSEN_DISK -A $j:set:2 >/dev/null 2>/deb/null + sgdisk /dev/$SLX_CHOOSEN_DISK -A $j:set:2 >/dev/null 2>/dev/null fi fi done -- cgit v1.2.3-55-g7522 From f36626142d0b637c6a7c5e0e51e8173221e83d58 Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Wed, 3 Sep 2014 16:17:04 -0300 Subject: [setup_partitions] reworked setup partitions script, testing needed --- .../opt/openslx/scripts/systemd-setup_partitions | 191 +++++++++++---------- 1 file changed, 104 insertions(+), 87 deletions(-) diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index cd42ee91..b282a486 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -13,8 +13,9 @@ # detecting swap and special partitions ############################################################################# -CONFIGPATH="./config" -. $CONFIGPATH + +# read global OpenSLX config +. /opt/openslx/config || { echo "Could not source config!"; exit 23; } # General formatter for the /tmp partition on a local harddisk diskfm () { @@ -88,109 +89,125 @@ mount_temp_fallback () { return 0 } -mount_part() { # $1=mountpoint, $2=partition(/dev/*) - mkdir -p "$1" - if ! mount -t auto -o noexec "${2}" "$1" 2> /dev/null ; then - diskfm "$2" "jfs xfs ext3" || continue - mount -t auto -o noexec "${2}" "$1" || continue +mount_partition() { + local mountpoint="$1" + local partition="$2" + local options="$3" + [[ $options == *persistent* ]] && local persistent="1" + + mkdir -p "$mountpoint" + if ! mount -t auto -o noexec "$partition" "$mountpoint" ; then + if [[ $persistent == 1 ]]; then + fsck "$partition" || return $? + mount -t auto -o noexec "$partition" "$mountpoint" || return $? + else + diskfm "$partition" "jfs xfs ext3" || return $? + mount -t auto -o noexec "$partition" "$mountpoint" || return $? + fi fi - echo -e "${2}\t${1}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" + echo -e "${partition}\t${mountpoint}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" } -# default case -if [ -z "$SLX_PARTITION_TABLE" ]; then - SLX_PARTITION_TABLE=' - 44,10G,/tmp - 45,10G,/var/scratch' +read_partitions() { + # create the /etc/disk.partition file with all the partitions and respective id's (MSDOS and GPT) + echo "PARTITION - ID" > "/etc/disk.partition" + for hd in $(cat /proc/partitions | tr -s ' ' | cut -d ' ' -f5 | grep -o -e "[a-z]*$"); do + echo -n "$hd (" >> "/etc/disk.partition" + sfdisk -d /dev/$hd 2>&1 | grep 'GPT' > /dev/null + if [ $? -eq 1 ]; then + echo "MSDOS)" >> "/etc/disk.partition" + fdisk /dev/$hd -l | sed -n "/^\/dev\//p" | tr -d '*' | tr -s ' ' | cut -d ' ' -f1,5 >> "/etc/disk.partition" + else + echo "GPT)" >> "/etc/disk.partition" + for part in $(cat /proc/partitions | tr -s ' ' | cut -d ' ' -f5 | grep -o -e "$hd[0-9][0-9]*$"); do + LINE="/dev/$part " + LINE=${LINE}$(sgdisk /dev/$hd -i ${part:3} | grep 'GUID code' | cut -d ' ' -f4) + echo -e $LINE >> "/etc/disk.partition" + done + fi + done + + echo "Partitions:" + cat "/etc/disk.partition" +} + +# default partitions, if not specifies in config (note: size is irrelevant for setup_partitions) +if [ -z "${SLX_PARTITION_TABLE}" ]; then + SLX_PARTITION_TABLE=' + 44,10G,/tmp + 45,10G,/var/scratch,persistent' fi -declare -A PARTTBL -COUNTER=1 for PARTITION in $SLX_PARTITION_TABLE; do IFS=, set $PARTITION - PARTTBL["$COUNTER/id"]=$1 - PARTTBL["$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") - PARTTBL["$COUNTER/mountpoint"]=$3 - if [ -e $4 ]; then - PARTTBL["$COUNTER/bootable"]=0 - else - PARTTBL["$COUNTER/bootable"]=1 - fi - PARTTBL["$COUNTER/persistent"]="no" - COUNTER=$(($COUNTER+1)) -done -unset IFS - - -# create the /etc/disk.partition file with all the partitions and respective id's (MSDOS and GPT) -echo "PARTITION - ID" > "/etc/disk.partition" -for hd in $(cat /proc/partitions | tr -s ' ' | cut -d ' ' -f5 | grep -o -e "[a-z]*$"); do - echo -n "$hd (" >> "/etc/disk.partition" - sfdisk -d /dev/$hd 2>&1 | grep 'GPT' > /dev/null - if [[ $? -eq 1 ]]; then - echo "MSDOS)" >> "/etc/disk.partition" - fdisk /dev/$hd -l | sed -n "/^\/dev\//p" | tr -d '*' | tr -s ' ' | cut -d ' ' -f1,5 >> "/etc/disk.partition" - else - echo "GPT)" >> "/etc/disk.partition" - for part in $(cat /proc/partitions | tr -s ' ' | cut -d ' ' -f5 | grep -o -e "$hd[0-9][0-9]*$"); do - LINE="/dev/$part " - LINE=$LINE$(sgdisk /dev/$hd -i ${part:3} | grep 'GUID code' | cut -d ' ' -f4) - echo -e $LINE >> "/etc/disk.partition" - done - fi -done + id=$1; shift + size=$1; shift + [ -e $1 ] && mountpoint="$1"; shift + [ $# -gt 0 ] && options="$*" -echo "Partitions:" -cat "/etc/disk.partition" -# Check for standard swap partitions and make them available to the system -HAVE_SWAP=no -for swppart in $(grep -e "82$\|0657FD6D-A4AB-43C4-84E5-0933C84B4F4F$" /etc/disk.partition | cut -d ' ' -f1); do - echo -e "$swppart\tswap\t\tswap\t\tdefaults\t 0 0" >> "/etc/fstab" - swapon "$swppart" -p 10 && HAVE_SWAP=yes # low priority, in case we have zram swap, prefer that) -done -# Put detected linux partitions (83) into /etc/fstab with "noauto" -for linuxpart in $(grep -e "83$\|0FC63DAF-8483-4772-8E79-3D69D8477DE4$" /etc/disk.partition | cut -d ' ' -f1); do - mkdir -p "/media/${linuxpart#/dev/*}" - echo -e "${linuxpart}\t/media/${linuxpart#/dev/*}\tauto\t\tnoauto,noexec\t 0 0" >> "/etc/fstab" -done + case $id in + 44) + HAVE_TEMP="no" + TMP_SIZE=$size + for tmppart in $(grep -e "44$\|44000000-0000-0000-0000-000000000000$" /etc/disk.partition | cut -d ' ' -f1); do + if diskfm "$tmppart"; then + # echo "$tmppart is mounted to /mnt/tmp at $(sysup)" >/tmp/tmpready + mount_temp "$mopt" "$tmppart" || continue + echo -e "${tmppart}\t/tmp\t\tauto\t\tnoexec\t 0 0" >> "/etc/fstab" + HAVE_TEMP="yes" + else + echo "formatting failed for some reason" + fi # Made this non-forking, systemd should handle it - 2013-05-28 + done + ;; + 46) + for openslxpart in $(grep -e "46$\|46000000-0000-0000-0000-000000000000$" /etc/disk.partition | cut -d ' ' -f1); do + mkdir -p "/media/${openslxpart#/dev/*}" + #mount -t auto ${openslxpart} /mnt/media/${openslxpart#/dev/*} \n\ + #test -d /mnt/media/${openslxpart#/dev/*}/home && \ + #ln -sf /media/${openslxpart#/dev/*} /var/home + echo -e "${openslxpart}\t/media/${openslxpart#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab" + done + ;; + 82) + # Check for standard swap partitions and make them available to the system + HAVE_SWAP=no + for swppart in $(grep -e "82$\|0657FD6D-A4AB-43C4-84E5-0933C84B4F4F$" /etc/disk.partition | cut -d ' ' -f1); do + echo -e "$swppart\tswap\t\tswap\t\tdefaults\t 0 0" >> "/etc/fstab" + swapon "$swppart" -p 10 && HAVE_SWAP=yes # low priority, in case we have zram swap, prefer that) + done + ;; + *) + for hdpartnr in $(grep -e "${id}$\|${id}000000-0000-0000-0000-000000000000$" /etc/disk.partition | cut -d ' ' -f1); do + mount_part "${mountpoint}" $hdpartnr $options + if [ $? -ne 0 ]; then + echo "Mount of partition $hdpartnr on ${mountpoint} failed with exit code: $?" + [ -d "${mountpoint}" ] && rm -r "${mountpoint}" + fi + done + ;; + esac -for openslxpart in $(grep -e "46$\|46000000-0000-0000-0000-000000000000$" /etc/disk.partition | cut -d ' ' -f1); do - mkdir -p "/media/${openslxpart#/dev/*}" - #mount -t auto ${openslxpart} /mnt/media/${openslxpart#/dev/*} \n\ - #test -d /mnt/media/${openslxpart#/dev/*}/home && \ - # ln -sf /media/${openslxpart#/dev/*} /var/home - echo -e "${openslxpart}\t/media/${openslxpart#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab" done -HAVE_TEMP="no" -for (( i = 1; i < $COUNTER; i++ )); do - for hdpartnr in $(grep -e ${PARTTBL["$i/id"]}"$\|"${PARTTBL["$i/id"]}"000000-0000-0000-0000-000000000000$" /etc/disk.partition | cut -d ' ' -f1); do - if [ "${PARTTBL["$i/mountpoint"]}" = "/tmp" ]; then - if diskfm "$hdpartnr"; then - # echo "$hdpartnr is mounted to /mnt/tmp at $(sysup)" >/tmp/tmpready - mount_temp "$mopt" "$hdpartnr" || continue - echo -e "${hdpartnr}\t/tmp\t\tauto\t\tnoexec\t 0 0" >> "/etc/fstab" - HAVE_TEMP="yes" - PARTTBL["$i/persistent"]="yes" - else - echo "formatting failed for some reason" - fi # Made this non-forking, systemd should handle it - 2013-05-28 - elif [ "${PARTTBL["$i/id"]}" != "82" ] && [ "${PARTTBL["$i/id"]}" != "83" ] && [ "${PARTTBL["$i/id"]}" != "46" ]; then - mount_part "${PARTTBL["$i/mountpoint"]}" $hdpartnr - PARTTBL["$i/persistent"]="yes" - fi - done - [ "${PARTTBL["$i/persistent"]}" = "no" -a -d "${PARTTBL["$i/mountpoint"]}" ] && rm -f "${PARTTBL["$i/mountpoint"]}" +#Put detected linux partitions (83) into /etc/fstab with "noauto" +for linuxpart in $(grep -e "83$\|0FC63DAF-8483-4772-8E79-3D69D8477DE4$" /etc/disk.partition | cut -d ' ' -f1); do + mountpoint="/media" + mkdir -p "${mountpoint}/${linuxpart#/dev/*}" + echo -e "${linuxpart}\t${mountpoint}/${linuxpart#/dev/*}\tauto\t\tnoauto,noexec\t 0 0" >> "/etc/fstab" done mount -a + # Make huge tmpfs if nothing could be mounted for /tmp if [ "$HAVE_TEMP" = "no" ]; then - mount_temp -t tmpfs -o size=20G none - slxlog "partition-temp" "Running /tmp on tmpfs only!" "/etc/disk.partition" + mount_temp -t tmpfs -o size=${TMP_SIZE} none + slxlog "partition-temp" "Running /tmp on tmpfs only!" "/etc/disk.partition" fi + if [ "$HAVE_SWAP" = "no" ]; then slxlog "partition-swap" "Have no (formatted) swap partition, using zram swap only!" "/etc/disk.partition" fi -exit 0 \ No newline at end of file + +exit 0 -- cgit v1.2.3-55-g7522 From 8a4371379854de23034d67c3dfc835f6c70d0937 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Thu, 4 Sep 2014 10:33:05 -0300 Subject: [partitioner] changed the way GPT partitions are created. --- .../partitioner/opt/openslx/scripts/partitioner | 56 +++++++++++----------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/server/modules/partitioner/opt/openslx/scripts/partitioner b/server/modules/partitioner/opt/openslx/scripts/partitioner index 75ac7105..23e90b18 100755 --- a/server/modules/partitioner/opt/openslx/scripts/partitioner +++ b/server/modules/partitioner/opt/openslx/scripts/partitioner @@ -174,42 +174,21 @@ if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then # delete partition table sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2> /dev/null # erase all partitions - # constructing the sfdisk input file - echo "unit: sectors - "> /tmp/partitiontable.tmp - - START=$((1*1024*1024/$SECTORSIZE)) - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -ne 4 ]; then - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024/$SECTORSIZE)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID", bootable " >> /tmp/partitiontable.tmp - else - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID >> /tmp/partitiontable.tmp - fi - START=$(($START+$SIZE+1*1024*1024/$SECTORSIZE)) - else - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$(($DISKSIZE/$SECTORSIZE-1))", Id= 5" >> /tmp/partitiontable.tmp - START=$(($START+1*1024*1024/$SECTORSIZE)) - fi - done - sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null 2> /dev/null - # rm -f /tmp/partitiontable.tmp - #------ if [ $SLX_PARTITION_TYPE = 'GPT' ]; then - # create the command (CMD) that will convert the MSDOS type to GPT, change the unique GUIDs and set the bootable flags. DIALOGSTR="Creating Partitions...\n\n" echo "0" | dialog --gauge "$DIALOGSTR" 0 0 0 - sgdisk /dev/$SLX_CHOOSEN_DISK -g >/dev/null 2>/dev/null - for (( i = 1; i < $COUNTER; i++ )); do + for (( i = 1; i < $COUNTER; i++ )); do # loop that will create each GPT partition, change GUIDS, change names, and set bootable flags. if [ $i -ne 4 ]; then + sgdisk /dev/$SLX_CHOOSEN_DISK -n $i:0:+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}G 2> /dev/null > /dev/null # dialog --msgbox "$DIALOGSTR" 0 0 - if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" != "82" ] && [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" != "83" ]; then + if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "82" ] || [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "83" ]; then + sgdisk /dev/$SLX_CHOOSEN_DISK -t $i:${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}00 + else sgdisk /dev/$SLX_CHOOSEN_DISK -t $i:${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}000000-0000-0000-0000-000000000000\ sgdisk /dev/$SLX_CHOOSEN_DISK -c $i:\"${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]}\" >/dev/null 2>/dev/null fi if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then + # set the bootable flag sgdisk /dev/$SLX_CHOOSEN_DISK -A $i:set:2 >/dev/null 2>/dev/null fi SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) @@ -228,6 +207,29 @@ if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then fi done else + # constructing the sfdisk input file + echo "unit: sectors + "> /tmp/partitiontable.tmp + + START=$((1*1024*1024/$SECTORSIZE)) + for (( i = 1; i < $COUNTER; i++ )); do + if [ $i -ne 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024/$SECTORSIZE)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} + if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID", bootable " >> /tmp/partitiontable.tmp + else + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID >> /tmp/partitiontable.tmp + fi + START=$(($START+$SIZE+1*1024*1024/$SECTORSIZE)) + else + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$(($DISKSIZE/$SECTORSIZE-1))", Id= 5" >> /tmp/partitiontable.tmp + START=$(($START+1*1024*1024/$SECTORSIZE)) + fi + done + sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null 2> /dev/null + # rm -f /tmp/partitiontable.tmp + DIALOGSTR="Creating Partitions...\n\n" for (( i = 1; i < $COUNTER; i++ )); do if [ $i -lt 4 ]; then -- cgit v1.2.3-55-g7522 From 4bd3e981b74296b2108f20be4a3592291e07a047 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Thu, 4 Sep 2014 11:52:18 -0300 Subject: [partitioner] minor fixes. --- .../opt/openslx/scripts/systemd-setup_partitions | 26 +++++++++++++++------- .../partitioner/opt/openslx/scripts/partitioner | 2 +- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index b282a486..236bb157 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -15,7 +15,9 @@ ############################################################################# # read global OpenSLX config -. /opt/openslx/config || { echo "Could not source config!"; exit 23; } +. config || { echo "Could not source config!"; exit 23; } + +set -xv # General formatter for the /tmp partition on a local harddisk diskfm () { @@ -89,7 +91,7 @@ mount_temp_fallback () { return 0 } -mount_partition() { +mount_partition () { local mountpoint="$1" local partition="$2" local options="$3" @@ -108,7 +110,7 @@ mount_partition() { echo -e "${partition}\t${mountpoint}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" } -read_partitions() { +read_partitions () { # create the /etc/disk.partition file with all the partitions and respective id's (MSDOS and GPT) echo "PARTITION - ID" > "/etc/disk.partition" for hd in $(cat /proc/partitions | tr -s ' ' | cut -d ' ' -f5 | grep -o -e "[a-z]*$"); do @@ -138,13 +140,19 @@ if [ -z "${SLX_PARTITION_TABLE}" ]; then 45,10G,/var/scratch,persistent' fi +read_partitions + for PARTITION in $SLX_PARTITION_TABLE; do IFS=, set $PARTITION - id=$1; shift - size=$1; shift - [ -e $1 ] && mountpoint="$1"; shift - [ $# -gt 0 ] && options="$*" + id=$1 + shift + size=$1 + shift + mountpoint="$1" + shift + options="$*" + unset IFS case $id in 44) @@ -180,7 +188,7 @@ for PARTITION in $SLX_PARTITION_TABLE; do ;; *) for hdpartnr in $(grep -e "${id}$\|${id}000000-0000-0000-0000-000000000000$" /etc/disk.partition | cut -d ' ' -f1); do - mount_part "${mountpoint}" $hdpartnr $options + mount_partition "${mountpoint}" $hdpartnr $options if [ $? -ne 0 ]; then echo "Mount of partition $hdpartnr on ${mountpoint} failed with exit code: $?" [ -d "${mountpoint}" ] && rm -r "${mountpoint}" @@ -210,4 +218,6 @@ if [ "$HAVE_SWAP" = "no" ]; then slxlog "partition-swap" "Have no (formatted) swap partition, using zram swap only!" "/etc/disk.partition" fi +set +xv + exit 0 diff --git a/server/modules/partitioner/opt/openslx/scripts/partitioner b/server/modules/partitioner/opt/openslx/scripts/partitioner index 23e90b18..03e089c4 100755 --- a/server/modules/partitioner/opt/openslx/scripts/partitioner +++ b/server/modules/partitioner/opt/openslx/scripts/partitioner @@ -93,7 +93,7 @@ for PARTITION in $SLX_PARTITION_TABLE; do if [ -n $3 ]; then PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$3 fi - if [ -n "$4" ]; then + if [ "$4" = "bootable" ]; then PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=1 else PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=0 -- cgit v1.2.3-55-g7522 From a12eb5eeee3ffc1711fae8142160079e86a345a0 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Fri, 5 Sep 2014 12:28:43 -0300 Subject: [partitioner] partitioner adapted to work with more options in SLX_PARTITION_TABLE --- .../modules/partitioner/opt/openslx/scripts/partitioner | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/server/modules/partitioner/opt/openslx/scripts/partitioner b/server/modules/partitioner/opt/openslx/scripts/partitioner index 03e089c4..0b682dba 100755 --- a/server/modules/partitioner/opt/openslx/scripts/partitioner +++ b/server/modules/partitioner/opt/openslx/scripts/partitioner @@ -12,8 +12,8 @@ BLOCKSIZE=1024 . $CONFIGPATH # testing if the sizes and ID's of the disk is defined in the config file - # picking disk that will be used + DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") if [ -z "$DISKS" ]; then dialog --msgbox "ERROR: Can't find an hard disk." 10 40 @@ -88,12 +88,17 @@ for PARTITION in $SLX_PARTITION_TABLE; do if [ $COUNTER -eq 4 ]; then COUNTER=$(($COUNTER+1)) fi + echo "id: $1" PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/id"]=$1 - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") - if [ -n $3 ]; then - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$3 + shift + echo "size: $1" + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/size"]=$(echo $1 | egrep -o "[0-9]*") + shift + if [ -n $1 ]; then + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$1 fi - if [ "$4" = "bootable" ]; then + shift + if [[ "$*" == *bootable* ]]; then PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=1 else PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=0 -- cgit v1.2.3-55-g7522 From d34ffd2eed756d1fa719c456ecd2b93a0afce3db Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Fri, 5 Sep 2014 12:28:50 -0300 Subject: [setup-partitions] rewrote script to support ash --- .../opt/openslx/scripts/systemd-setup_partitions | 27 +++++++++++----------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index 236bb157..94b85651 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/ash # Copyright (c) 2013 - OpenSLX GmbH # # This program is free software distributed under the GPL version 2. @@ -15,9 +15,7 @@ ############################################################################# # read global OpenSLX config -. config || { echo "Could not source config!"; exit 23; } - -set -xv +. ~/config || { echo "Could not source config!"; exit 23; } # General formatter for the /tmp partition on a local harddisk diskfm () { @@ -94,17 +92,17 @@ mount_temp_fallback () { mount_partition () { local mountpoint="$1" local partition="$2" - local options="$3" - [[ $options == *persistent* ]] && local persistent="1" mkdir -p "$mountpoint" - if ! mount -t auto -o noexec "$partition" "$mountpoint" ; then - if [[ $persistent == 1 ]]; then + if ! blkid -s TYPE | grep "${partition}" ; then + echo "No fs found for partition, formating..." + diskfm "$partition" "jfs xfs ext3" || return $? + mount -t auto -o noexec "$partition" "$mountpoint" || return $? + else + if ! mount -t auto -o noexec "$partition" "$mountpoint" ; then + echo "Mount failed with code $?, trying fsck..." fsck "$partition" || return $? mount -t auto -o noexec "$partition" "$mountpoint" || return $? - else - diskfm "$partition" "jfs xfs ext3" || return $? - mount -t auto -o noexec "$partition" "$mountpoint" || return $? fi fi echo -e "${partition}\t${mountpoint}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" @@ -188,9 +186,10 @@ for PARTITION in $SLX_PARTITION_TABLE; do ;; *) for hdpartnr in $(grep -e "${id}$\|${id}000000-0000-0000-0000-000000000000$" /etc/disk.partition | cut -d ' ' -f1); do - mount_partition "${mountpoint}" $hdpartnr $options - if [ $? -ne 0 ]; then - echo "Mount of partition $hdpartnr on ${mountpoint} failed with exit code: $?" + mount_partition "${mountpoint}" $hdpartnr + mount_status=$? + if [ $mount_status -ne 0 ]; then + echo "Mount of partition $hdpartnr on ${mountpoint} failed with exit code: $mount_status" [ -d "${mountpoint}" ] && rm -r "${mountpoint}" fi done -- cgit v1.2.3-55-g7522 From 2a24fc619db58612307bed6ceac5b2cdc458fcfd Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Wed, 10 Sep 2014 16:28:14 -0300 Subject: [setup_partitions] remote debug code --- .../rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions | 2 -- 1 file changed, 2 deletions(-) diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index 94b85651..a51c084a 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -217,6 +217,4 @@ if [ "$HAVE_SWAP" = "no" ]; then slxlog "partition-swap" "Have no (formatted) swap partition, using zram swap only!" "/etc/disk.partition" fi -set +xv - exit 0 -- cgit v1.2.3-55-g7522 From def49da5280791426959c39692d1d21e77387fdb Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Wed, 10 Sep 2014 16:29:07 -0300 Subject: [setup_partitions] add sfdisk and sgdisk to stage32 --- remote/rootfs/rootfs-stage32/module.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/remote/rootfs/rootfs-stage32/module.conf b/remote/rootfs/rootfs-stage32/module.conf index 3a160a36..febd1fbb 100644 --- a/remote/rootfs/rootfs-stage32/module.conf +++ b/remote/rootfs/rootfs-stage32/module.conf @@ -38,6 +38,8 @@ REQUIRED_BINARIES=" getent ldconfig grep + sfdisk + sgdisk " REQUIRED_LIBRARIES=" libcap -- cgit v1.2.3-55-g7522 From 4990ccec1e138ff9a22c73dc29b740e130fcbdb8 Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Wed, 10 Sep 2014 16:32:00 -0300 Subject: [setup_partitions] corrected config path --- .../rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index a51c084a..8cdfe21a 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -15,7 +15,7 @@ ############################################################################# # read global OpenSLX config -. ~/config || { echo "Could not source config!"; exit 23; } +. /opt/openslx/config || { echo "Could not source config!"; exit 23; } # General formatter for the /tmp partition on a local harddisk diskfm () { -- cgit v1.2.3-55-g7522 From 25f25ec6d6fd3f5212d008ce9df8816b63492126 Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Thu, 11 Sep 2014 10:29:22 -0300 Subject: [partitioner] add systemd service --- .../multi-user.target.wants/partitioner.service | 1 + .../etc/systemd/system/partitioner.service | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 120000 server/modules/partitioner/etc/systemd/system/multi-user.target.wants/partitioner.service create mode 100644 server/modules/partitioner/etc/systemd/system/partitioner.service diff --git a/server/modules/partitioner/etc/systemd/system/multi-user.target.wants/partitioner.service b/server/modules/partitioner/etc/systemd/system/multi-user.target.wants/partitioner.service new file mode 120000 index 00000000..48defa3e --- /dev/null +++ b/server/modules/partitioner/etc/systemd/system/multi-user.target.wants/partitioner.service @@ -0,0 +1 @@ +../partitioner.service \ No newline at end of file diff --git a/server/modules/partitioner/etc/systemd/system/partitioner.service b/server/modules/partitioner/etc/systemd/system/partitioner.service new file mode 100644 index 00000000..1b6160c8 --- /dev/null +++ b/server/modules/partitioner/etc/systemd/system/partitioner.service @@ -0,0 +1,20 @@ +[Unit] +Description=Runs the OpenSLX Partitioning Tool +After=killsplash.service +After=systemd-vconsole-setup.service +Before=display-manager.service getty@tty1.service getty@ttyUSB0.service +Before=serial-getty@ttyS0.service serial-getty@ttyO0.service serial-getty@ttyO2.service +Before=serial-getty@ttyAMA0.service serial-getty@ttymxc0.service serial-getty@ttymxc3.service +Conflicts=killsplash.service +ConditionKernelCommandLine=partition + +[Service] +Type=oneshot +ExecStart=/opt/openslx/scripts/systemd-partitioner +TimeoutSec=0 +RemainAfterExit=yes +SysVStartPriority=99 +StandardInput=tty +StandardOutput=tty + + -- cgit v1.2.3-55-g7522 From 4680624dd23bee959e60946457a2bfbec74e5701 Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Fri, 12 Sep 2014 15:39:42 -0300 Subject: [partitioner] corrected config path --- server/modules/partitioner/opt/openslx/scripts/partitioner | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/modules/partitioner/opt/openslx/scripts/partitioner b/server/modules/partitioner/opt/openslx/scripts/partitioner index 0b682dba..a7ba064a 100755 --- a/server/modules/partitioner/opt/openslx/scripts/partitioner +++ b/server/modules/partitioner/opt/openslx/scripts/partitioner @@ -3,8 +3,7 @@ # set -e PARTITIONSPATH="/proc/partitions" -CONFIGPATH="./config" -# CONFIGPATH="/opt/openslx/config" +CONFIGPATH="/opt/openslx/config" # BLOCKSIZE=$(sfdisk -l /dev/$SLX_CHOOSEN_DISK | grep -o -e "blocks of [0-9]* bytes" | cut -d ' ' -f3) BLOCKSIZE=1024 @@ -356,4 +355,4 @@ else fi fi DIALOGSTR=${DIALOGSTR/Creating Partitions.../New partitions created:} -dialog --msgbox "$DIALOGSTR" 0 0 \ No newline at end of file +dialog --msgbox "$DIALOGSTR" 0 0 -- cgit v1.2.3-55-g7522 From 7c0e77bd716e58fbfa51aea7d9eb3447336b2447 Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Fri, 12 Sep 2014 16:02:05 -0300 Subject: [setup_partitions] make mounting more verbose --- .../data/opt/openslx/scripts/systemd-setup_partitions | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index 8cdfe21a..1f29ec7d 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -57,7 +57,8 @@ diskfm () { mopt="-o noexec" ;; esac - mkfs.$fs ${fopt} "${target}" + echo "formatting ${target} with $fs..." + mkfs.$fs ${fopt} "${target}" 2> /dev/null fi [ -n "$found" ] && break fi @@ -95,12 +96,12 @@ mount_partition () { mkdir -p "$mountpoint" if ! blkid -s TYPE | grep "${partition}" ; then - echo "No fs found for partition, formating..." + echo "No fs found for ${partition}, formating..." diskfm "$partition" "jfs xfs ext3" || return $? mount -t auto -o noexec "$partition" "$mountpoint" || return $? else if ! mount -t auto -o noexec "$partition" "$mountpoint" ; then - echo "Mount failed with code $?, trying fsck..." + echo "Mount of $partition on $mountpoint failed with code $?, trying fsck..." fsck "$partition" || return $? mount -t auto -o noexec "$partition" "$mountpoint" || return $? fi @@ -135,7 +136,8 @@ read_partitions () { if [ -z "${SLX_PARTITION_TABLE}" ]; then SLX_PARTITION_TABLE=' 44,10G,/tmp - 45,10G,/var/scratch,persistent' + 45,10G,/var/scratch,persistent + 82,4G' fi read_partitions @@ -157,13 +159,15 @@ for PARTITION in $SLX_PARTITION_TABLE; do HAVE_TEMP="no" TMP_SIZE=$size for tmppart in $(grep -e "44$\|44000000-0000-0000-0000-000000000000$" /etc/disk.partition | cut -d ' ' -f1); do + echo "tmp partition found, formatting and mounting..." if diskfm "$tmppart"; then # echo "$tmppart is mounted to /mnt/tmp at $(sysup)" >/tmp/tmpready mount_temp "$mopt" "$tmppart" || continue echo -e "${tmppart}\t/tmp\t\tauto\t\tnoexec\t 0 0" >> "/etc/fstab" HAVE_TEMP="yes" + echo "$tmppart mounted on /tmp" else - echo "formatting failed for some reason" + echo "formatting tmp partition failed for some reason" fi # Made this non-forking, systemd should handle it - 2013-05-28 done ;; @@ -174,6 +178,7 @@ for PARTITION in $SLX_PARTITION_TABLE; do #test -d /mnt/media/${openslxpart#/dev/*}/home && \ #ln -sf /media/${openslxpart#/dev/*} /var/home echo -e "${openslxpart}\t/media/${openslxpart#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab" + echo "special partition ${openslxpart} mounted on /media/${openslxpart#/dev/*}" done ;; 82) @@ -182,6 +187,7 @@ for PARTITION in $SLX_PARTITION_TABLE; do for swppart in $(grep -e "82$\|0657FD6D-A4AB-43C4-84E5-0933C84B4F4F$" /etc/disk.partition | cut -d ' ' -f1); do echo -e "$swppart\tswap\t\tswap\t\tdefaults\t 0 0" >> "/etc/fstab" swapon "$swppart" -p 10 && HAVE_SWAP=yes # low priority, in case we have zram swap, prefer that) + echo "swap partition found and activated" done ;; *) @@ -191,6 +197,8 @@ for PARTITION in $SLX_PARTITION_TABLE; do if [ $mount_status -ne 0 ]; then echo "Mount of partition $hdpartnr on ${mountpoint} failed with exit code: $mount_status" [ -d "${mountpoint}" ] && rm -r "${mountpoint}" + else + echo "special partition $hdpartnr mounted on ${mountpoint}" fi done ;; @@ -203,6 +211,7 @@ for linuxpart in $(grep -e "83$\|0FC63DAF-8483-4772-8E79-3D69D8477DE4$" /etc/dis mountpoint="/media" mkdir -p "${mountpoint}/${linuxpart#/dev/*}" echo -e "${linuxpart}\t${mountpoint}/${linuxpart#/dev/*}\tauto\t\tnoauto,noexec\t 0 0" >> "/etc/fstab" + echo "linux partition ${linuxpart} mounted on ${mountpoint}/${linuxpart#/dev/*}" done mount -a -- cgit v1.2.3-55-g7522 From 5efbc0fa19e6b4f3d24f849a197af5f136d17355 Mon Sep 17 00:00:00 2001 From: Lucas Affonso Xavier de Morais Date: Fri, 26 Sep 2014 10:59:39 -0300 Subject: [setup_partitions] -e option removed from all the echo commands, for ash compatibility. --- partitioner/config | 17 ----------------- .../data/opt/openslx/scripts/systemd-setup_partitions | 12 ++++++------ 2 files changed, 6 insertions(+), 23 deletions(-) delete mode 100644 partitioner/config diff --git a/partitioner/config b/partitioner/config deleted file mode 100644 index bf34dcca..00000000 --- a/partitioner/config +++ /dev/null @@ -1,17 +0,0 @@ -#Partitions -SLX_PARTITION_TYPE='GPT' -# SLX_CHOOSEN_DISK='sda' -SLX_AUTOMATIC_PARTITIONING='no' -SLX_DELETE_PARTITION_TABLE='no' -SLX_PARTITION_TABLE=' -44,10G,/tmp -43,10G,/boot,bootable -42,10G,/cache -41,10G,/home -40,5G,/teste' - -#Create GPT or msdos style partition table -#Choose disk to partition -#Don't be interactive, use carefully -#Override existing partitions -#Partition table in the format: ID,Size,Mountpoint,Bootable \ No newline at end of file diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index 1f29ec7d..bd80890b 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -106,7 +106,7 @@ mount_partition () { mount -t auto -o noexec "$partition" "$mountpoint" || return $? fi fi - echo -e "${partition}\t${mountpoint}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" + echo "${partition}\t${mountpoint}\tauto\t\tnoauto,noexec\t\t 0 0" >> "/etc/fstab" } read_partitions () { @@ -123,7 +123,7 @@ read_partitions () { for part in $(cat /proc/partitions | tr -s ' ' | cut -d ' ' -f5 | grep -o -e "$hd[0-9][0-9]*$"); do LINE="/dev/$part " LINE=${LINE}$(sgdisk /dev/$hd -i ${part:3} | grep 'GUID code' | cut -d ' ' -f4) - echo -e $LINE >> "/etc/disk.partition" + echo $LINE >> "/etc/disk.partition" done fi done @@ -163,7 +163,7 @@ for PARTITION in $SLX_PARTITION_TABLE; do if diskfm "$tmppart"; then # echo "$tmppart is mounted to /mnt/tmp at $(sysup)" >/tmp/tmpready mount_temp "$mopt" "$tmppart" || continue - echo -e "${tmppart}\t/tmp\t\tauto\t\tnoexec\t 0 0" >> "/etc/fstab" + echo "${tmppart}\t/tmp\t\tauto\t\tnoexec\t 0 0" >> "/etc/fstab" HAVE_TEMP="yes" echo "$tmppart mounted on /tmp" else @@ -177,7 +177,7 @@ for PARTITION in $SLX_PARTITION_TABLE; do #mount -t auto ${openslxpart} /mnt/media/${openslxpart#/dev/*} \n\ #test -d /mnt/media/${openslxpart#/dev/*}/home && \ #ln -sf /media/${openslxpart#/dev/*} /var/home - echo -e "${openslxpart}\t/media/${openslxpart#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab" + echo "${openslxpart}\t/media/${openslxpart#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab" echo "special partition ${openslxpart} mounted on /media/${openslxpart#/dev/*}" done ;; @@ -185,7 +185,7 @@ for PARTITION in $SLX_PARTITION_TABLE; do # Check for standard swap partitions and make them available to the system HAVE_SWAP=no for swppart in $(grep -e "82$\|0657FD6D-A4AB-43C4-84E5-0933C84B4F4F$" /etc/disk.partition | cut -d ' ' -f1); do - echo -e "$swppart\tswap\t\tswap\t\tdefaults\t 0 0" >> "/etc/fstab" + echo "$swppart\tswap\t\tswap\t\tdefaults\t 0 0" >> "/etc/fstab" swapon "$swppart" -p 10 && HAVE_SWAP=yes # low priority, in case we have zram swap, prefer that) echo "swap partition found and activated" done @@ -210,7 +210,7 @@ done for linuxpart in $(grep -e "83$\|0FC63DAF-8483-4772-8E79-3D69D8477DE4$" /etc/disk.partition | cut -d ' ' -f1); do mountpoint="/media" mkdir -p "${mountpoint}/${linuxpart#/dev/*}" - echo -e "${linuxpart}\t${mountpoint}/${linuxpart#/dev/*}\tauto\t\tnoauto,noexec\t 0 0" >> "/etc/fstab" + echo "${linuxpart}\t${mountpoint}/${linuxpart#/dev/*}\tauto\t\tnoauto,noexec\t 0 0" >> "/etc/fstab" echo "linux partition ${linuxpart} mounted on ${mountpoint}/${linuxpart#/dev/*}" done -- cgit v1.2.3-55-g7522 From 8ec740c8c3d8aecedfa790589cd2c71945715db1 Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Thu, 9 Oct 2014 16:11:18 -0300 Subject: [partitioner] reworked partitioner and setup-partitions, tested and working --- .../opt/openslx/scripts/systemd-setup_partitions | 18 +- .../etc/systemd/system/partitioner.service | 4 +- .../partitioner/opt/openslx/scripts/partitioner | 358 --------------- .../opt/openslx/scripts/systemd-partitioner | 482 +++++++++++++++++++++ 4 files changed, 494 insertions(+), 368 deletions(-) delete mode 100755 server/modules/partitioner/opt/openslx/scripts/partitioner create mode 100755 server/modules/partitioner/opt/openslx/scripts/systemd-partitioner diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index bd80890b..b18a97d5 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -58,7 +58,7 @@ diskfm () { ;; esac echo "formatting ${target} with $fs..." - mkfs.$fs ${fopt} "${target}" 2> /dev/null + mkfs.$fs ${fopt} "${target}" > /dev/null 2>&1 fi [ -n "$found" ] && break fi @@ -74,7 +74,7 @@ mount_temp () { mount $@ /tmp || return 1 chmod a+rwxt /tmp # Move stuff from working directory, which is old /tmp, to new /tmp just mounted - mv ./* ./.[!.]* ./..?* /tmp/ 2> /dev/null + mv ./* ./.[!.]* ./..?* /tmp/ > /dev/null 2>&1 local OLD=$(LANG=C ls -alh | grep -v -E ' \.\.?$' | grep -v '^total') [ -n "$OLD" ] && echo -- "Leftovers:" && echo -- "$OLD" cd "$PRE" @@ -82,7 +82,7 @@ mount_temp () { mount_temp_fallback () { mkdir -p /tmptmp - mv /tmp/* /tmp/.* /tmptmp/ 2> /dev/null + mv /tmp/* /tmp/.* /tmptmp/ > /dev/null 2>&1 mount $@ /tmp || return 1 chmod a+rwxt /tmp mv /tmptmp/* /tmptmp/.* /tmp/ @@ -95,7 +95,7 @@ mount_partition () { local partition="$2" mkdir -p "$mountpoint" - if ! blkid -s TYPE | grep "${partition}" ; then + if ! blkid -s TYPE | grep "${partition}" ; then echo "No fs found for ${partition}, formating..." diskfm "$partition" "jfs xfs ext3" || return $? mount -t auto -o noexec "$partition" "$mountpoint" || return $? @@ -130,6 +130,7 @@ read_partitions () { echo "Partitions:" cat "/etc/disk.partition" + echo "------------------------------------------------------" } # default partitions, if not specifies in config (note: size is irrelevant for setup_partitions) @@ -185,9 +186,9 @@ for PARTITION in $SLX_PARTITION_TABLE; do # Check for standard swap partitions and make them available to the system HAVE_SWAP=no for swppart in $(grep -e "82$\|0657FD6D-A4AB-43C4-84E5-0933C84B4F4F$" /etc/disk.partition | cut -d ' ' -f1); do - echo "$swppart\tswap\t\tswap\t\tdefaults\t 0 0" >> "/etc/fstab" - swapon "$swppart" -p 10 && HAVE_SWAP=yes # low priority, in case we have zram swap, prefer that) - echo "swap partition found and activated" + echo -e "$swppart\tswap\t\tswap\t\tdefaults\t 0 0" >> "/etc/fstab" + mkswap "$swppart" && swapon "$swppart" -p 10 && HAVE_SWAP=yes # low priority, in case we have zram swap, prefer that) + [ $HAVE_SWAP = "yes" ] && echo "swap partition found and activated" done ;; *) @@ -203,7 +204,7 @@ for PARTITION in $SLX_PARTITION_TABLE; do done ;; esac - + echo "------------------------------------------------------" done #Put detected linux partitions (83) into /etc/fstab with "noauto" @@ -212,6 +213,7 @@ for linuxpart in $(grep -e "83$\|0FC63DAF-8483-4772-8E79-3D69D8477DE4$" /etc/dis mkdir -p "${mountpoint}/${linuxpart#/dev/*}" echo "${linuxpart}\t${mountpoint}/${linuxpart#/dev/*}\tauto\t\tnoauto,noexec\t 0 0" >> "/etc/fstab" echo "linux partition ${linuxpart} mounted on ${mountpoint}/${linuxpart#/dev/*}" + echo "------------------------------------------------------" done mount -a diff --git a/server/modules/partitioner/etc/systemd/system/partitioner.service b/server/modules/partitioner/etc/systemd/system/partitioner.service index 1b6160c8..85b41597 100644 --- a/server/modules/partitioner/etc/systemd/system/partitioner.service +++ b/server/modules/partitioner/etc/systemd/system/partitioner.service @@ -6,7 +6,7 @@ Before=display-manager.service getty@tty1.service getty@ttyUSB0.service Before=serial-getty@ttyS0.service serial-getty@ttyO0.service serial-getty@ttyO2.service Before=serial-getty@ttyAMA0.service serial-getty@ttymxc0.service serial-getty@ttymxc3.service Conflicts=killsplash.service -ConditionKernelCommandLine=partition +ConditionKernelCommandLine=partitioner [Service] Type=oneshot @@ -16,5 +16,5 @@ RemainAfterExit=yes SysVStartPriority=99 StandardInput=tty StandardOutput=tty - +StandardError=syslog diff --git a/server/modules/partitioner/opt/openslx/scripts/partitioner b/server/modules/partitioner/opt/openslx/scripts/partitioner deleted file mode 100755 index a7ba064a..00000000 --- a/server/modules/partitioner/opt/openslx/scripts/partitioner +++ /dev/null @@ -1,358 +0,0 @@ -#!/bin/bash - -# set -e - -PARTITIONSPATH="/proc/partitions" -CONFIGPATH="/opt/openslx/config" - -# BLOCKSIZE=$(sfdisk -l /dev/$SLX_CHOOSEN_DISK | grep -o -e "blocks of [0-9]* bytes" | cut -d ' ' -f3) -BLOCKSIZE=1024 - -. $CONFIGPATH -# testing if the sizes and ID's of the disk is defined in the config file - -# picking disk that will be used - -DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") -if [ -z "$DISKS" ]; then - dialog --msgbox "ERROR: Can't find an hard disk." 10 40 - exit 1 -fi -if [ -z "$SLX_CHOOSEN_DISK" ]; then - if [ $SLX_AUTOMATIC_PARTITIONING = "yes" ]; then - dialog --msgbox "ERROR: You didn' define any hard disk in your configuration file." 10 40 - exit 1 - fi - DIALOGSTR="This computer has the following partitions:\n" - for disk in $DISKS; do - DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $disk$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) - PARTS=$(cat $PARTITIONSPATH | grep -e $disk[0-9] | tr -s ' ' | cut -d ' ' -f5) - GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR"$disk $DISKSIZE Bytes ($GBSIZE GB)\n" - USED=0 - for PART in $PARTS; do - PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*1024)) - USED=$(($USED+$PARTSIZE)) - GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" - done - DIALOGSTR=$DIALOGSTR" ----------\n" - FREESPACE=$(($DISKSIZE-$USED)) - GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" - GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" - done - if [ $(echo $DISKS | tr ' ' \\n | wc -l) -gt 1 ]; then - DIALOGSTR=$DIALOGSTR"Which of these disks you want to use?\n" - SLX_CHOOSEN_DISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) - if [ $? -eq 1 ]; then - exit 1; - fi - # verify if the choosen disk is a valid disk - echo $DISKS | tr ' ' \\n | grep -e ^$SLX_CHOOSEN_DISK$ > /dev/null 2>/dev/null - while [ $? -ne 0 ]; do - dialog --msgbox "Invalid option.\nTry again." 0 0 - SLX_CHOOSEN_DISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) - if [ $? -eq 1 ]; then - exit 1; - fi - echo $DISKS | tr ' ' \\n | grep -e ^$SLX_CHOOSEN_DISK$ > /dev/null 2>/dev/null - done - # ask a confirmation (all your data will be lost etc) - elif [ $(echo $DISKS | tr ' ' \\n | wc -l) -eq 1 ]; then - SLX_CHOOSEN_DISK=$(echo $DISKS | tr ' ' \\n | head -n1) - else - dialog --msgbox "ERROR: Can't find an hard disk." 10 40 - exit 1 - fi -fi -if [ -z "$SLX_PARTITION_TABLE" ]; then - if [ $SLX_AUTOMATIC_PARTITIONING = "yes" ]; then - SLX_PARTITION_TABLE=' - 44,10G,/tmp - 45,10G,/var/scratch' - else - dialog --msgbox "ERROR: You didn't set a valid partition table. Please check your config file." 10 40 - exit 1 - fi -fi - -# if SLX_PARTITION_TABLE is set then put his content in a associative array -declare -A PARTTBL -COUNTER=1 -for PARTITION in $SLX_PARTITION_TABLE; do - IFS=, - set $PARTITION - if [ $COUNTER -eq 4 ]; then - COUNTER=$(($COUNTER+1)) - fi - echo "id: $1" - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/id"]=$1 - shift - echo "size: $1" - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/size"]=$(echo $1 | egrep -o "[0-9]*") - shift - if [ -n $1 ]; then - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$1 - fi - shift - if [[ "$*" == *bootable* ]]; then - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=1 - else - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=0 - fi - # set the partitions to non-existents - PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/exists"]=0 - COUNTER=$(($COUNTER+1)) -done -unset IFS -# PARTTBL starts at 1 and ends at COUNTER-1 - -# check if the choosen disk is greater than the new partition table size. -DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) -NEEDED_SPACE=0 -for (( i = 1; i < $COUNTER; i++ )); do - if [[ $i -ne 4 ]]; then - NEEDED_SPACE=$(($NEEDED_SPACE+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]})) - fi -done -NEEDED_SPACE=$(($NEEDED_SPACE*1024*1024*1024+$COUNTER*1024*1024)) -if [ $DISKSIZE -lt $NEEDED_SPACE ]; then - dialog --msgbox "ERROR: Insufficient space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 - exit 1 -fi - -# choosing the partition type (MSDOS or GPT) if it wasn't set in config file -if [ -z "$SLX_PARTITION_TYPE" ] && [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then - if [ $SLX_AUTOMATIC_PARTITIONING = "yes" ]; then - SLX_PARTITION_TYPE=msdos - else - ANS=$(dialog --no-tags --menu "Choose the partitions type" 0 0 0 "1" " MSDOS " "2" " GPT " 3>&1 1>&2 2>&3) - if [ $? -eq 1 ]; then - exit 1 - fi - if [ $ANS -eq 1 ]; then - SLX_PARTITION_TYPE=msdos - else - SLX_PARTITION_TYPE=GPT - fi - fi -fi - -GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) -DIALOGSTR="$SLX_CHOOSEN_DISK $DISKSIZE Bytes ($GBSIZE GB)\n" -PARTS=$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK[0-9] | tr -s ' ' | cut -d ' ' -f5) -USED=0 -for PART in $PARTS; do - PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) - USED=$(($USED+$PARTSIZE)) - GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" -done -DIALOGSTR=$DIALOGSTR" ----------\n" -FREESPACE=$(($DISKSIZE-$USED)) -GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) -DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" -GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) -DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" -DIALOGSTR=$DIALOGSTR"All /dev/$SLX_CHOOSEN_DISK partitions will be deleted, ok?" - -# asking confirmation to create the partitions -if [[ $SLX_AUTOMATIC_PARTITIONING = "no" && $SLX_DELETE_PARTITION_TABLE = 'yes' ]]; then - dialog --defaultno --yesno "$DIALOGSTR" 0 0 - if [ $? -eq 1 ]; then - exit 1 - fi -fi - -# pick the size of a sector (usually 512 bytes) -# SECTORSIZE=$(sfdisk /dev/$SLX_CHOOSEN_DISK -l -u S 2> /dev/null | grep Units | cut -d ' ' -f5) -SECTORSIZE=512 - -if [[ $USED -eq 0 ]]; then - SLX_DELETE_PARTITION_TABLE="yes" -fi - -if [ $SLX_DELETE_PARTITION_TABLE = "yes" ]; then - # delete partition table - sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2> /dev/null # erase all partitions - - if [ $SLX_PARTITION_TYPE = 'GPT' ]; then - DIALOGSTR="Creating Partitions...\n\n" - echo "0" | dialog --gauge "$DIALOGSTR" 0 0 0 - for (( i = 1; i < $COUNTER; i++ )); do # loop that will create each GPT partition, change GUIDS, change names, and set bootable flags. - if [ $i -ne 4 ]; then - sgdisk /dev/$SLX_CHOOSEN_DISK -n $i:0:+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}G 2> /dev/null > /dev/null - # dialog --msgbox "$DIALOGSTR" 0 0 - if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "82" ] || [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "83" ]; then - sgdisk /dev/$SLX_CHOOSEN_DISK -t $i:${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}00 - else - sgdisk /dev/$SLX_CHOOSEN_DISK -t $i:${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}000000-0000-0000-0000-000000000000\ - sgdisk /dev/$SLX_CHOOSEN_DISK -c $i:\"${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]}\" >/dev/null 2>/dev/null - fi - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then - # set the bootable flag - sgdisk /dev/$SLX_CHOOSEN_DISK -A $i:set:2 >/dev/null 2>/dev/null - fi - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} - DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" - if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "82" ]; then - DIALOGSTR=$DIALOGSTR" GUID: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F\n" - elif [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "83" ]; then - DIALOGSTR=$DIALOGSTR" GUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4\n" - else - DIALOGSTR=$DIALOGSTR" GUID: "$ID"000000-0000-0000-0000-000000000000\n" - fi - DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" - echo $(( $i*100/($COUNTER-1) )) | dialog --gauge "$DIALOGSTR" 0 0 0 - fi - done - else - # constructing the sfdisk input file - echo "unit: sectors - "> /tmp/partitiontable.tmp - - START=$((1*1024*1024/$SECTORSIZE)) - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -ne 4 ]; then - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024/$SECTORSIZE)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID", bootable " >> /tmp/partitiontable.tmp - else - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID >> /tmp/partitiontable.tmp - fi - START=$(($START+$SIZE+1*1024*1024/$SECTORSIZE)) - else - echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$(($DISKSIZE/$SECTORSIZE-1))", Id= 5" >> /tmp/partitiontable.tmp - START=$(($START+1*1024*1024/$SECTORSIZE)) - fi - done - sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null 2> /dev/null - # rm -f /tmp/partitiontable.tmp - - DIALOGSTR="Creating Partitions...\n\n" - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -lt 4 ]; then - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} - DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" - DIALOGSTR=$DIALOGSTR" Type: Primary\n" - DIALOGSTR=$DIALOGSTR" ID: "$ID"\n" - DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" - elif [ $i -gt 4 ]; then - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} - DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"$SLX_CHOOSEN_DISK$i")\n" - DIALOGSTR=$DIALOGSTR" Type: Logical\n" - DIALOGSTR=$DIALOGSTR" ID: "$ID"\n" - DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" - fi - done - fi -elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK'1' | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2) = 'ee' ]; then -# finding existent partitions in GPT - echo 'GPT' - NONEXISTENT_PARTITIONS=0 - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -ne 4 ]; then - for PART in $PARTS; do - if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "82" ]; then - sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} 2> /dev/null | grep "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F" > /dev/null - elif [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "83" ]; then - sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} 2> /dev/null | grep "0FC63DAF-8483-4772-8E79-3D69D8477DE4" > /dev/null - else - sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} 2> /dev/null | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" > /dev/null - fi - if [ $? -eq 0 ]; then - PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART - NEEDED_SPACE=$(($NEEDED_SPACE-${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - break - fi - done - if [[ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = "0" ]]; then - NONEXISTENT_PARTITIONS=$(($NONEXISTENT_PARTITIONS+1)) - fi - fi - done - # checking if there's sufficient space for the new partitions. - if [[ $FREESPACE -lt $NEEDED_SPACE ]]; then - dialog --msgbox "ERROR: Insufficient free space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 - exit 1 - fi - if [[ $NONEXISTENT_PARTITIONS -eq 0 ]]; then - DIALOGSTR="All your requested partitions already exists.\n\n" - DIALOGSTR=$DIALOGSTR"Partition ID\n" - for (( i = 1; i < $COUNTER; i++ )); do - if [[ $i -ne 4 ]]; then - DIALOGSTR=$DIALOGSTR"${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}\n" - fi - done - else - DIALOGSTR="Creating partitions...\n\n" - echo "0" | dialog --gauge "$DIALOGSTR" 0 0 0 - CREATED=0 - for (( i = 1; i < $COUNTER; i++ )); do - j=1 - if [[ $i -ne 4 ]]; then - if [[ "${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]}" = "0" ]]; then - sgdisk /dev/$SLX_CHOOSEN_DISK -n $j:0:+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}G 2> /dev/null > /dev/null - while [[ $? -eq 4 ]]; do - j=$(($j+1)) - sgdisk /dev/$SLX_CHOOSEN_DISK -n $j:0:+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}G 2> /dev/null > /dev/null - done - PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$SLX_CHOOSEN_DISK$j - SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} - MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} - DIALOGSTR=$DIALOGSTR$MOUNTPOINT" (/dev/"${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]}")\n" - if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "82" ]; then - DIALOGSTR=$DIALOGSTR" GUID: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F\n" - elif [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "83" ]; then - DIALOGSTR=$DIALOGSTR" GUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4\n" - else - sgdisk /dev/$SLX_CHOOSEN_DISK -t $j:$ID"000000-0000-0000-0000-000000000000" -c $j:$MOUNTPOINT >/dev/null 2>/dev/null - DIALOGSTR=$DIALOGSTR" GUID: "$ID"000000-0000-0000-0000-000000000000\n" - fi - DIALOGSTR=$DIALOGSTR" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" - CREATED=$(($CREATED+1)) - echo $(( $CREATED*100/($NONEXISTENT_PARTITIONS) )) | dialog --gauge "$DIALOGSTR" 0 0 0 - fi - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then - sgdisk /dev/$SLX_CHOOSEN_DISK -A $j:set:2 >/dev/null 2>/dev/null - fi - fi - done - fi -else -# finding existent partitions in MS-DOS - echo 'MSDOS' - for PART in $PARTS; do - for (( i = 1; i < $COUNTER; i++ )); do - if [ $i -ne 4 ]; then - if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then - sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $PART | tr -s ' ' | cut -d ' ' -f7 | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} > /dev/null - if [ $? -eq 0 ]; then - echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." - PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART - NEEDED_SPACE=$(($NEEDED_SPACE-${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) - break - fi - fi - fi - done - done - echo "FREESPACE="$FREESPACE - echo "NEEDED_SPACE="$NEEDED_SPACE - if [[ $FREESPACE -lt $NEEDED_SPACE ]]; then - dialog --msgbox "ERROR: Insufficient free space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 - exit 1 - fi -fi -DIALOGSTR=${DIALOGSTR/Creating Partitions.../New partitions created:} -dialog --msgbox "$DIALOGSTR" 0 0 diff --git a/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner b/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner new file mode 100755 index 00000000..11a1952d --- /dev/null +++ b/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner @@ -0,0 +1,482 @@ +#!/bin/ash +# Copyright (c) 2013 - OpenSLX GmbH +# +# This program is free software distributed under the GPL version 2. +# See http://openslx.org/COPYING +# +# If you have any feedback please consult http://openslx.org/feedback and +# send your feedback to feedback@openslx.org +# +# General information about OpenSLX can be found under http://openslx.org +# +# Local hard disk autodetection script for OpenSLX linux stateless clients, +# detecting swap and special partitions + +############################################################################# + +. /opt/openslx/config || { echo "Could not source config."; exit 23; } + +#set -x +#exec > /log 2>&1 + +#-------------------------------------------------------------------------------------- +#Gathering partition information + +# BLOCKSIZE=$(sfdisk -l /dev/$SLX_CHOOSEN_DISK | grep -o -e "blocks of [0-9]* bytes" | cut -d ' ' -f3) +BLOCKSIZE=1024 + +# pick the size of a sector (usually 512 bytes) +# SECTORSIZE=$(sfdisk /dev/$SLX_CHOOSEN_DISK -l -u S 2> /dev/null | grep Units | cut -d ' ' -f5) +SECTORSIZE=512 + +# Partition that should be set as extended partition (only partitions 2-4 can be extended partitions) +EXTENDED_PARTITION_NR=4 + +PARTITIONSPATH="/proc/partitions" +# picking disk that will be used +DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") +if [ -z "$DISKS" ]; then + if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then + dialog --title "ERROR" --stdout --msgbox "Can't find an hard disk." 10 40 + else + echo "ERROR: Can't find an hard disk." 1>&2 + fi + exit 1 +fi +#-------------------------------------------------------------------------------------- + +define_partition_table() { + if [ -z "$SLX_PARTITION_TABLE" ]; then + SLX_PARTITION_TABLE=' + 44,1G,/tmp + 45,1G,/var/scratch' + echo "INFO: You didn't define a partition table in config. Using default partition table:\n$SLX_PARTITION_TABLE" 1>&2 + if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then + dialog --title "INFO" --stdout --msgbox "You didn't define a partition table in config. Using default partition table:\n$SLX_PARTITION_TABLE" 10 40 + fi + fi +} + +size_conv() { + [ $(echo "$1<1024" | bc) -eq 1 ] && { echo "$1 B"; exit 0; } + local result="$(echo $1 | awk '{ sum=$1; hum[1024^3]="GB"; hum[1024^2]="MB"; hum[1024]="KB"; + for (x=1024^3; x>=1024; x/=1024){ + if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x]; break } + } + }')" + echo $result +} + +choose_disk() { + local disk_number=$(echo $DISKS | tr ' ' \\n | wc -l) + if [ "$SLX_AUTOMATIC_PARTITIONING" = "yes" ]; then + if [ -n "$SLX_CHOOSEN_DISK" ]; then + echo $DISKS | grep -wq "$SLX_CHOOSEN_DISK" || { echo "ERROR: Automatic partitioning enabled, but in config specified $SLX_CHOOSEN_DISK was not found." 1>&2; return 1; } + elif [ "$disk_number" -eq 1 ]; then + SLX_CHOOSEN_DISK=$DISKS + echo "INFO: Automatic partitioning enabled, but SLX_CHOOSEN_DISK not specified in config. Choosing only existing disk: $DISKS for partitioning." 1>&2 + else + echo "ERROR: Automatic partitioning enabled, but SLX_CHOOSEN_DISK not specified in config. More than one disk exists, please specify disk in config and run again." 1>&2 + return 1 + fi + else + local dialog_string="Existing disks with partition tables:\n\n" + local disksize="" + local freespace=0 + local parts="" + local partsize=0 + local used=0 + local options="" + + for disk in $DISKS; do + disksize=$(echo "$(cat $PARTITIONSPATH | grep -e $disk$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE" | bc) + parts=$(cat $PARTITIONSPATH | grep -e $disk[0-9] | tr -s ' ' | cut -d ' ' -f5) + dialog_string="${dialog_string}$disk $(size_conv $disksize)\n" + used=0 + options="${options}$disk $disk " + + for part in $parts; do + partsize=$(echo "$(cat $PARTITIONSPATH | grep -e $part$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE" | bc) + used=$(echo "$used+$partsize" | bc) + dialog_string="${dialog_string} $part $(size_conv $partsize)\n" + done + + dialog_string=$dialog_string"--------------------------------\n" + freespace=$(echo "$disksize-$used" | bc) + dialog_string="${dialog_string}Used $(size_conv $used)\n" + dialog_string="${dialog_string}Free $(size_conv $freespace)\n\n" + done + + if [ $(echo $DISKS | tr ' ' \\n | wc -l) -gt 0 ]; then + SLX_CHOOSEN_DISK=$(echo $options | xargs dialog --title "Choose a disk to partition:" --no-tags --cr-wrap --no-collapse --stdout --menu "${dialog_string}" 0 0 0) + if [ -z $SLX_CHOOSEN_DISK ]; then + echo "INFO: Partitioning aborted by user." 1>&2 + return 1 + fi + else + dialog --title "ERROR" --stdout --msgbox "Can't find a hard disk." 10 40 + return 2 + fi + fi + CHOOSEN_DISK_SIZE=$(echo "$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE" | bc) + CHOOSEN_DISK_PARTS=$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK[0-9] | tr -s ' ' | cut -d ' ' -f5) +} + +check_disk_size() { + # check if the choosen disk is greater than the new partition table size. + local part_number=$(echo $SLX_PARTITION_TABLE | wc -w) + local part_space=$(echo $SLX_PARTITION_TABLE | grep -oE '[0-9]+G' | awk '{ SUM += $0 } END { print SUM }') + NEEDED_DISK_SPACE=$(echo "$part_space*1024*1024*1024+$part_number*1024*1024" | bc) + + if [ $(echo "$CHOOSEN_DISK_SIZE<$NEEDED_DISK_SPACE" | bc) -eq 1 ]; then + echo "ERROR: Insufficient space on disk /dev/$SLX_CHOOSEN_DISK\n DISK SIZE: $(size_conv $CHOOSEN_DISK_SIZE)\n REQUIRED SIZE: $(size_conv $NEEDED_DISK_SPACE)" 1>&2 + if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then + dialog --title "ERROR" --stdout --msgbox "Insufficient space on disk /dev/$SLX_CHOOSEN_DISK\n DISK SIZE: $(size_conv $CHOOSEN_DISK_SIZE)\n REQUIRED SIZE: $(size_conv $NEEDED_DISK_SPACE) " 6 40 + fi + return 1 + fi +} + +select_partition_type() { + # choosing the partition type (MSDOS or GPT) if it wasn't set in config file + if [ -z "$SLX_PARTITION_TYPE" ]; then + if [ "$SLX_AUTOMATIC_PARTITIONING" = "yes" ]; then + echo "INFO: SLX_PARTITION_TYPE not defined in config, using default: msdos" 1>&2 + SLX_PARTITION_TYPE=msdos + else + SLX_PARTITION_TYPE=$(dialog --no-tags --title "Choose a partition type:" --menu --stdout "Partitions types:" 0 0 0 "msdos" " MSDOS " "GPT" " GPT ") + if [ -z $SLX_PARTITION_TYPE ]; then + echo "INFO: Partitioning aborted by user." 1>&2 + return 1 + fi + fi + fi +} + +confirm_partitioning() { + local dialog_string="New partition table after partitioning:\n\n" + local counter=1 + local id=0 + local size=0 + local mountpoint="" + local bootable=0 + local part_type="Primary" + for part in $SLX_PARTITION_TABLE; do + IFS=, + set $part + + id=$1 + shift + size=${1%G} + shift + [ -n $1 ] && mountpoint=$1 + shift + case "$*" in + *bootable*) bootable=1 ;; + *) bootable=0 ;; + esac + + [ "$id" = "82" ] && mountpoint="swap" + + if [ $SLX_PARTITION_TYPE = 'GPT' ]; then + #update dialog status + dialog_string="${dialog_string}${mountpoint} (/dev/"${SLX_CHOOSEN_DISK}${counter}")\n" + if [ "${id}" = "82" ]; then + dialog_string="${dialog_string} GUID: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F\n" + elif [ "${id}" = "83" ]; then + dialog_string="${dialog_string} GUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4\n" + else + dialog_string="${dialog_string} GUID: "$id"000000-0000-0000-0000-000000000000\n" + fi + dialog_string="${dialog_string} Size: "$size" GB\n" + else + if [ $counter -eq $EXTENDED_PARTITION_NR ]; then + part_type="Logical" + counter=$(($counter+1)) + fi + #update dialog + dialog_string="${dialog_string}$mountpoint (/dev/${SLX_CHOOSEN_DISK}$counter)\n" + dialog_string="${dialog_string} Type: $part_type\n" + dialog_string="${dialog_string} ID: $id\n" + dialog_string="${dialog_string} Size: $size GB\n" + fi + + counter=$(($counter+1)) + done + unset IFS + + dialog_string="${dialog_string}\nAll existing partitions on /dev/$SLX_CHOOSEN_DISK will be deleted, continue?" + + # asking confirmation to create the partitions + dialog --title "WARNING" --stdout --defaultno --yesno "$dialog_string" 0 0 + if [ $? -eq 1 ]; then + echo "INFO: Partitioning aborted by user." 1>&2 + return 1 + fi +} + +# function to create gpt type partition tables (uses sgdisk) +partition_disk_gpt() { + # delete partition table + sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2>&1 # erase all partitions + + #set dialog + if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then + dialog_string="New partitions created:\n\n" + echo "0" | dialog --stdout --gauge "$dialog_string" 0 0 0 + fi + + # loop that will create each GPT partition, change GUIDS, change names, and set bootable flags. + local counter=1 + local part_number=$(echo $SLX_PARTITION_TABLE | wc -w) + local id=0 + local size=0 + local mountpoint="" + local bootable=0 + for part in $SLX_PARTITION_TABLE; do + IFS=, + set $part + + id=$1 + shift + size=${1%G} + shift + [ -n $1 ] && mountpoint=$1 + shift + case "$*" in + *bootable*) bootable=1 ;; + *) bootable=0 ;; + esac + + #set size of partition + sgdisk /dev/${SLX_CHOOSEN_DISK} -n ${counter}:0:+${size}G 1>&2 + + #set id of partition + if [ "${id}" = "82" ] || [ "${id}" = "83" ]; then + sgdisk /dev/${SLX_CHOOSEN_DISK} -t ${counter}:${id}00 1>&2 + else + sgdisk /dev/${SLX_CHOOSEN_DISK} -t ${counter}:${id}000000-0000-0000-0000-000000000000 -c ${counter}:\"${mountpoint}\" 1>&2 + fi + + #set boot flag + if [ "$bootable" -eq 1 ]; then + sgdisk /dev/${SLX_CHOOSEN_DISK} -A ${counter}:set:2 1>&2 + fi + + if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then + #update dialog status + [ "$id" = "82" ] && mountpoint="swap" + dialog_string="${dialog_string}${mountpoint} (/dev/"${SLX_CHOOSEN_DISK}${counter}")\n" + if [ "${id}" = "82" ]; then + dialog_string="${dialog_string} GUID: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F\n" + elif [ "${id}" = "83" ]; then + dialog_string="${dialog_string} GUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4\n" + else + dialog_string="${dialog_string} GUID: "$id"000000-0000-0000-0000-000000000000\n" + fi + dialog_string="${dialog_string} Size: "$size" GB\n" + echo $(echo "(100/$part_number)*$counter" | bc) | dialog --stdout --gauge "${dialog_string}" 0 0 0 + fi + + counter=$(($counter+1)) + done + unset IFS + + if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then + dialog --title "Creating partitions..." --stdout --msgbox "$dialog_string" 0 0 + fi +} + +#function to create msdos type partition tables (uses sfdisk) +partition_disk_msdos(){ + # delete partition table + sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2>&1 # erase all partitions + + #set dialog + dialog_string="New partitions created:\n\n" + + # constructing the sfdisk input file + echo "unit: sectors"> /tmp/partitiontable.tmp + + # loop that will create each GPT partition, change GUIDS, change names, and set bootable flags. + local counter=1 + local id=0 + local size=0 + local mountpoint="" + local bootable=0 + local part_type="Primary" + local start=$(echo "1*1024*1024/$SECTORSIZE" | bc) + for part in $SLX_PARTITION_TABLE; do + IFS=, + set $part + + id=$1 + shift + size=${1%G} + shift + [ -n $1 ] && mountpoint=$1 + shift + case "$*" in + *bootable*) bootable=1 ;; + *) bootable=0 ;; + esac + + if [ $counter -eq $EXTENDED_PARTITION_NR ]; then + echo "/dev/${SLX_CHOOSEN_DISK}$counter : start= $start, size= $(echo "${CHOOSEN_DISK_SIZE}/$SECTORSIZE-1" | bc), Id= 5" >> /tmp/partitiontable.tmp + part_type="Logical" + start=$(echo "$start+1*1024*1024/$SECTORSIZE" | bc) + counter=$(($counter+1)) + fi + + size_bytes=$(echo "${size}*1024*1024*1024/$SECTORSIZE" | bc) + + if [ "$bootable" -eq 1 ]; then + echo "/dev/${SLX_CHOOSEN_DISK}$counter : start= $start, size= $size_bytes, Id= $id, bootable " >> /tmp/partitiontable.tmp + else + echo "/dev/${SLX_CHOOSEN_DISK}$counter : start= $start, size= $size_bytes, Id= $id" >> /tmp/partitiontable.tmp + fi + + start=$(echo "$start+$size_bytes+1*1024*1024/$SECTORSIZE" |bc) + + #update dialog + [ "$id" = "82" ] && mountpoint="swap" + dialog_string="${dialog_string}$mountpoint (/dev/${SLX_CHOOSEN_DISK}$counter)\n" + dialog_string="${dialog_string} Type: $part_type\n" + dialog_string="${dialog_string} ID: $id\n" + dialog_string="${dialog_string} Size: $size GB\n" + + counter=$(($counter+1)) + done + unset IFS + + sfdisk -q --no-reread -f /dev/${SLX_CHOOSEN_DISK} < /tmp/partitiontable.tmp 1>&2 + # rm -f /tmp/partitiontable.tmp + + if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then + dialog --title "Creating partitions..." --stdout --msgbox "$dialog_string" 0 0 + fi +} + + +define_partition_table || exit 1; +choose_disk || exit 1; +select_partition_type || exit 1; +if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then + confirm_partitioning || exit 1; +fi +check_disk_size || exit 1; + +if [ $SLX_PARTITION_TYPE = 'GPT' ]; then + partition_disk_gpt || { echo "Error while writing GPT partition table to disk" 1>&2; exit 1; } +else + partition_disk_msdos || { echo "Error while writing msdos partition table to disk" 1>&2; exit 1; } +fi + +if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then + #reboot prompt + dialog --title "reboot computer" --stdout --yes-label "Reboot" --no-label "Continue" --yesno "For changes to take effect you have to reboot your machine." 5 65 + [ $? -eq 0 ] && reboot || exit 0 +else + reboot +fi + +####################### CODE FOR THE PRESERVATION OF EXISTING PARTITIONS (EXPERIMENTAL) ######################### +#elif [ $(sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $SLX_CHOOSEN_DISK'1' | tr -s ' ' | cut -d ' ' -f7 | cut -d '=' -f2) = 'ee' ]; then +## finding existent partitions in GPT +# echo 'GPT' +# NONEXISTENT_PARTITIONS=0 +# for (( i = 1; i < $COUNTER; i++ )); do +# if [ $i -ne 4 ]; then +# for PART in $PARTS; do +# if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "82" ]; then +# sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} 2> /dev/null | grep "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F" > /dev/null +# elif [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "83" ]; then +# sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} 2> /dev/null | grep "0FC63DAF-8483-4772-8E79-3D69D8477DE4" > /dev/null +# else +# sgdisk /dev/$SLX_CHOOSEN_DISK -i ${PART:3} 2> /dev/null | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}"000000-0000-0000-0000-000000000000" > /dev/null +# fi +# if [ $? -eq 0 ]; then +# PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART +# NEEDED_SPACE=$(($NEEDED_SPACE-${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) +# break +# fi +# done +# if [[ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = "0" ]]; then +# NONEXISTENT_PARTITIONS=$(($NONEXISTENT_PARTITIONS+1)) +# fi +# fi +# done +# # checking if there's sufficient space for the new partitions. +# if [[ $FREESPACE -lt $NEEDED_SPACE ]]; then +# dialog --msgbox "ERROR: Insufficient free space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 +# exit 1 +# fi +# if [[ $NONEXISTENT_PARTITIONS -eq 0 ]]; then +# dialog_string="All your requested partitions already exists.\n\n" +# dialog_string=$dialog_string"Partition ID\n" +# for (( i = 1; i < $COUNTER; i++ )); do +# if [[ $i -ne 4 ]]; then +# dialog_string=$dialog_string"${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}\n" +# fi +# done +# else +# dialog_string="Creating partitions...\n\n" +# echo "0" | dialog --gauge "$dialog_string" 0 0 0 +# CREATED=0 +# for (( i = 1; i < $COUNTER; i++ )); do +# j=1 +# if [[ $i -ne 4 ]]; then +# if [[ "${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]}" = "0" ]]; then +# sgdisk /dev/$SLX_CHOOSEN_DISK -n $j:0:+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}G 2> /dev/null > /dev/null +# while [[ $? -eq 4 ]]; do +# j=$(($j+1)) +# sgdisk /dev/$SLX_CHOOSEN_DISK -n $j:0:+${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}G 2> /dev/null > /dev/null +# done +# PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$SLX_CHOOSEN_DISK$j +# SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) +# ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} +# MOUNTPOINT=${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} +# dialog_string=$dialog_string$MOUNTPOINT" (/dev/"${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]}")\n" +# if [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "82" ]; then +# dialog_string=$dialog_string" GUID: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F\n" +# elif [ "${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]}" = "83" ]; then +# dialog_string=$dialog_string" GUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4\n" +# else +# sgdisk /dev/$SLX_CHOOSEN_DISK -t $j:$ID"000000-0000-0000-0000-000000000000" -c $j:$MOUNTPOINT >/dev/null 2>/dev/null +# dialog_string=$dialog_string" GUID: "$ID"000000-0000-0000-0000-000000000000\n" +# fi +# dialog_string=$dialog_string" Size: "$SIZE" Bytes ("${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}" GB)\n" +# CREATED=$(($CREATED+1)) +# echo $(( $CREATED*100/($NONEXISTENT_PARTITIONS) )) | dialog --gauge "$dialog_string" 0 0 0 +# fi +# if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} -eq 1 ]; then +# sgdisk /dev/$SLX_CHOOSEN_DISK -A $j:set:2 >/dev/null 2>/dev/null +# fi +# fi +# done +# fi +#else +## finding existent partitions in MS-DOS +# echo 'MSDOS' +# for PART in $PARTS; do +# for (( i = 1; i < $COUNTER; i++ )); do +# if [ $i -ne 4 ]; then +# if [ ${PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]} = 0 ]; then +# sfdisk -d /dev/$SLX_CHOOSEN_DISK 2> /dev/null | grep $PART | tr -s ' ' | cut -d ' ' -f7 | grep ${PARTTBL["$SLX_CHOOSEN_DISK$i/id"]} > /dev/null +# if [ $? -eq 0 ]; then +# echo "the partition $PART is the ${PARTTBL["$SLX_CHOOSEN_DISK$i/mountpoint"]} partition." +# PARTTBL["$SLX_CHOOSEN_DISK$i/exists"]=$PART +# NEEDED_SPACE=$(($NEEDED_SPACE-${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024)) +# break +# fi +# fi +# fi +# done +# done +# echo "FREESPACE="$FREESPACE +# echo "NEEDED_SPACE="$NEEDED_SPACE +# if [[ $FREESPACE -lt $NEEDED_SPACE ]]; then +# dialog --msgbox "ERROR: Insufficient free space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 +# exit 1 +# fi +#fi -- cgit v1.2.3-55-g7522 From bf149d2167ece5419cb0c4a382bf8fc905e79eac Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Fri, 10 Oct 2014 12:11:32 -0300 Subject: [partitioner] Added missing binaries for partitioner and busybox option for awk --- remote/modules/busybox/openslx-busybox-config | 2 +- remote/rootfs/rootfs-stage32/module.conf | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/remote/modules/busybox/openslx-busybox-config b/remote/modules/busybox/openslx-busybox-config index 29bb29ae..0f884d2b 100644 --- a/remote/modules/busybox/openslx-busybox-config +++ b/remote/modules/busybox/openslx-busybox-config @@ -365,7 +365,7 @@ CONFIG_WHICH=y # Editors # CONFIG_AWK=y -# CONFIG_FEATURE_AWK_LIBM is not set +CONFIG_FEATURE_AWK_LIBM=y CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y # CONFIG_CMP is not set CONFIG_DIFF=y diff --git a/remote/rootfs/rootfs-stage32/module.conf b/remote/rootfs/rootfs-stage32/module.conf index febd1fbb..eab2b8f3 100644 --- a/remote/rootfs/rootfs-stage32/module.conf +++ b/remote/rootfs/rootfs-stage32/module.conf @@ -18,6 +18,11 @@ REQUIRED_BINARIES=" mkfs.xfs mkfs.ext3 mkfs.ext4 + fsck.ext3 + fsck.ext4 + fsck.jfs + fsck.xfs + fsck blkid modprobe ps @@ -40,6 +45,7 @@ REQUIRED_BINARIES=" grep sfdisk sgdisk + dialog " REQUIRED_LIBRARIES=" libcap -- cgit v1.2.3-55-g7522 From 392c5b76ab68449df4e84e7715a67294ab4026e0 Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Fri, 10 Oct 2014 15:46:03 -0300 Subject: [doc] addes doc for partitioner and setup-partitions --- doc/boot_config_vars | 31 +++++++++++++++++++++++++++++++ doc/kcl_config_vars | 2 ++ 2 files changed, 33 insertions(+) diff --git a/doc/boot_config_vars b/doc/boot_config_vars index 36293d87..07866031 100644 --- a/doc/boot_config_vars +++ b/doc/boot_config_vars @@ -52,3 +52,34 @@ remote logging: SLX_REMOTE_LOG URL where to post log to, eg. 'http://server/log.php' POST variables: type, description, longdesc +partitioner & setp partitions: + +SLX_PARTITION_TYPE='GPT|msdos' #Choose partition table type, if variable is not set partitioner + #will ask user or in silent mode use 'msdos' as default + +SLX_CHOOSEN_DISK='sda' #If no HDD is specified, the partitioner will either ask the user + #or in silent mode choose the only HDD available or abort if more + #then one HDD is present. + +SLX_AUTOMATIC_PARTITIONING='yes' #silent mode, restarts the machine automatically after partitioning + +SLX_PARTITION_TABLE=' #The partition table variable is used by both the partitioner and + 44,1G,/tmp #setup-partition script. The values per partition are as follows: + 43,1G,/boot,bootable #unique ID, size, [mountpoint], [options] + 42,1G,/cache/export/dnbd3 #The ID is used as is for msdos and for GPT concatenated with trailing + 41,1G,/home #zeros, example: msdos: 44 GPT: 44000000-0000-0000-0000-000000000000 + 82,1G' #Attention: without a mount point, the setup-partition script won't mount + #the partition. Swap partition doesn't need a mount point + #Existing linux partitions will automatically be mountet under /media + #and don't need to be specified here. + #The only optional argument currently used at the moment is 'bootable' + #to mark a partition as such + +#If no partition table variable was specifies, the partitioner and setup-scripts will assume +#the following default partition table: + +SLX_PARTITION_TABLE=' + 44,10G,/tmp + 45,10G,/var/scratch + 82,4G' + diff --git a/doc/kcl_config_vars b/doc/kcl_config_vars index 66166299..4c51d5dc 100644 --- a/doc/kcl_config_vars +++ b/doc/kcl_config_vars @@ -26,3 +26,5 @@ LABEL u1304x64 APPEND slxsrv=10.254.221.6 slxbase=u1304x64 vga=current splash quiet IPAPPEND 3 +To start the partitioner, the partitioner module must be included in the configuration +and 'partitioner' must be specifies in the KCL -- cgit v1.2.3-55-g7522 From 887369366fd1ac9252845bb8ffb0ffe27957e51d Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Fri, 10 Oct 2014 15:48:12 -0300 Subject: [partitioner] updated default partition table for partitioner and setup-partitions --- .../rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions | 2 +- server/modules/partitioner/opt/openslx/scripts/systemd-partitioner | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index b18a97d5..8fc7535c 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -137,7 +137,7 @@ read_partitions () { if [ -z "${SLX_PARTITION_TABLE}" ]; then SLX_PARTITION_TABLE=' 44,10G,/tmp - 45,10G,/var/scratch,persistent + 45,10G,/var/scratch 82,4G' fi diff --git a/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner b/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner index 11a1952d..ac1875d8 100755 --- a/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner +++ b/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner @@ -48,8 +48,9 @@ fi define_partition_table() { if [ -z "$SLX_PARTITION_TABLE" ]; then SLX_PARTITION_TABLE=' - 44,1G,/tmp - 45,1G,/var/scratch' + 44,10G,/tmp + 45,10G,/var/scratch + 82,4G' echo "INFO: You didn't define a partition table in config. Using default partition table:\n$SLX_PARTITION_TABLE" 1>&2 if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then dialog --title "INFO" --stdout --msgbox "You didn't define a partition table in config. Using default partition table:\n$SLX_PARTITION_TABLE" 10 40 -- cgit v1.2.3-55-g7522 From 8ee20e54090b49ee50303d09ce482f9db8c43550 Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Mon, 13 Oct 2014 16:53:42 -0300 Subject: [partitioner] Create function for warning and error messages --- .../opt/openslx/scripts/systemd-partitioner | 133 +++++++++++---------- 1 file changed, 70 insertions(+), 63 deletions(-) diff --git a/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner b/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner index ac1875d8..f8b7b819 100755 --- a/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner +++ b/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner @@ -14,11 +14,33 @@ ############################################################################# -. /opt/openslx/config || { echo "Could not source config."; exit 23; } +perror () { + echo "ERROR: $@" 1>&2 + if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then + dialog --title "ERROR" --stdout --msgbox "$@" 15 60 + else + dialog --title "ERROR" --no-cancel --stdout --pause "$@\n\nReboot in:" 15 60 600 + reboot + fi + exit 1 +} + +pwarning () { + echo "WARNING: $@" 1>&2 + if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then + dialog --title "WARNING" --stdout --msgbox "$@" 15 60 + else + dialog --title "WARNING" --stdout --infobox "$@" 15 60 + sleep 5 + fi +} + +. /opt/openslx/config || perror "Could not source config." #set -x #exec > /log 2>&1 + #-------------------------------------------------------------------------------------- #Gathering partition information @@ -36,12 +58,7 @@ PARTITIONSPATH="/proc/partitions" # picking disk that will be used DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") if [ -z "$DISKS" ]; then - if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then - dialog --title "ERROR" --stdout --msgbox "Can't find an hard disk." 10 40 - else - echo "ERROR: Can't find an hard disk." 1>&2 - fi - exit 1 + perror "Can't find an hard disk." fi #-------------------------------------------------------------------------------------- @@ -51,10 +68,7 @@ define_partition_table() { 44,10G,/tmp 45,10G,/var/scratch 82,4G' - echo "INFO: You didn't define a partition table in config. Using default partition table:\n$SLX_PARTITION_TABLE" 1>&2 - if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then - dialog --title "INFO" --stdout --msgbox "You didn't define a partition table in config. Using default partition table:\n$SLX_PARTITION_TABLE" 10 40 - fi + pwarning "You didn't define a partition table in config. Using default partition table:\n$SLX_PARTITION_TABLE" fi } @@ -72,13 +86,12 @@ choose_disk() { local disk_number=$(echo $DISKS | tr ' ' \\n | wc -l) if [ "$SLX_AUTOMATIC_PARTITIONING" = "yes" ]; then if [ -n "$SLX_CHOOSEN_DISK" ]; then - echo $DISKS | grep -wq "$SLX_CHOOSEN_DISK" || { echo "ERROR: Automatic partitioning enabled, but in config specified $SLX_CHOOSEN_DISK was not found." 1>&2; return 1; } + echo $DISKS | grep -wq "$SLX_CHOOSEN_DISK" || perror "ERROR: Automatic partitioning enabled, but in config specified $SLX_CHOOSEN_DISK was not found." elif [ "$disk_number" -eq 1 ]; then SLX_CHOOSEN_DISK=$DISKS - echo "INFO: Automatic partitioning enabled, but SLX_CHOOSEN_DISK not specified in config. Choosing only existing disk: $DISKS for partitioning." 1>&2 + pwarning "Automatic partitioning enabled, but SLX_CHOOSEN_DISK not specified in config. Choosing only existing disk: $DISKS for partitioning." else - echo "ERROR: Automatic partitioning enabled, but SLX_CHOOSEN_DISK not specified in config. More than one disk exists, please specify disk in config and run again." 1>&2 - return 1 + perror "Automatic partitioning enabled, but SLX_CHOOSEN_DISK not specified in config. More than one disk exists, please specify disk in config and run again." fi else local dialog_string="Existing disks with partition tables:\n\n" @@ -111,12 +124,11 @@ choose_disk() { if [ $(echo $DISKS | tr ' ' \\n | wc -l) -gt 0 ]; then SLX_CHOOSEN_DISK=$(echo $options | xargs dialog --title "Choose a disk to partition:" --no-tags --cr-wrap --no-collapse --stdout --menu "${dialog_string}" 0 0 0) if [ -z $SLX_CHOOSEN_DISK ]; then - echo "INFO: Partitioning aborted by user." 1>&2 - return 1 + pwarning "Partitioning aborted by user." + exit 1 fi else - dialog --title "ERROR" --stdout --msgbox "Can't find a hard disk." 10 40 - return 2 + perror "Can't find a hard disk." fi fi CHOOSEN_DISK_SIZE=$(echo "$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE" | bc) @@ -130,11 +142,7 @@ check_disk_size() { NEEDED_DISK_SPACE=$(echo "$part_space*1024*1024*1024+$part_number*1024*1024" | bc) if [ $(echo "$CHOOSEN_DISK_SIZE<$NEEDED_DISK_SPACE" | bc) -eq 1 ]; then - echo "ERROR: Insufficient space on disk /dev/$SLX_CHOOSEN_DISK\n DISK SIZE: $(size_conv $CHOOSEN_DISK_SIZE)\n REQUIRED SIZE: $(size_conv $NEEDED_DISK_SPACE)" 1>&2 - if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then - dialog --title "ERROR" --stdout --msgbox "Insufficient space on disk /dev/$SLX_CHOOSEN_DISK\n DISK SIZE: $(size_conv $CHOOSEN_DISK_SIZE)\n REQUIRED SIZE: $(size_conv $NEEDED_DISK_SPACE) " 6 40 - fi - return 1 + perror "Insufficient space on disk /dev/$SLX_CHOOSEN_DISK\n DISK SIZE: $(size_conv $CHOOSEN_DISK_SIZE)\n REQUIRED SIZE: $(size_conv $NEEDED_DISK_SPACE)" fi } @@ -142,13 +150,13 @@ select_partition_type() { # choosing the partition type (MSDOS or GPT) if it wasn't set in config file if [ -z "$SLX_PARTITION_TYPE" ]; then if [ "$SLX_AUTOMATIC_PARTITIONING" = "yes" ]; then - echo "INFO: SLX_PARTITION_TYPE not defined in config, using default: msdos" 1>&2 + pwarning "SLX_PARTITION_TYPE not defined in config, using default: msdos" SLX_PARTITION_TYPE=msdos else SLX_PARTITION_TYPE=$(dialog --no-tags --title "Choose a partition type:" --menu --stdout "Partitions types:" 0 0 0 "msdos" " MSDOS " "GPT" " GPT ") if [ -z $SLX_PARTITION_TYPE ]; then - echo "INFO: Partitioning aborted by user." 1>&2 - return 1 + pwarning "Partitioning aborted by user." + exit 1 fi fi fi @@ -211,21 +219,19 @@ confirm_partitioning() { # asking confirmation to create the partitions dialog --title "WARNING" --stdout --defaultno --yesno "$dialog_string" 0 0 if [ $? -eq 1 ]; then - echo "INFO: Partitioning aborted by user." 1>&2 - return 1 + pwarning "Partitioning aborted by user." + exit 1 fi } # function to create gpt type partition tables (uses sgdisk) partition_disk_gpt() { # delete partition table - sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2>&1 # erase all partitions + sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2>&1 || perror "Error erasing old partition table" #set dialog - if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then - dialog_string="New partitions created:\n\n" - echo "0" | dialog --stdout --gauge "$dialog_string" 0 0 0 - fi + dialog_string="Partitions created:\n\n" + echo "0" | dialog --title "Partitioner" --stdout --gauge "$dialog_string" 0 0 0 # loop that will create each GPT partition, change GUIDS, change names, and set bootable flags. local counter=1 @@ -250,51 +256,49 @@ partition_disk_gpt() { esac #set size of partition - sgdisk /dev/${SLX_CHOOSEN_DISK} -n ${counter}:0:+${size}G 1>&2 + sgdisk /dev/${SLX_CHOOSEN_DISK} -n ${counter}:0:+${size}G 1>&2 || perror "Error setting size of GPT partition ${SLX_CHOOSEN_DISK}${counter}" #set id of partition if [ "${id}" = "82" ] || [ "${id}" = "83" ]; then - sgdisk /dev/${SLX_CHOOSEN_DISK} -t ${counter}:${id}00 1>&2 + sgdisk /dev/${SLX_CHOOSEN_DISK} -t ${counter}:${id}00 1>&2 || perror "Error setting id ${id} of GPT partition ${SLX_CHOOSEN_DISK}${counter}" else - sgdisk /dev/${SLX_CHOOSEN_DISK} -t ${counter}:${id}000000-0000-0000-0000-000000000000 -c ${counter}:\"${mountpoint}\" 1>&2 + sgdisk /dev/${SLX_CHOOSEN_DISK} -t ${counter}:${id}000000-0000-0000-0000-000000000000 -c ${counter}:\"${mountpoint}\" 1>&2 || perror "Error setting id ${id} of GPT partition ${SLX_CHOOSEN_DISK}${counter}" fi #set boot flag if [ "$bootable" -eq 1 ]; then - sgdisk /dev/${SLX_CHOOSEN_DISK} -A ${counter}:set:2 1>&2 + sgdisk /dev/${SLX_CHOOSEN_DISK} -A ${counter}:set:2 1>&2 || perror "Error setting boot flag for GPT partition ${SLX_CHOOSEN_DISK}${counter}" fi - if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then - #update dialog status - [ "$id" = "82" ] && mountpoint="swap" - dialog_string="${dialog_string}${mountpoint} (/dev/"${SLX_CHOOSEN_DISK}${counter}")\n" - if [ "${id}" = "82" ]; then - dialog_string="${dialog_string} GUID: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F\n" - elif [ "${id}" = "83" ]; then - dialog_string="${dialog_string} GUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4\n" - else - dialog_string="${dialog_string} GUID: "$id"000000-0000-0000-0000-000000000000\n" - fi - dialog_string="${dialog_string} Size: "$size" GB\n" - echo $(echo "(100/$part_number)*$counter" | bc) | dialog --stdout --gauge "${dialog_string}" 0 0 0 + #update dialog status + [ "$id" = "82" ] && mountpoint="swap" + dialog_string="${dialog_string}${mountpoint} (/dev/"${SLX_CHOOSEN_DISK}${counter}")\n" + if [ "${id}" = "82" ]; then + dialog_string="${dialog_string} GUID: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F\n" + elif [ "${id}" = "83" ]; then + dialog_string="${dialog_string} GUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4\n" + else + dialog_string="${dialog_string} GUID: "$id"000000-0000-0000-0000-000000000000\n" fi + dialog_string="${dialog_string} Size: "$size" GB\n" + echo $(echo "(100/$part_number)*$counter" | bc) | dialog --title "Partitioner" --stdout --gauge "${dialog_string}" 0 0 0 counter=$(($counter+1)) done unset IFS if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then - dialog --title "Creating partitions..." --stdout --msgbox "$dialog_string" 0 0 + dialog --title "Partitioner" --stdout --msgbox "$dialog_string" 0 0 fi } #function to create msdos type partition tables (uses sfdisk) partition_disk_msdos(){ # delete partition table - sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2>&1 # erase all partitions + sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2>&1 || perror "Error erasing old partition table" #set dialog - dialog_string="New partitions created:\n\n" + dialog_string="Partitions created:\n\n" # constructing the sfdisk input file echo "unit: sectors"> /tmp/partitiontable.tmp @@ -350,27 +354,30 @@ partition_disk_msdos(){ done unset IFS - sfdisk -q --no-reread -f /dev/${SLX_CHOOSEN_DISK} < /tmp/partitiontable.tmp 1>&2 + sfdisk -q --no-reread -f /dev/${SLX_CHOOSEN_DISK} < /tmp/partitiontable.tmp 1>&2 || return 0 # rm -f /tmp/partitiontable.tmp if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then - dialog --title "Creating partitions..." --stdout --msgbox "$dialog_string" 0 0 + dialog --title "Partitioner" --stdout --msgbox "$dialog_string" 0 0 + else + dialog --title "Partitioner" --stdout --infobox "$dialog_string" 0 0 + sleep 5 fi } -define_partition_table || exit 1; -choose_disk || exit 1; -select_partition_type || exit 1; +define_partition_table +choose_disk +select_partition_type if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then - confirm_partitioning || exit 1; + confirm_partitioning fi -check_disk_size || exit 1; +check_disk_size if [ $SLX_PARTITION_TYPE = 'GPT' ]; then - partition_disk_gpt || { echo "Error while writing GPT partition table to disk" 1>&2; exit 1; } + partition_disk_gpt else - partition_disk_msdos || { echo "Error while writing msdos partition table to disk" 1>&2; exit 1; } + partition_disk_msdos fi if [ "$SLX_AUTOMATIC_PARTITIONING" != "yes" ]; then -- cgit v1.2.3-55-g7522 From 27b17f17f2051f8336aa77022135e95404700c54 Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Thu, 16 Oct 2014 16:32:20 -0300 Subject: [partitioner] Create special boot partition for the bootloader when using GPT --- .../opt/openslx/scripts/systemd-partitioner | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner b/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner index f8b7b819..cbc71030 100755 --- a/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner +++ b/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner @@ -255,6 +255,17 @@ partition_disk_gpt() { *) bootable=0 ;; esac + #create boot partition and set boot flag + if [ "$bootable" -eq 1 ]; then + sgdisk /dev/${SLX_CHOOSEN_DISK} -n ${counter}:0:+1M 1>&2 || perror "Error setting size of GPT partition ${SLX_CHOOSEN_DISK}${counter}" + sgdisk /dev/${SLX_CHOOSEN_DISK} -t ${counter}:21686148-6449-6E6F-744E-656564454649 1>&2 || perror "Error setting id ${id} of GPT partition ${SLX_CHOOSEN_DISK}${counter}" + sgdisk /dev/${SLX_CHOOSEN_DISK} -A ${counter}:set:2 1>&2 || perror "Error setting boot flag for GPT partition ${SLX_CHOOSEN_DISK}${counter}" + dialog_string="${dialog_string}Special bootloader partition (/dev/${SLX_CHOOSEN_DISK}${counter})\n" + dialog_string="${dialog_string} GUID: 21686148-6449-6E6F-744E-656564454649\n" + dialog_string="${dialog_string} Size: 1 MB\n" + counter=$(($counter+1)) + fi + #set size of partition sgdisk /dev/${SLX_CHOOSEN_DISK} -n ${counter}:0:+${size}G 1>&2 || perror "Error setting size of GPT partition ${SLX_CHOOSEN_DISK}${counter}" @@ -265,22 +276,17 @@ partition_disk_gpt() { sgdisk /dev/${SLX_CHOOSEN_DISK} -t ${counter}:${id}000000-0000-0000-0000-000000000000 -c ${counter}:\"${mountpoint}\" 1>&2 || perror "Error setting id ${id} of GPT partition ${SLX_CHOOSEN_DISK}${counter}" fi - #set boot flag - if [ "$bootable" -eq 1 ]; then - sgdisk /dev/${SLX_CHOOSEN_DISK} -A ${counter}:set:2 1>&2 || perror "Error setting boot flag for GPT partition ${SLX_CHOOSEN_DISK}${counter}" - fi - #update dialog status [ "$id" = "82" ] && mountpoint="swap" - dialog_string="${dialog_string}${mountpoint} (/dev/"${SLX_CHOOSEN_DISK}${counter}")\n" + dialog_string="${dialog_string}${mountpoint} (/dev/${SLX_CHOOSEN_DISK}${counter})\n" if [ "${id}" = "82" ]; then dialog_string="${dialog_string} GUID: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F\n" elif [ "${id}" = "83" ]; then dialog_string="${dialog_string} GUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4\n" else - dialog_string="${dialog_string} GUID: "$id"000000-0000-0000-0000-000000000000\n" + dialog_string="${dialog_string} GUID: ${id}000000-0000-0000-0000-000000000000\n" fi - dialog_string="${dialog_string} Size: "$size" GB\n" + dialog_string="${dialog_string} Size: ${size} GB\n" echo $(echo "(100/$part_number)*$counter" | bc) | dialog --title "Partitioner" --stdout --gauge "${dialog_string}" 0 0 0 counter=$(($counter+1)) -- cgit v1.2.3-55-g7522 From 598199aa1b3f1695b70a6dec552a7458bc514437 Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Fri, 17 Oct 2014 12:12:01 -0300 Subject: [partitioner] fix status bar for gpt partitioning --- server/modules/partitioner/opt/openslx/scripts/systemd-partitioner | 1 + 1 file changed, 1 insertion(+) diff --git a/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner b/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner index cbc71030..d8fa0c6d 100755 --- a/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner +++ b/server/modules/partitioner/opt/openslx/scripts/systemd-partitioner @@ -264,6 +264,7 @@ partition_disk_gpt() { dialog_string="${dialog_string} GUID: 21686148-6449-6E6F-744E-656564454649\n" dialog_string="${dialog_string} Size: 1 MB\n" counter=$(($counter+1)) + part_number=$(($part_number+1)) fi #set size of partition -- cgit v1.2.3-55-g7522 From c0d30496feaec6dfd390fad6e9245c986e20d83e Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Fri, 24 Oct 2014 11:32:48 -0200 Subject: [setup-partitions] Don't mount partitions if partitioner is active --- .../rootfs-stage32/data/etc/systemd/system/setup-partitions.service | 1 + 1 file changed, 1 insertion(+) diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/setup-partitions.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/setup-partitions.service index 6bb3a986..d1a03841 100644 --- a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/setup-partitions.service +++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/setup-partitions.service @@ -4,6 +4,7 @@ DefaultDependencies=no Before=basic.target After=systemd-udev-settle.service Wants=tmp.target +!ConditionKernelCommandLine=partitioner [Service] Type=oneshot -- cgit v1.2.3-55-g7522 From de45218f115c188bff7620cb623da6428988bb33 Mon Sep 17 00:00:00 2001 From: Michael Pereira Neves Date: Fri, 24 Oct 2014 14:21:29 -0200 Subject: [setup-partitions] fix syntax --- .../rootfs-stage32/data/etc/systemd/system/setup-partitions.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/setup-partitions.service b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/setup-partitions.service index d1a03841..67466fae 100644 --- a/remote/rootfs/rootfs-stage32/data/etc/systemd/system/setup-partitions.service +++ b/remote/rootfs/rootfs-stage32/data/etc/systemd/system/setup-partitions.service @@ -4,7 +4,7 @@ DefaultDependencies=no Before=basic.target After=systemd-udev-settle.service Wants=tmp.target -!ConditionKernelCommandLine=partitioner +ConditionKernelCommandLine=!partitioner [Service] Type=oneshot -- cgit v1.2.3-55-g7522