Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added auto mount script #494

Merged
merged 11 commits into from
Sep 19, 2024
89 changes: 89 additions & 0 deletions tabs/system-setup/9-auto-mount.sh
Original file line number Diff line number Diff line change
@@ -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
6 changes: 5 additions & 1 deletion tabs/system-setup/tab_data.toml
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,8 @@ script = "5-samba-ssh-setup.sh"

[[data]]
name = "Docker Setup"
script = "6-docker-setup.sh"
script = "6-docker-setup.sh"

[[data]]
name = "Auto Mount Drive"
script = "9-auto-mount.sh"