summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Pereira Neves2014-10-09 21:11:18 +0200
committerMichael Pereira Neves2014-10-28 14:16:29 +0100
commit8ec740c8c3d8aecedfa790589cd2c71945715db1 (patch)
tree168db6f4433b74659910e39cd9de1a9f8026aeb0
parent[setup_partitions] -e option removed from all the echo commands, for ash comp... (diff)
downloadtm-scripts-8ec740c8c3d8aecedfa790589cd2c71945715db1.tar.gz
tm-scripts-8ec740c8c3d8aecedfa790589cd2c71945715db1.tar.xz
tm-scripts-8ec740c8c3d8aecedfa790589cd2c71945715db1.zip
[partitioner] reworked partitioner and setup-partitions, tested and working
-rwxr-xr-xremote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions18
-rw-r--r--server/modules/partitioner/etc/systemd/system/partitioner.service4
-rwxr-xr-xserver/modules/partitioner/opt/openslx/scripts/partitioner358
-rwxr-xr-xserver/modules/partitioner/opt/openslx/scripts/systemd-partitioner482
4 files changed, 494 insertions, 368 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 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