Difference between revisions of "Mount Shares Locally"

From Amahi Wiki
Jump to: navigation, search
Line 96: Line 96:
  
  
Since Greyhole uses Samba as a layer between the user and itself we would like to keep our writes and deletes to the shares and not the actual landing zone. But since apps (most of them) run as the user ''apache'' it will not be able to access ''/mnt/samba'', which is the default mount point if you set up ''mount_shares_locally''. This following script retains the function of the original script but also adds a second mount point under ''/mnt/apache'' where the ''apache'' user will have read and write access. I have kept it simple and it will use the same credentials as the ''main'' mount. So only shares available to that user will ea available for apache.
+
Since Greyhole uses Samba as a layer between the user and itself we would like to keep our writes and deletes to the shares and not the actual landing zone. But since apps (most of them) run as the user ''apache'' it will not be able to access ''/mnt/samba'', which is the default mount point if you set up ''mount_shares_locally''. This following script retains the function of the original script but also adds a second mount point under ''/mnt/apache'' where the ''apache'' user will have read and write access. I have kept it simple and it will use the same credentials as the ''main'' mount. So only shares available to that user will be available for apache.
  
 
By doing this apache will now have a place where it is allowed to read and write files to your shares and SickBeard can thus be configured to place the new episode in ''/mnt/apache/TV'' which is the instantly picked up by Greyhole and file copies distributed to the discs in your pool as configured.
 
By doing this apache will now have a place where it is allowed to read and write files to your shares and SickBeard can thus be configured to place the new episode in ''/mnt/apache/TV'' which is the instantly picked up by Greyhole and file copies distributed to the discs in your pool as configured.

Revision as of 07:43, 5 August 2013

Warning.png WARNING
This is recommended only for advanced users, proceed with caution.



NOTE: Recommend not using copy and paste for the steps below. It often introduces hidden characters which causes failure in the script.

Mounting your Samba shares locally is useful when you are using Greyhole, and want to write or in any way work with those files locally. Greyhole data should only be accessed through shares, so mounting those shares locally is an easy way to work with Greyhole data safely.

Download and Setup

  • As root: Install the mount_shares_locally initd script:

On Ubuntu

sudo apt-get install cifs-utils curl
sudo curl -o /etc/init.d/mount_shares_locally http://dl.amahi.org/mount_shares_locally
sudo chmod +x /etc/init.d/mount_shares_locally
sudo update-rc.d mount_shares_locally defaults

On Fedora

curl -o /etc/init.d/mount_shares_locally http://dl.dropboxusercontent.com/u/3022105/Amahi/mount_shares_locally
chmod +x /etc/init.d/mount_shares_locally
chkconfig --add mount_shares_locally

Configuration

  • Edit /etc/init.d/mount_shares_locally (as user root) in a text editor, and replace your_username (on line 12) with your username. Example username="amahi"
bash code
​nano /etc/init.d/mount_shares_locally​
  • Create the /home/your_username/.smb_credentials file. This is a simple text file (use your favorite text editor).
bash code
​nano /home/YourHDA_username/.smb_credentials​
  • Enter the following:
username=your_username
password=your_password
domain=HOME

NOTE: your_username and your_password in the .smb_credentials file needs to be the original username and password you created when you installed fedora.

  • To test your new mounts, you can execute service mount_shares_locally start (as root user)

service mount_shares_locally stop (as root user) will unmount the local shares.

NOTE: If you used /etc/rc.local and /etc/fstab to mount shares locally in the past, you can remove what you added in those files now (DO NOT remove the drive mount lines). The above initd script replaces all this.

Re-mount to Add new shares

If you added new share to greyhole via the web admin. This does not automatically mount locally. You need to restart your mount script by running service mount_shares_locally restart. This will unmount and remount all your shares, adding all the new shares you added.

Where everything is mounted

