I’ve been rebuilding my Raspberry Pi collection from scratch, and moving from Ubuntu Server to Debian/Raspbian Bookworm. One of the tasks that I quickly tried to automate was reconnecting my CIFS mounts. I wanted to do it better, and came across this method, with the help of ChatGPT, to mount them at boot:
#!/bin/bash
# Check if the script is run as root
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
# Check for correct number of arguments
if [ "$#" -ne 4 ]; then
echo "Usage: $0 <RemoteDirectory> <MountDirectory> <Username> <Password>"
exit 1
fi
REMOTE_DIR="$1"
MOUNT_DIR="$2"
USERNAME="$3"
PASSWORD="$4"
CREDENTIALS_PATH="/etc/samba/credentials-$(basename "$MOUNT_DIR")"
# Escape the mount directory for systemd
UNIT_NAME=$(systemd-escape -p --suffix=mount "$MOUNT_DIR")
# Create mount directory
mkdir -p "$MOUNT_DIR"
# Create credentials file
touch "$CREDENTIALS_PATH"
echo "username=$USERNAME" > "$CREDENTIALS_PATH"
echo "password=$PASSWORD" >> "$CREDENTIALS_PATH"
chmod 600 "$CREDENTIALS_PATH"
# Create systemd unit file
UNIT_FILE_PATH="/etc/systemd/system/$UNIT_NAME"
echo "[Unit]
Description=Mount Share at $MOUNT_DIR
After=network-online.target
Wants=network-online.target
[Mount]
What=$REMOTE_DIR
Where=$MOUNT_DIR
Type=cifs
Options=_netdev,iocharset=utf8,file_mode=0777,dir_mode=0777,credentials=$CREDENTIALS_PATH
TimeoutSec=30
[Install]
WantedBy=multi-user.target" > "$UNIT_FILE_PATH"
# Reload systemd, enable and start the unit
systemctl daemon-reload
systemctl enable "$UNIT_NAME"
systemctl start "$UNIT_NAME"
echo "Mount setup complete. Mounted $REMOTE_DIR at $MOUNT_DIR"
Code language: Bash (bash)
I’m sure this is totally insecure and a terrible idea, but it works for me so back off, buddy!
Please don’t follow me as an example of what to do, but take this code for anything you need.
Leave a Reply