#!/bin/sh # Copyright Jean-Philippe Guillemin . # Copyright Gerge Vlahavas # This program is free software; # you can redistribute it and/or modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 3 of the License, # or (at your option) any later version. Please take a look at http://www.gnu.org/copyleft/gpl.htm TMP=/var/log/setup/tmp NDIR=/dev/null REDIR=/dev/tty4 T_PX=/mnt unset MULTIPARTITION export MAINSELECT="" # make_ext4( dev, nodes, check ) - Create a new ext4 filesystem on the named # device. # Parameters: dev Device node to format. # nodes Inode density (1024, 2048, 4096) # check Perform fs check (y or n) make_ext4() { # get the size of the named partition SIZE=`get_part_size $1` # output a nice status message dialog --title "FORMATTING" \ --backtitle "Formatting $1 with filesystem ext4." \ --infobox "Formatting $1 \n\ Size in 1K blocks: $SIZE \n\ Filesystem type: ext4" 0 0 # do the format if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then umount $1 2> $NDIR fi if [ "$3" = "y" ]; then mkfs.ext4 -c $1 1> $REDIR 2> $REDIR else mkfs.ext4 $1 1> $REDIR 2> $REDIR fi } # get_part_size( dev ) - Return the size in KB of the named partition. get_part_size() { Size=`probe -l 2> /dev/null | grep "$1 " | tr -d "*" | tr -d "+" | crunch | cut -f 4 -d ' '` echo $Size } # disk chooser ########################################## dglist="" n=1 for dev in "$(cat /proc/partitions \ | grep -v '^$' \ | grep -v 'name' \ | grep -v 'loop' \ | sed -e 's/^[ \t]*[0-9]*[ \t]*[0-9]*[ \t]*[0-9]*[ \t]*\(\([a-z]*\)[0-9]*[^0-9]*\|\([a-z\/]*[0-9]*[a-z]*[0-9]*\).*\)$/\2\3 disk \"\"/' | sort -u )" ; do dglist="${dglist} ${dev}" n=$(($n+1)) done DISK=$(dialog \ --stdout \ --ok-label "Do It" \ --cancel-label "Cancel" \ --title "AUTO PARTITION" \ --radiolist "This is automatic partition mode. Press to select the target disk \ where Salix will be installed. \ All data will be erased from the target disk. Only run this mode if the entire \ disk will be dedicated to Salix." \ $(( $n+11 )) 75 $(( $n+1 )) ${dglist} ) destroy="" if [ -n "${DISK}" ] ; then # destroy ? ########################################## destroy=$(dialog \ --stdout \ --title "AUTO PARTITION" \ --menu "\nAre you sure you want to globally erase existing data from ${DISK}?\n " \ 11 75 2 \ "No" "Go back to the main setup menu" \ "Yes" "${DISK} is dedicated to Salix" ) else dialog --title "AUTO PARTITION" --msgbox "No target disk selected, going back to main menu" 6 75 fi [ "$destroy" != "Yes" ] && DISK="" # partioning and formating ########################################## if [ "$destroy" = "Yes" ] ; then # Creating nodes case "$DISK" in 'sda') MAJOR=8 MINOR=0 ;; 'sdb') MAJOR=8 MINOR=16 ;; 'sdc') MAJOR=8 MINOR=32 ;; 'sdd') MAJOR=8 MINOR=48 ;; 'sde') MAJOR=8 MINOR=64 ;; 'sdf') MAJOR=8 MINOR=80 ;; 'sdg') MAJOR=8 MINOR=96 ;; 'sdh') MAJOR=8 MINOR=112 ;; 'sdi') MAJOR=8 MINOR=128 ;; 'sdj') MAJOR=8 MINOR=144 ;; 'hda') MAJOR=3 MINOR=0 ;; 'hdb') MAJOR=3 MINOR=64 ;; 'hdc') MAJOR=22 MINOR=0 ;; 'hdd') MAJOR=22 MINOR=64 ;; esac mknod /dev/${DISK}1 b $MAJOR $(( $MINOR + 1 )) 1> /dev/null 2> /dev/null mknod /dev/${DISK}2 b $MAJOR $(( $MINOR + 2 )) 1> /dev/null 2> /dev/null mknod /dev/${DISK}3 b $MAJOR $(( $MINOR + 3 )) 1> /dev/null 2> /dev/null DisksizeInKB=$(sfdisk --no-reread -s /dev/${DISK} 2> /dev/null) DisksizeInMB=$(( $DisksizeInKB / 1024 )) clear if [ $DisksizeInMB -lt 3000 ] ; then dialog --title "AUTO PARTITION" --msgbox "${DISK} is only $DisksizeInKB KB , you need at least 3000000 KB to install Salix" 4 75 elif [ $DisksizeInMB -lt 14000 ] ; then dialog --title "AUTO PARTITION" --infobox "Please wait while ${DISK} is being prepared for Salix" 0 0 rootsize=$(($DisksizeInMB - 1000)) cat < $TMP/layout.sfdisk /dev/${DISK}1 : start= , size= $rootsize, Id= 83, bootable /dev/${DISK}2 : start= , size= , Id= 82 /dev/${DISK}3 : start= 0, size= 0, Id= 0 /dev/${DISK}4 : start= 0, size= 0, Id= 0 EOF1 sfdisk --no-reread -f -q -uM /dev/${DISK} < $TMP/layout.sfdisk | grep -v "Re-read" > $TMP/sfdisk.report 2> /dev/null /dev/makedevs.sh sfdisk -R /dev/${DISK} 1> /dev/null 2> /dev/null # formating ########################################## # root RootFS='ext4' make_ext4 /dev/${DISK}1 printf "%-16s %-16s %-11s %-16s %-3s %s\n" "/dev/${DISK}1" "/" "ext4" "defaults,noatime" "1" "1" > $TMP/SeTnative # swap if ! grep -w /dev/${DISK}2 /proc/swaps 1> /dev/null 2> /dev/null ; then mkswap -v1 /dev/${DISK}2 1> /dev/null 2> /dev/null swapon /dev/${DISK}2 1> /dev/null 2> /dev/null fi printf "%-16s %-16s %-11s %-16s %-3s %s\n" "/dev/${DISK}2" "swap" "swap" "defaults" "0" "0" > $TMP/SeTswap else MULTIPARTITION=1 dialog --title "AUTO PARTITION" --infobox "Please wait while ${DISK} is being prepared for Salix" 0 0 cat < $TMP/layout.sfdisk /dev/${DISK}1 : start= , size= 6000, Id= 83, bootable /dev/${DISK}2 : start= , size= 1000, Id= 82 /dev/${DISK}3 : start= , size= , Id= 83 /dev/${DISK}4 : start= 0, size= 0, Id= 0 EOF2 sfdisk --no-reread -f -q -D -uM /dev/${DISK} < $TMP/layout.sfdisk | grep -v "Re-read" > $TMP/sfdisk.report 2> /dev/null /dev/makedevs.sh sfdisk -R /dev/${DISK} 1> /dev/null 2> /dev/null # formating ########################################## # root RootFS='ext4' make_ext4 /dev/${DISK}1 printf "%-16s %-16s %-11s %-16s %-3s %s\n" "/dev/${DISK}1" "/" "ext4" "defaults,noatime" "1" "1" > $TMP/SeTnative # swap if ! grep -w /dev/${DISK}2 /proc/swaps 1> /dev/null 2> /dev/null ; then mkswap -v1 /dev/${DISK}2 1> /dev/null 2> /dev/null swapon /dev/${DISK}2 1> /dev/null 2> /dev/null fi printf "%-16s %-16s %-11s %-16s %-3s %s\n" "/dev/${DISK}2" "swap" "swap" "defaults" "0" "0" > $TMP/SeTswap # home make_ext4 /dev/${DISK}3 printf "%-16s %-16s %-11s %-16s %-3s %s\n" "/dev/${DISK}3" "/home" "ext4" "defaults,noatime" "1" "2" >> $TMP/SeTnative fi echo "/dev/${DISK}1" > $TMP/SeTrootdev mount -t $RootFS /dev/${DISK}1 $T_PX 1> /dev/null 2> /dev/null if [ $MULTIPARTITION -eq 1 ];then mkdir $T_PX/home mount -t $RootFS /dev/${DISK}3 $T_PX/home 1> /dev/null 2> /dev/null fi # Done, report to the user: #dialog --title "AUTO PARTITION" --msgbox "$(cat $TMP/sfdisk.report)" 0 0 cat << EOF3 > $TMP/tempmsg Partitioning completed, Adding this information to your /etc/fstab: EOF3 cat $TMP/SeTnative >> $TMP/tempmsg cat $TMP/SeTswap >> $TMP/tempmsg dialog --title "AUTO PARTITION" \ --exit-label OK \ --textbox $TMP/tempmsg 15 75 echo "YES" > $TMP/isAuto export MAINSELECT="SOURCE" fi