You will find the mounted shares in /mnt/samba/*
For example, your "Pictures" share would be located at /mnt/samba/Pictures.

NOTE: When working with files on the HDA, access them via this share and NOT the traditional /var/hda/files/pictures location.

Unable to mount locally after upgrading to Amahi6

If you try to run mount using this script after you upgraded to Amahi6 you might get greeted by this type of error.

[root@localhost ~]# /etc/init.d/mount_shares_locally start
Mounting Samba shares locally: /etc/init.d/mount_shares_locally: line 27: /sbin/mount.cifs: No such file or directory
/etc/init.d/mount_shares_locally: line 27: /sbin/mount.cifs: No such file or directory
/etc/init.d/mount_shares_locally: line 27: /sbin/mount.cifs: No such file or directory
/etc/init.d/mount_shares_locally: line 27: /sbin/mount.cifs: No such file or directory
/etc/init.d/mount_shares_locally: line 27: /sbin/mount.cifs: No such file or directory
/etc/init.d/mount_shares_locally: line 27: /sbin/mount.cifs: No such file or directory
/etc/init.d/mount_shares_locally: line 27: /sbin/mount.cifs: No such file or directory
                                                          [  OK  ]

It's easily fixed by installing the missing dependency.

bash code
​yum install cifs-utils​


Now it should work fine to run

bash code
​/etc/init.d/mount_shares_locally start​


MySQL Problems With Newer Versions of Greyhole

Since Greyhole moved from SQL Lite to MySQL, you may hit a problem where Greyhole and the mount_shares_locally script both attempt to start before MySQL in bootup, leading to the services not starting properly. If this happens, you can try this to fix it:

bash code
​ls /etc/rc.d/rc3.d/​
  • Look for any entries marked S-1. If there are any, they need to be removed. Run the following as root:
bash code
​rm S-1*​


Updated script for Greyhole users

Some apps used by Amahi are used to download files etc. Often we want these files to end up in our shares. Let's say that SickBeard is used to download TV episodes. You then have to configure SickBeard to place your new episode somewhere. A logical place is to save to the landing zone of your Greyhole share which could be /var/hda/files/TV. There are two downsides to this though.

  • Greyhole is not notified of the fact that a file is added and only discovers it and makes it available in your share after a fsck, which could take a long time.
  • Files deleted through apps in this folder don't register a delete event that Greyhole can pick up and thus only the symlink in the landing zone is removed. The actual file copies remain on disc. Similarly users running Plex Media Server for example will have issues if the clients are allowed to delete contents and the server is configured to work on the landing zone. I described this issue when packaging Plex a long time ago here: https://wiki.amahi.org/index.php/Plex_Media_Server


Since Greyhole uses Samba as a layer between the user and itself we would like to keep our writes and deletes to the shares and not the actual landing zone. But since apps (most of them) run as the user apache it will not be able to access /mnt/samba, which is the default mount point if you set up mount_shares_locally. This following script retains the function of the original script but also adds a second mount point under /mnt/apache where the apache user will have read and write access. I have kept it simple and it will use the same credentials as the main mount. So only shares available to that user will be available for apache.

By doing this apache will now have a place where it is allowed to read and write files to your shares and SickBeard can thus be configured to place the new episode in /mnt/apache/TV which is the instantly picked up by Greyhole and file copies distributed to the discs in your pool as configured.

Note that this script is based of the Greyhole original one and uses /etc/samba/smb.conf as the source of your shares and does not load the shares from the database like the old HDA version of the script did. If that behaviour is desired that can be easily added by replacing the lines

testparm -s /etc/samba/smb.conf 2>/dev/null | grep "^\[" | grep -v "\[global\]" | grep -v "\[homes\]" | awk -F'[' '{print $2}' | awk -F']' '{print $1}' | xargs -d "\n" mkdir -p

with

mysql -u root -phda -e "select comment from shares" hda_production | grep -v "^comment$" | xargs -d "\n" mkdir -p 


### BEGIN INIT INFO
# Provides:          mount_shares_locally
# Required-Start:    $network $local_fs $remote_fs smb mysqld
# Required-Stop:     $network $local_fs $remote_fs smb
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: mount Samba shares locally
### END INIT INFO

username="YOURUSERHERE"

if [ -f /etc/rc.d/init.d/functions ]; then
       . /etc/rc.d/init.d/functions
fi

start () {
       uid=`id -u $username`
       gid=`id -g $username`

       echo -n $"Mounting Samba shares locally: "
       mkdir -p /mnt/samba/
       mkdir -p /mnt/apache/
       cd /mnt/apache/
       testparm -s /etc/samba/smb.conf 2>/dev/null | grep "^\[" | grep -v "\[global\]" | grep -v "\[homes\]" | awk -F'[' '{print $2}' | awk -F']' '{print $1}' | xargs -d "\n" mkdir -p
       cd /mnt/samba/
       testparm -s /etc/samba/smb.conf 2>/dev/null | grep "^\[" | grep -v "\[global\]" | grep -v "\[homes\]" | awk -F'[' '{print $2}' | awk -F']' '{print $1}' | xargs -d "\n" mkdir -p
       sleep 5
       ls -1 | while read d; do
               /sbin/mount.cifs "//127.0.0.1/$d" "$d" -o credentials=/home/${username}/.smb_credentials,uid=${uid},gid=${gid},file_mode=0660,dir_mode=0770,nobrl,hard,_netdev,iocharset=utf8,noserverino,mfsymlinks
               /sbin/mount.cifs "//127.0.0.1/$d" "/mnt/apache/$d" -o credentials=/home/${username}/.smb_credentials,uid=`id -u apache`,gid=`id -g apache`,file_mode=0777,dir_mode=0777,nobrl,hard,_netdev,iocharset=utf8,noserverino,mfsymlinks
       done
       touch /var/lock/subsys/mount_shares_locally
       success $"$base startup"
       echo
       return 0
}

stop () {
       echo -n $"Unmounting locally mounted Samba shares: "
       /bin/umount -l /mnt/samba/*
       /bin/umount -l /mnt/apache/*
       rm -f /var/lock/subsys/mount_shares_locally
       success $"$base shutdown"
       echo
       return 0
}

restart () {
       stop
       start
}

case "$1" in
       start)
               start
               ;;
       stop)
               stop
               ;;
       restart)
               restart
               ;;
       *)
               echo $"Usage: $0 {start|stop|restart}"
               exit 1
               ;;
esac

exit $?