123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- makeMenu()
- {
- while read -r line
- do
- test -n "$line" || continue
-
- device="${line%% *}"
- size="$(lsblk --noheadings --nodeps --output SIZE "$device")"
-
- devpoint="$(awk -v patr="$device" '$1 == patr { print $2 }' \
- "${SUBTMPDIR}/fstab" 2> /dev/null)"
- formatfs="$(awk -v patr="$device" '$1 == patr { print $3 }' \
- "${SUBTMPDIR}/fstab" 2> /dev/null)"
- if test -z "$formatfs" || test "$formatfs" = defaults
- then
- formatfs="$(blkid -s TYPE -o value "$device" 2> /dev/null)"
- fi
-
- echo "\"${device}\" \"${formatfs:-Linux}${size} $devpoint\" \\" \
- >> "${SUBTMPDIR}/MakeFS"
- done < "${SUBTMPDIR}/partitions"
-
- echo ' 2> "${SUBTMPDIR}/return-MakeFS" || _code=$?' \
- >> "${SUBTMPDIR}/MakeFS"
- }
- askMountPoint()
- {
- dialog --colors \
- --backtitle "\\ZbSetting Linux partitions: Mount point for $1" \
- --title "MOUNT POINT" \
- --no-cancel --ok-label "Continue" \
- --cr-wrap --inputbox \
- "A mount point can be assigned to the partition.
- * Consider declaring a complete path such as \"/storage\".
- * If you declare the single slash \"/\" it will be
- designated for the (main) system partition.
- Note: If you use directory names that contain spaces,
- the same will be converted using the octal character
- 040, which is interpreted by the file system table.
- Enter a mount point for \"${1}\":
- (If you leave this blank, any previous entries will be deleted)." 20 62 \
- 2> "${SUBTMPDIR}/return-MakeFS_askMountPoint" || return 0
-
-
-
-
-
-
- mntpoint="$(sed -e "s/[\\'\"]//g" -e 's/[[:blank:]]/\\040/g' \
- "${SUBTMPDIR}/return-MakeFS_askMountPoint")"
- if test -n "$mntpoint"
- then
-
- case $mntpoint in
- /) fs_passno=1;;
- *) fs_passno=2;;
- esac
-
- formatfs="$(blkid -s TYPE -o value "$1" 2> /dev/null)"
-
- printf '%-43s %-14s %-12s %-16s %-3s %s\n' \
- "$1" "$mntpoint" "$formatfs" "defaults" "1" "${fs_passno}" \
- >> "${SUBTMPDIR}/fstab"
- unset -v fs_passno formatfs
-
- if test "$(grep -c "^$1" "${SUBTMPDIR}"/fstab)" -gt 1
- then
- repeated="$(grep -m 1 -n "^$1" "${SUBTMPDIR}"/fstab)"
- repeated="${repeated%%:*}"
- sed -i "${repeated}d" "${SUBTMPDIR}/fstab"
- unset -v repeated
- fi
- else
- if test -n "$1" && test -s "${SUBTMPDIR}/fstab"
- then
- escape_slash="$(printf '%s' "$1" | sed 's/\//\\\//g')"
- sed -i "/${escape_slash}/d" "${SUBTMPDIR}/fstab"
- unset -v escape_slash
- fi
- fi
- unset -v mntpoint
- }
- _mkfs()
- {
- helper="$1"
- devname="$2"
- dialog --colors \
- --backtitle "\\ZbPartitions - ${devname}" \
- --title "FILE SYSTEM FORMAT" \
- --ok-label "Format" --cr-wrap --checklist \
- "The following device can be formatted using the \"${helper}\" helper:
- $(fdisk -l "$devname" | head -n 1)" 13 55 1 \
- "$devname" "Check for bad blocks (slow)" off \
- 2> "${SUBTMPDIR}/return-MakeFS_mkfs" || return $?
- dialog --clear
- echo "Making ${helper#*.} filesystem for $devname ..."
- echo ""
- if test -s "${SUBTMPDIR}/return-MakeFS_mkfs"
- then
- $helper -F -F -c $devname
- else
- $helper -F -F $devname
- fi
- sleep 4
- unset -v helper devname
- }
- _mkbtrfs()
- {
- dialog --clear
- echo "Making btrfs filesystem for $1 ..."
- echo ""
- mkfs.btrfs -f -d single -m single "$1"
- sleep 4
- }
- _mkreiser4()
- {
-
- case $1 in
- *nvme*)
- reiser_sdd=-d
- ;;
- esac
- dialog --clear
- echo "Making reiser4 filesystem for $1 ..."
- echo ""
- mkfs.reiser4 -yf $reiser_sdd -o create=reg40,node=node41 "$1"
- sleep 4
- unset -v reiser_sdd
- }
- _mkxfs()
- {
- dialog --clear
- echo "Making xfs filesystem for $1 ..."
- echo ""
- mkfs.xfs -f "$1"
- sleep 4
- }
- formatMenu()
- {
- dialog --colors \
- --backtitle "\\Zb${1}: Setting a file system" \
- --title "FILE SYSTEM SELECTION" \
- --default-item "ext3" \
- --item-help --cr-wrap --menu \
- "Choose a file system for '${1}':" 13 58 6 \
- "ext2" "Second extended filesystem" "ext2 remains the preferred file system for flash-based storage media due to its lack of a journal" \
- "ext3" "Third extended filesystem" "ext3 is suitable for both 32-bit and 64-bit systems" \
- "ext4" "Fourth extended filesystem" "We suggest using it more for a 64-bit system than for a 32-bit system" \
- "btrfs" "Btrfs filesystem" "A modern copy on write (CoW) filesystem for GNU/Linux" \
- "reiser4" "Reiser4 filesystem" "Reiser4 is a successor of ReiserFS (a general-purpose, journaling file system)" \
- "xfs" "XFS filesystem" "XFS is a high-performance 64-bit journaling file system suitable for real-time applications" \
- 2> "${SUBTMPDIR}/return-MakeFS_formatMenu" || _status=$?
- if test -n "$_status" && test $_status -ne 0
- then
- return "$_status";
- fi
- unset -v _status
-
- umount "$1" > /dev/null 2>&1 || true
-
- case "$(cat -- "${SUBTMPDIR}"/return-MakeFS_formatMenu)" in
- ext2)
- _mkfs mkfs.ext2 "$1"
- ;;
- ext3)
- _mkfs mkfs.ext3 "$1"
- ;;
- ext4)
- _mkfs mkfs.ext4 "$1"
- ;;
- btrfs)
- _mkbtrfs "$1"
- ;;
- reiser4)
- _mkreiser4 "$1"
- ;;
- xfs)
- _mkxfs "$1"
- ;;
- esac
- }
- while true
- do
- cat << EOF > "${SUBTMPDIR}/MakeFS"
- dialog --colors \\
- --backtitle "\\ZbPartitions and mount points" \\
- --title "Setting Linux partitions" \\
- --ok-button "Establish" --extra-button \\
- --extra-label "Done" \\
- --cr-wrap --menu \\
- "The following Linux partitions has been detected:
- Selecting a partition gives you the possibility to set up
- a file system or a mount point for the boot stage of the system.
- Once this has been established, choose the \\"Done\\" button
- to continue with the installation." 16 65 5 \\
- EOF
- makeMenu && . "${SUBTMPDIR}/MakeFS"
- case "${_code:-$?}" in
- 0)
- partition="$(cat -- "${SUBTMPDIR}"/return-MakeFS)"
- if test -z "$partition"
- then
- echo "${PROGRAM}: Error the partition list is empty." 1>&2
- exit 99;
- fi
- if test -n "$(blkid -s TYPE -o value "$partition" 2> /dev/null)"
- then
- dialog --colors \
- --backtitle "\\ZbPartitions and mount points" \
- --title "$partition" \
- --no-cancel --cr-wrap --menu \
- "Selected device already contains a file system!
- You can assign a mount point for system startup, you also
- have the ability to re-format the partition. If you choose
- the latter, you will lose all your data and will be asked
- for a mounting point.
- What would you like to do for '${partition}'?" 17 64 3 \
- "0" "Assign a mount point" \
- "1" "Format again (data loss risk)" \
- "<" "Return to previous menu" \
- 2> "${SUBTMPDIR}/return-MakeFS_case" || continue;
- case "$(cat -- "${SUBTMPDIR}"/return-MakeFS_case)" in
- 0) askMountPoint "$partition";;
- 1) formatMenu "$partition" && askMountPoint "$partition";;
- esac
- else
- formatMenu "$partition" && askMountPoint "$partition"
- fi
- ;;
- 3)
-
- if grep -qs -m 1 '/ ' "${SUBTMPDIR}/fstab"
- then
- break;
- else
- dialog --colors \
- --backtitle "\\ZbPartitions and mount points: Unknown mount point for root partition" \
- --title "NO MOUNT POINT FOR MAIN SYSTEM" \
- --ok-label "Return" --cr-wrap --msgbox \
- "
- There is no declared mount point for the root partition.
- Please go back and assign a mount point for the
- root partition. Remember that the mount point must
- be declared as \"/\" (without quotes and spaces).
- " 11 60 || { unset -v _code ; continue; }
- fi
- ;;
- *)
- exit "$_code"
- ;;
- esac
- unset -v _code;
- done
- unset makeMenu _mkfs _mkxfs FormatMenu _code
|