slackware-current/source/installer/sources/initrd/usr/lib/setup/SeTpartitions
Patrick J Volkerding 3889868763 Wed Nov 28 07:25:32 UTC 2018
a/elilo-3.16-x86_64-9.txz:  Rebuilt.
  eliloconfig: don't assume that mount output lists the / partition first.
a/f2fs-tools-1.12.0-x86_64-1.txz:  Added.
a/kernel-generic-4.19.5-x86_64-1.txz:  Upgraded.
a/kernel-huge-4.19.5-x86_64-1.txz:  Upgraded.
 CRYPTO_CRC32 m -> y
 F2FS_FS m -> y
a/kernel-modules-4.19.5-x86_64-1.txz:  Upgraded.
a/sysvinit-scripts-2.1-noarch-22.txz:  Rebuilt.
  rc.S: if we're using F2FS for the root filesystem, don't try to check it as
  fsck.f2fs throws an error on trying to check a read-only filesystem.
d/clisp-2.49_20181112_df3b9f6fd-x86_64-1.txz:  Upgraded.
d/kernel-headers-4.19.5-x86-1.txz:  Upgraded.
k/kernel-source-4.19.5-noarch-1.txz:  Upgraded.
l/graphite2-1.3.12-x86_64-1.txz:  Added.
  Required by harfbuzz in order to use it as a system library for TeXlive.
l/harfbuzz-2.1.3-x86_64-1.txz:  Upgraded.
  Requires graphite2-1.3.12.
t/texlive-2018.180822-x86_64-4.txz:  Rebuilt.
  Use system harfbuzz, not the bundled version.
isolinux/initrd.img:  Rebuilt.
  Activate LVM volumes at boot, not only when setup is run.
  Make /etc/mtab a symlink to /proc/mounts on the installer.
  On a freshly installed system, make /etc/mtab a symlink to /proc/mounts.
  Include f2fs-tools on the installer.
  Support installing on F2FS partitions.
kernels/*:  Upgraded.
usb-and-pxe-installers/usbboot.img:  Rebuilt.
2018-11-28 17:59:44 +01:00

552 lines
18 KiB
Bash
Executable file

#!/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_f2fs( dev ) - Create a new f2fs filesystem on the named dev.
# Parameters: dev Device node to format.
make_f2fs() {
# 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 f2fs." \
--infobox "Formatting $1 \n\
Size: $SIZE \n\
Filesystem type: f2fs " 0 0
# do the format
if mount | grep "$1 " 1> $NDIR 2> $NDIR ; then
umount $1 2> $NDIR
fi
mkfs.f2fs -f $1 1> $REDIR 2> $REDIR
}
# 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 F2FS 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
if grep -wq f2fs /proc/filesystems 1> $NDIR 2> $NDIR ; then
F2FS="F2FS is a Flash-Friendly File System. "
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 $BTRFS $F2FS $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 [ ! "$F2FS" = "" ]; then
echo "\"f2fs\" \"Flash-Friendly File System\" \\" >> $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" = "f2fs" ]; then
make_f2fs $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" = "f2fs" ]; then
make_f2fs $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