• The forum software that supports hummy.tv has been upgraded to XenForo 2.3!

    Please bear with us as we continue to tweak things, and feel free to post any questions, issues or suggestions in the upgrade thread.

Mod: helper script for network shares

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 :)

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
 
Well done Steve.

Just need this integrated into the webif and do it all graphically :) - tongue in cheek, but great work none-the-less.

Haven't got round to this yet, but thinking it ought to be something I do.
 
Back
Top