Drutt
Active Member
I have knocked up a script that attempts to simplify nfs / smb setup by allowing shares to be configured on the box, using folder names in a special "settings" directory to add and configure shares. It runs in the background, pinging the host(s) and mounting / unmounting the share when applicable. This should solve the problem of the Humax locking up if the computer goes to sleep. Its a bit rough and ready at the moment, and only tested on an HD. I'd appreciate any feedback / improvements / HDR testing, and then I can put it into a nice package ![Smile :) :)](/forum/styles/default/xenforo/smilies/smile.png)
Put the script in a file called /mod/sbin/scanMounts, and create a startup script in /mod/etc/init.d to kick it off (with an "&" after to run in the background). When a new directory is created in smb or nfs, after a few seconds it should create template "options" within it for you to fill in.
![Smile :) :)](/forum/styles/default/xenforo/smilies/smile.png)
Put the script in a file called /mod/sbin/scanMounts, and create a startup script in /mod/etc/init.d to kick it off (with an "&" after to run in the background). When a new directory is created in smb or nfs, after a few seconds it should create template "options" within it for you to fill in.
Code:
#!/bin/sh
TryMount()
{
type=$1
name=$2
host=$(ls "$name" | grep -e "^host" | cut -d'=' -f2 | sed -e 's/_/./g') #convert "_"s to "."s in host
folder=$(ls "$name" | grep -e "^folder" | cut -d'=' -f2 | sed -e 's/_/\//g') #convert "_"s to "/"s in folder name
ping -c 3 $host > /dev/null
if [ $? != 0 ]; then # mount or unmount?
echo "$host not found.."
# unmount if mounted
if [ -d "/media/$name" ]; then
echo "umount "/TEMP/$name""
umount "/media/$name" -l
rmdir "/media/$name"
fi
else
if [ ! -d "/media/$name" ]; then
echo "$host is on-line - attempting to mount"
mkdir "/media/$name" # and in My Videos?
if [ $type = "smb" ]; then
user=$(ls "$name" | grep -e "^user") # keep the [user|password etc]=... for these as they go into mount int that format
password=$(ls "$name" | grep -e "^password")
domain=$(ls "$name" | grep -e "^domain")
echo "mount -t cifs "//$host/$folder" "/media/$name" -o $user,$password,$domain,$workgroup"
mount -t cifs "//$host/$folder" "/media/$name" -o $user,$password,$domain,$workgroup
elif [ $type = "nfs" ]; then
echo "mount -o soft "$host:/$folder" "/media/$name""
mount -o soft "$host:/$folder" "/media/$name"
fi
if [ $? != 0 ]; then # failed
echo "Mount failed..."
rmdir "/media/$name"
fi
fi
fi
}
CreateExample()
{
type=$1
name=$2
mkdir "$name/host=10_0_1_XX"
mkdir "$name/folder=ShareFolder (use _ for slash)"
if [ $type = "smb" ]; then
mkdir "$name/user=User"
mkdir "$name/password=Password"
mkdir "$name/*workgroup=Workgroup (Optional - remove *)"
mkdir "$name/*domain=Domain (Optional - remove *)"
fi
}
exec >/tmp/scanmounts.log 2>&1
cd /mod/settings
# create some help 1st time
if [ ! -d smb ]; then
mkdir -p "smb/*Create folder with mount name (opt+)"
mkdir -p "smb/*Then edit options in folder"
fi
if [ ! -d nfs ]; then
mkdir -p "nfs/*Create folder with mount name (opt+)"
mkdir -p "nfs/*Then edit options in folder"
fi
# set up links to where we can get at the settings folder (a bit messy due to HDR / HD differences)
if [ -d "/media/My Video" ]; then # HDR - add link to settings here as it can't get to /mod
mkdir -p "/media/My Video/*modSettings/smb"
mkdir -p "/media/My Video/*modSettings/nfs"
mount /mod/settings/smb "/media/My Video/*modSettings/smb"
mount /mod/settings/nfs "/media/My Video/*modSettings/nfs"
fi
if [ -d "/media/drive1/*ModSettings" ]; then # HD with *modsettings on root- add link to settings here
mkdir -p "/media/drive1/*ModSettings/smb"
mkdir -p "/media/drive1/*ModSettings/nfs"
mount /mod/settings/smb "/media/drive1/*ModSettings/smb"
mount /mod/settings/nfs "/media/drive1/*ModSettings/nfs"
fi
# loop checking the mounts
while [ 1 ]
do
for type in smb nfs; do
if [ -d $type ]; then
cd $type
for mountname in [!*]*; do #ignore "comments" starting with *
if [ -d "$mountname" ]; then
echo "Checking $mountname"
if [ "$(ls -A "$mountname")" != "" ]; then
TryMount $type "$mountname"
else
CreateExample $type "$mountname" #Empty dir - create examples
fi
fi
done
cd .. # back up to settings
fi
done
sleep 9
done