diff --git a/tabs/system-setup/9-auto-mount.sh b/tabs/system-setup/9-auto-mount.sh new file mode 100644 index 000000000..fd81df516 --- /dev/null +++ b/tabs/system-setup/9-auto-mount.sh @@ -0,0 +1,89 @@ +#!/bin/sh -e + +. ../common-script.sh + +# Function to display available drives and allow the user to select one +select_drive() { + clear + printf "%b\n" "Available drives and partitions:" + lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,LABEL,UUID | grep -v 'loop' # list all non-loop devices + printf "\n" + printf "%b\n" "Enter the drive/partition name (e.g., sda1, sdb1): " + read -r drive_name + # Check if the input is valid + if lsblk | grep -q "${drive_name}"; then + partition="/dev/${drive_name}" + else + printf "%b\n" "${RED}Invalid drive/partition name!${RC}" + exit 1 + fi +} + +# Function to get UUID and FSTYPE of the selected drive +get_uuid_fstype() { + UUID=$(blkid -s UUID -o value "${partition}") + FSTYPE=$(lsblk -no FSTYPE "${partition}") + NAME=$(lsblk -no NAME "${partition}") + + if [ -z "$UUID" ]; then + printf "%b\n" "${RED}Failed to retrieve the UUID. Exiting.${RC}" + exit 1 + fi + + if [ -z "$FSTYPE" ]; then + printf "%b\n" "${RED}Failed to retrieve the filesystem type. Exiting.${RC}" + exit 1 + fi +} + +# Function to create a mount point +create_mount_point() { + printf "%b\n" "Enter the mount point path (e.g., /mnt/hdd): " + read -r mount_point + if [ ! -d "$mount_point" ]; then + printf "%b\n" "${YELLOW}Mount point doesn't exist. Creating it..${RC}." + $ESCALATION_TOOL mkdir -p "$mount_point" + else + printf "%b\n" "${RED}Mount point already exists.${RC}" + fi +} + +# Function to update /etc/fstab with a comment on the first line and the actual entry on the second line +update_fstab() { + printf "%b\n" "${YELLOW}Adding entry to /etc/fstab...${RC}" + $ESCALATION_TOOL cp /etc/fstab /etc/fstab.bak # Backup fstab + + # Prepare the comment and the fstab entry + comment="# Mount for /dev/$NAME" + fstab_entry="UUID=$UUID $mount_point $FSTYPE defaults 0 2" + + # Append the comment and the entry to /etc/fstab + printf "%b\n" "$comment" | $ESCALATION_TOOL tee -a /etc/fstab > /dev/null + printf "%b\n" "$fstab_entry" | $ESCALATION_TOOL tee -a /etc/fstab > /dev/null + printf "%b\n" "" | "$ESCALATION_TOOL" tee -a /etc/fstab > /dev/null + + printf "%b\n" "Entry added to /etc/fstab:" + printf "%b\n" "$comment" + printf "%b\n" "$fstab_entry" +} + + +# Function to mount the drive +mount_drive() { + printf "%b\n" "Mounting the drive..." + $ESCALATION_TOOL mount -a + if mount | grep "$mount_point" > /dev/null; then + printf "%b\n" "${GREEN}Drive mounted successfully at $mount_point${RC}." + else + printf "%b\n" "${RED}Failed to mount the drive.${RC}" + exit 1 + fi +} + +checkEnv +checkEscalationTool +select_drive +get_uuid_fstype +create_mount_point +update_fstab +mount_drive diff --git a/tabs/system-setup/tab_data.toml b/tabs/system-setup/tab_data.toml index e105139c7..f79210fd4 100644 --- a/tabs/system-setup/tab_data.toml +++ b/tabs/system-setup/tab_data.toml @@ -95,3 +95,6 @@ script = "6-docker-setup.sh" name = "Grub Theme Setup" script = "7-grub-theme.sh" +[[data]] +name = "Auto Mount Drive" +script = "9-auto-mount.sh" \ No newline at end of file