summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucas Affonso Xavier de Morais2014-07-10 17:47:47 +0200
committerMichael Pereira Neves2014-10-28 14:14:49 +0100
commit08479c79bb325fc99bac25126901dc0bcba43242 (patch)
treeb82774f4dbe1fa4d9e8d0a0c70e94de760cd1666
parent[partitioner] using extended partitions (diff)
downloadtm-scripts-08479c79bb325fc99bac25126901dc0bcba43242.tar.gz
tm-scripts-08479c79bb325fc99bac25126901dc0bcba43242.tar.xz
tm-scripts-08479c79bb325fc99bac25126901dc0bcba43242.zip
[partitioner] adapting script to the new config file. not working yet.
-rw-r--r--remote/modules/partitioner/config26
-rwxr-xr-xremote/modules/partitioner/partitioner.sh214
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