summaryrefslogtreecommitdiff
path: root/source/installer/sources/initrd/usr/lib/setup/SeTpartitions
diff options
context:
space:
mode:
Diffstat (limited to 'source/installer/sources/initrd/usr/lib/setup/SeTpartitions')
-rwxr-xr-xsource/installer/sources/initrd/usr/lib/setup/SeTpartitions524
1 files changed, 524 insertions, 0 deletions
diff --git a/source/installer/sources/initrd/usr/lib/setup/SeTpartitions b/source/installer/sources/initrd/usr/lib/setup/SeTpartitions
new file mode 100755
index 00000000..34819701
--- /dev/null
+++ b/source/installer/sources/initrd/usr/lib/setup/SeTpartitions
@@ -0,0 +1,524 @@
+#!/bin/sh
+# SeTpartition user-friendly rewrite Fri Dec 15 13:17:40 CST 1995 pjv
+# Rewrite to support filesystem plugins <david@slackware.com>, 07-May-2001
+# Don't use plugins, make it work, pjv, 18-May-2001.
+# Generalize tempscript creation and support JFS and XFS. pjv, 30-Mar-2002
+
+TMP=/var/log/setup/tmp
+NDIR=/dev/null
+REDIR=/dev/tty4
+T_PX="`cat $TMP/SeTT_PX`"
+
+# FUNCTIONS
+
+# crunch() - remove extra whitespace
+crunch () {
+ read STRING;
+ echo $STRING
+}
+
+# make_btrfs( dev ) - Create a new btrfs filesystem on the named dev.
+# Parameters: dev Device node to format.
+make_btrfs() {
+ # 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 btrfs." \
+ --infobox "Formatting $1 \n\
+Size: $SIZE \n\
+Filesystem type: btrfs " 0 0
+ # do the format
+ if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
+ umount $1 2> $NDIR
+ fi
+ mkfs.btrfs -f -d single -m single $1 1> $REDIR 2> $REDIR
+}
+
+# make_ext2( dev, check ) - Create a new ext2 filesystem on the named
+# device.
+# Parameters: dev Device node to format.
+# check Perform fs check (y or n)
+make_ext2() {
+ # 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 ext2." \
+ --infobox "Formatting $1 \n\
+Size: $SIZE \n\
+Filesystem type: ext2" 0 0
+ # do the format
+ if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
+ umount $1 2> $NDIR
+ fi
+ if [ "$2" = "y" ]; then
+ mkfs.ext2 -F -F -c $1 1> $REDIR 2> $REDIR
+ else
+ mkfs.ext2 -F -F $1 1> $REDIR 2> $REDIR
+ fi
+}
+
+# make_ext3( dev, check ) - Create a new ext3 filesystem on the named
+# device.
+# Parameters: dev Device node to format.
+# check Perform fs check (y or n)
+make_ext3() {
+ # 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 ext3." \
+ --infobox "Formatting $1 \n\
+Size: $SIZE \n\
+Filesystem type: ext3" 0 0
+ # do the format
+ if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
+ umount $1 2> $NDIR
+ fi
+ if [ "$2" = "y" ]; then
+ mkfs.ext3 -F -F -c $1 1> $REDIR 2> $REDIR
+ else
+ mkfs.ext3 -F -F $1 1> $REDIR 2> $REDIR
+ fi
+}
+
+# make_ext4( dev, check ) - Create a new ext4 filesystem on the named
+# device.
+# Parameters: dev Device node to format.
+# 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: $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 [ "$2" = "y" ]; then
+ mkfs.ext4 -F -F -c $1 1> $REDIR 2> $REDIR
+ else
+ mkfs.ext4 -F -F $1 1> $REDIR 2> $REDIR
+ fi
+}
+
+# make_jfs( dev, check ) - Create a new jfs filesystem on the named
+# device.
+# Parameters: dev Device node to format.
+# check Perform fs check (y or n)
+make_jfs() {
+ # 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 jfs." \
+ --infobox "Formatting $1 \n\
+Size: $SIZE \n\
+Filesystem type: jfs" 0 0
+ # do the format
+ if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
+ umount $1 2> $NDIR
+ fi
+ if [ "$2" = "y" ]; then
+ mkfs.jfs -c -q $1 1> $REDIR 2> $REDIR
+ else
+ mkfs.jfs -q $1 1> $REDIR 2> $REDIR
+ fi
+}
+
+# make_reiserfs( dev ) - Create a new reiserfs filesystem on the named dev.
+# Parameters: dev Device node to format.
+make_reiserfs() {
+ # 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 reiserfs." \
+ --infobox "Formatting $1 \n\
+Size: $SIZE \n\
+Filesystem type: reiserfs " 0 0
+ # do the format
+ if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
+ umount $1 2> $NDIR
+ fi
+ echo "y" | mkreiserfs $1 1> $REDIR 2> $REDIR
+}
+
+# make_xfs( dev ) - Create a new xfs filesystem on the named dev
+# Parameters: dev Device node to format.
+make_xfs() {
+ # 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 xfs." \
+ --infobox "Formatting $1 \n\
+Size: $SIZE \n\
+Filesystem type: xfs " 0 0
+ # do the format
+ if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
+ umount $1 2> $NDIR
+ fi
+ mkfs.xfs -f $1 1> $REDIR 2> $REDIR
+}
+
+# gen_part_list() - Prints out a partition listing for the system into the
+gen_part_list() {
+ export COUNT=0
+ cat $TMP/SeTplist | while [ 0 ]; do
+ read PARTITION;
+ if [ "$PARTITION" = "" ]; then
+ break;
+ fi
+ # Variables, variables, variables
+ NAME=`echo $PARTITION | crunch | cut -f 1 -d ' '`
+ ALTNAME=""
+ DEVICE=`echo "$PARTITION" | tr -d "*" | crunch | cut -f 1 -d ' '`
+ SIZE=`get_part_size $DEVICE`
+ # See if this partition is in use already
+ if grep "$DEVICE " $TMP/SeTnative 1> $NDIR; then # it's been used
+ ON=`grep "$DEVICE " $TMP/SeTnative | crunch | cut -f 2 -d ' '`
+ ALTNAME="$DEVICE on $ON Linux ${SIZE}"
+ fi
+ # Add a menu item
+ if [ "$ALTNAME" = "" ]; then
+ echo "\"$NAME\" \"Linux ${SIZE}\" \\" >> $TMP/tempscript
+ echo "false" > $TMP/SeTSKIP # this flag is used for non-root parts
+ else
+ echo "\"(IN USE)\" \"$ALTNAME\" \\" >> $TMP/tempscript
+ fi
+ done
+ echo "\"---\" \"(done adding partitions, continue with setup)\" \\" >> $TMP/tempscript
+ echo "\"---\" \"(done adding partitions, continue with setup)\" \\" >> $TMP/tempscript
+ echo "\"---\" \"(done adding partitions, continue with setup)\" \\" >> $TMP/tempscript
+ echo "\"---\" \"(done adding partitions, continue with setup)\" \\" >> $TMP/tempscript
+ echo "\"---\" \"(done adding partitions, continue with setup)\" \\" >> $TMP/tempscript
+ echo "2> $TMP/return" >> $TMP/tempscript
+}
+
+# ask_format( dev ) - Asks the user if he/she wants to format the named device
+ask_format() {
+ dialog --backtitle "Do you want to format Linux partition ${1}?" \
+ --title "FORMAT PARTITION $1" --menu "If this partition has \
+not been formatted, you should format it. NOTE: This will erase all data on \
+it. Would you like \
+to format this partition?" 12 70 3 \
+ "Format" "Quick format with no bad block checking" \
+ "Check" "Slow format that checks for bad blocks" \
+ "No" "No, do not format this partition" 2> $TMP/return
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/return
+ exit
+ fi
+}
+
+# ask_fs( dev ) - Asks the user the type of filesystem to use for the named
+# device. Answer in $TMP/return
+ask_fs() {
+ unset BTRFS EXT2 EXT3 JFS REISERFS XFS
+ if grep -wq ext2 /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ EXT2="Ext2 is the traditional Linux file system and is fast and stable. "
+ fi
+ if grep -wq ext3 /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ EXT3="Ext3 is the journaling version of the Ext2 filesystem. "
+ DEFAULT=ext3
+ fi
+ if grep -wq ext4 /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ EXT4="Ext4 is the successor to the ext3 filesystem. "
+ DEFAULT=ext4
+ fi
+ if grep -wq reiserfs /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ REISERFS="ReiserFS is a journaling filesystem that stores all files and filenames in a balanced tree structure. "
+ fi
+ if grep -wq btrfs /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ BTRFS="Btrfs is a B-tree copy-on-write filesystem. "
+ fi
+ # These last two will only be present if the user asked for a special kernel.
+ # They should probably be the default in that case.
+ if grep -wq jfs /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ JFS="JFS is IBM's Journaled Filesystem, currently used in IBM enterprise servers. "
+ fi
+ if grep -wq xfs /proc/filesystems 1> $NDIR 2> $NDIR ; then
+ XFS="XFS is SGI's journaling filesystem that originated on IRIX. "
+ fi
+ cat << EOF > $TMP/tempscript
+dialog --title "SELECT FILESYSTEM FOR $1" \\
+--backtitle "Partition $1 will be formatted." \\
+--default-item $DEFAULT --menu \\
+"Please select the type of filesystem to use for the specified \\
+device. Here are descriptions of the available filesystems: $EXT2 $EXT3 $EXT4 $JFS $REISERFS $XFS" \\
+0 0 0 \\
+EOF
+ if [ ! "$EXT2" = "" ]; then
+ echo "\"ext2\" \"Standard Linux Ext2 Filesystem\" \\" >> $TMP/tempscript
+ fi
+ if [ ! "$EXT3" = "" ]; then
+ echo "\"ext3\" \"Ext3 Journaling Filesystem\" \\" >> $TMP/tempscript
+ fi
+ if [ ! "$EXT4" = "" ]; then
+ echo "\"ext4\" \"Ext4 Journaling Filesystem\" \\" >> $TMP/tempscript
+ fi
+ if [ ! "$JFS" = "" ]; then
+ echo "\"jfs\" \"IBM's Journaled Filesystem\" \\" >> $TMP/tempscript
+ fi
+ if [ ! "$REISERFS" = "" ]; then
+ echo "\"reiserfs\" \"ReiserFS Journaling Filesystem\" \\" >> $TMP/tempscript
+ fi
+ if [ ! "$BTRFS" = "" ]; then
+ echo "\"btrfs\" \"Btrfs Copy-on-Write B-tree Filesystem\" \\" >> $TMP/tempscript
+ fi
+ if [ ! "$XFS" = "" ]; then
+ echo "\"xfs\" \"SGI's Journaling Filesystem\" \\" >> $TMP/tempscript
+ fi
+ echo "2> $TMP/return" >> $TMP/tempscript
+ . $TMP/tempscript
+ if [ ! $? = 0 ]; then
+ rm -f $TMP/return
+ exit
+ fi
+}
+
+# get_part_size( dev ) - Return the size in K, M, G, T, or P of the named partition.
+get_part_size() {
+ numfmt --to=iec $(blockdev --getsize64 $1)
+}
+
+# MAIN
+
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+
+if [ ! -r $TMP/SeTplist ]; then
+ # Give warning?
+ exit
+fi
+
+cat /dev/null >> $TMP/SeTnative
+
+cat << EOF > $TMP/tempscript
+dialog --backtitle "Setting up root Linux partition." \\
+--title "Select Linux installation partition:" --ok-label Select --cancel-label Continue --menu \\
+"Please select a partition from the following list to use for your \\
+root (/) Linux partition." 13 70 5 \\
+EOF
+gen_part_list
+
+. $TMP/tempscript
+if [ ! $? = 0 ]; then
+ rm $TMP/tempscript
+ exit 255 # user abort
+fi
+
+ROOT_DEVICE="`cat $TMP/return`"
+rm $TMP/tempscript
+if [ "$ROOT_DEVICE" = "---" ]; then
+ exit 255
+fi
+
+# format root partition?
+ask_format $ROOT_DEVICE
+DOFORMAT="`cat $TMP/return`"
+rm -f $TMP/return
+if [ ! "$DOFORMAT" = "No" ]; then
+ ask_fs $ROOT_DEVICE
+ ROOT_SYS_TYPE="`cat $TMP/return`"
+ rm -f $TMP/return
+ # create the filesystem
+ if [ "$ROOT_SYS_TYPE" = "ext2" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_ext2 $ROOT_DEVICE "y"
+ else
+ make_ext2 $ROOT_DEVICE "n"
+ fi
+ elif [ "$ROOT_SYS_TYPE" = "ext3" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_ext3 $ROOT_DEVICE "y"
+ else
+ make_ext3 $ROOT_DEVICE "n"
+ fi
+ elif [ "$ROOT_SYS_TYPE" = "ext4" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_ext4 $ROOT_DEVICE "y"
+ else
+ make_ext4 $ROOT_DEVICE "n"
+ fi
+ elif [ "$ROOT_SYS_TYPE" = "reiserfs" ]; then
+ make_reiserfs $ROOT_DEVICE
+ elif [ "$ROOT_SYS_TYPE" = "btrfs" ]; then
+ make_btrfs $ROOT_DEVICE
+ elif [ "$ROOT_SYS_TYPE" = "jfs" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_jfs $ROOT_DEVICE "y"
+ else
+ make_jfs $ROOT_DEVICE "n"
+ fi
+ elif [ "$ROOT_SYS_TYPE" = "xfs" ]; then
+ make_xfs $ROOT_DEVICE
+ fi
+fi # DOFORMAT?
+
+# Sync before identifying and mounting the root device:
+sync
+
+# Determine the filesystem type using blkid:
+ROOT_SYS_TYPE=$(blkid -s TYPE $ROOT_DEVICE | cut -f 2 -d = | tr -d \")
+
+# Mount the root filesystem:
+mount $ROOT_DEVICE $T_PX -t $ROOT_SYS_TYPE 1> $REDIR 2> $REDIR
+
+#echo "$ROOT_DEVICE / $ROOT_SYS_TYPE defaults 1 1" > $TMP/SeTnative
+printf "%-16s %-16s %-11s %-16s %-3s %s\n" "$ROOT_DEVICE" "/" "$ROOT_SYS_TYPE" "defaults" "1" "1" > $TMP/SeTnative
+echo $ROOT_DEVICE > $TMP/SeTrootdev
+
+# done mounting the target root partition
+
+# More than one Linux partition
+if [ ! "`cat $TMP/SeTplist | sed -n '2 p'`" = "" ]; then
+ while [ 0 ]; do # next partition loop
+ # OK, we will set this flag, and if we find an unused partition, we
+ # change it. If it doesn't get switched, we skip the next menu.
+ rm -f $TMP/SeTSKIP
+ echo "true" > $TMP/SeTSKIP
+
+ cat << EOF > $TMP/tempscript
+ dialog --backtitle "Setting up other Linux partitions." \\
+--title "Select other Linux partitions for /etc/fstab" \\
+--ok-label Select --cancel-label Continue \\
+--menu "You seem to have more than one partition tagged as type Linux. \\
+You may use these to distribute your Linux system across more than \\
+one partition. Currently, you have $ROOT_DEVICE mounted as your / partition. \\
+You might want to mount directories such as /home or /usr/local \\
+on separate partitions. You should not try to mount /etc, /sbin, or /bin on \\
+their own partitions since they contain utilities needed to bring the system \\
+up and mount partitions. Also, do not reuse a partition that you've already \\
+entered before. Please select one of the Linux partitions listed below, or \\
+if you're done, hit <Continue>." 20 70 4 \\
+EOF
+ gen_part_list
+
+ if [ "`cat $TMP/SeTSKIP`" = "true" ]; then
+ break;
+ fi
+ rm -rf $TMP/return
+
+ . $TMP/tempscript
+ if [ ! $? = 0 ]; then
+ break;
+ fi
+
+ NEXT_PARTITION=`cat $TMP/return`
+ if [ "$NEXT_PARTITION" = "---" ]; then
+ break;
+ elif [ "$NEXT_PARTITION" = "(IN USE)" ]; then
+ continue;
+ fi
+
+ # We now have the next partition, ask the user what to do with it:
+ ask_format $NEXT_PARTITION
+
+ DOFORMAT="`cat $TMP/return`"
+ rm -f $TMP/return
+
+ BACKT="Partition $NEXT_PARTITION will not be reformatted."
+ if [ ! "$DOFORMAT" = "No" ]; then
+ ask_fs $NEXT_PARTITION
+ NEXT_SYS_TYPE="`cat $TMP/return`"
+ rm -f $TMP/return
+ BACKT="Partition $NEXT_PARTITION will be formatted with $NEXT_SYS_TYPE."
+ # create the filesystem
+ if [ "$NEXT_SYS_TYPE" = "ext2" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_ext2 $NEXT_PARTITION "y"
+ else
+ make_ext2 $NEXT_PARTITION "n"
+ fi
+ elif [ "$NEXT_SYS_TYPE" = "ext3" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_ext3 $NEXT_PARTITION "y"
+ else
+ make_ext3 $NEXT_PARTITION "n"
+ fi
+ elif [ "$NEXT_SYS_TYPE" = "ext4" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_ext4 $NEXT_PARTITION "y"
+ else
+ make_ext4 $NEXT_PARTITION "n"
+ fi
+ elif [ "$NEXT_SYS_TYPE" = "reiserfs" ]; then
+ make_reiserfs $NEXT_PARTITION
+ elif [ "$NEXT_SYS_TYPE" = "btrfs" ]; then
+ make_btrfs $NEXT_PARTITION
+ elif [ "$NEXT_SYS_TYPE" = "jfs" ]; then
+ if [ "$DOFORMAT" = "Check" ]; then
+ make_jfs $NEXT_PARTITION "y"
+ else
+ make_jfs $NEXT_PARTITION "n"
+ fi
+ elif [ "$NEXT_SYS_TYPE" = "xfs" ]; then
+ make_xfs $NEXT_PARTITION
+ fi
+ fi # DOFORMAT?
+
+ # Now ask the user where to mount this new filesystem:
+ dialog --backtitle "$BACKT" --title \
+"SELECT MOUNT POINT FOR $NEXT_PARTITION" --inputbox \
+"OK, now you need to specify where you want the new partition mounted. \
+For example, if you want to put it under /usr/local, then respond: /usr/local\n\
+Where would you like to mount $NEXT_PARTITION?" 11 59 2> $TMP/return
+ if [ ! $? = 0 ]; then
+ continue
+ fi
+
+ MTPT=`cat $TMP/return`
+ if [ "$MTPT" = "" ]; then # abort if blank
+ continue
+ fi
+ if [ "`echo "$MTPT" | cut -b1`" = " " ]; then # bail if 1st char is space
+ continue
+ fi
+ if [ ! "`echo "$MTPT" | cut -b1`" = "/" ]; then # add / to start of path
+ MTPT="/$MTPT"
+ fi
+ rm $TMP/return
+
+ # Sync before identifying and mounting the partition:
+ sync
+
+ # Create the mount point if it does not exist:
+ if [ ! -d ${T_PX}/$MTPT ]; then
+ mkdir -p ${T_PX}/$MTPT
+ fi
+
+ # Determine the filesystem type using blkid:
+ NEXT_SYS_TYPE=$(blkid -s TYPE $NEXT_PARTITION | cut -f 2 -d = | tr -d \")
+
+ # Mount the partition:
+ mount $NEXT_PARTITION ${T_PX}/$MTPT -t $NEXT_SYS_TYPE 1> $REDIR 2> $REDIR
+
+ #echo "$NEXT_PARTITION $MTPT $NEXT_SYS_TYPE defaults 1 1" >> $TMP/SeTnative
+ printf "%-16s %-16s %-11s %-16s %-3s %s\n" "$NEXT_PARTITION" "$MTPT" "$NEXT_SYS_TYPE" "defaults" "1" "2" >> $TMP/SeTnative
+ done # next partition loop
+fi # more than one Linux partition
+
+# Done, report to the user:
+cat << EOF > $TMP/tempmsg
+
+Adding this information to your /etc/fstab:
+
+EOF
+cat $TMP/SeTnative >> $TMP/tempmsg
+dialog --backtitle "Finished setting up Linux partitions." \
+--title "DONE ADDING LINUX PARTITIONS TO /etc/fstab" \
+--exit-label OK \
+--textbox $TMP/tempmsg 15 72
+
+## More obsolete code from the floppy disk era:
+## Now, move our /tmp storage onto the target partition if possible:
+#/usr/lib/setup/migrate.sh
+