Changes

From Amahi Wiki
Jump to: navigation, search
683 bytes removed ,  00:41, 10 December 2020
heading =WARNING|
message = This is recommended only for advanced users, proceed with caution.}}
This tutorial is now available as the Amahi [https://www.amahi.org/apps/greyhole-mount-shares-locally Greyhole Mount Shares Locally] application.
<b>NOTE:</b> Recommend not using copy and paste for the steps below. It often introduces hidden characters which causes failure in the script.==Purpose==
Mounting your Samba shares locally within your HDA is useful when you are using Greyhole, and want a process '''running within your HDA''' to write or data in any a way work with those files locallythat ends up in a Greyhole-managed share.  The reason is that Greyhole data should '''only be accessed modified through shares'', not directly onto the local file system, so mounting those shares locally is an easy way to work with Greyhole data safely. For example, if an app like a downloader gets files from the internet and you want those files to be in a Greyhole-managed share, it has to place them into the share, not directly into the operating system, or Greyhole otherwise cannot handle them.  __TOC__
== Download and Setup ==
* As '''root:''' Install (or precede commands with <code>sudo</code>), install the mount_shares_locally initd script: === Amahi 10 or greater (Fedora) === dnf install cifs-utils cp /usr/share/hda-ctl/mount_shares_locally /etc/init.d chmod +x /etc/init.d/mount_shares_locally chkconfig --add mount_shares_locally === On Ubuntu Amahi 7/8/9 (Fedora) === yum install cifs-utils curl -o /etc/init.d/mount_shares_locally <div style="border: 1px solid #A3B1BF; paddingnowiki>http: //dl.amahi.org</nowiki>/mount_shares_locally.fedora chmod +x /etc/init.5em 1em; color: #000; backgroundd/mount_shares_locally chkconfig --coloradd mount_shares_locally : #E6F2FF; margin: 3px 3px 1em 3px; overflow'''NOTE: scroll"''' <code>yum</code> (deprecated) has been replaced with <code>dnf</code> as the package manager for Fedora 23 or greater. === Amahi 6 (Ubuntu 12.04) ===
sudo apt-get install cifs-utils curl
sudo curl -o /etc/init.d/mount_shares_locally <nowiki>http://dl.amahi.org/mount_shares_locally.ubuntu</nowiki>
sudo chmod +x /etc/init.d/mount_shares_locally
sudo update-rc.d mount_shares_locally defaults
</div>
 
=== On Fedora ===
<div style="border: 1px solid #A3B1BF; padding: .5em 1em; color: #000; background-color: #E6F2FF; margin: 3px 3px 1em 3px; overflow: scroll">
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
</div>
== Configuration ==
* Edit As '''root''', edit ''/etc/init.d/mount_shares_locally (as user root) in a text editor, and replace ''your_username**Replace ''"***set this string to your username!***"'' (on line 12) with your username. Example '''For example: username="amahi";*The script may require the MariaDB root password be changed: **Please see [[Database Root Password]] for the appropriate login password (change for Amahi 10 '''ONLY''').{{Code**Also if you changed the MariaDB root password on your own. :<blockquote>Change ''hda'' (line 25) to the appropriate password if needed:<pre style="white-space: pre-wrap; word-break: keep-all;">mysql -u root -p hda -e "select name from shares" hda_production | grep -v "^name$" |Code= nano /etcxargs -d "\n" mkdir -p</init.dpre></mount_shares_locally}}blockquote>
* Create the ''/home/your_username/.smb_credentials'' file. This is a simple text file (use your favorite text editor).
{{Code|Code= nano vi /home/YourHDA_usernameyour_username/.smb_credentials}}
*Enter the following:
<div style="border: 1px solid #A3B1BF; padding: .5em 1em; color: #000; background-color: #E6F2FF; margin: 3px 3px 1em 3px;">
username=your_username
password=your_password
domain=HOME
</div>
'''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)<br/> username=your_username password=your_password domain=HOME
*Verify the ''.smb_credentials'service mount_shares_locally stop''' (as is owned by root:root user) will unmount the local sharesor 1stadminuser:users: ls -al /home/your_username/.<br/>smb_credentials
:'''NOTE:''' If you used /etc/rc your_username and your_password in the .local and /etc/fstab smb_credentials file needs to mount shares locally in be the past, original username (1st Admin User) and password you can remove what created when you added in those files now installed the OS (<u>DO '''NOT</u> remove the drive mount lines''' ''root''). The above initd script replaces all thisAlso ensure the domain matches the ''Workgroup'' set for shares.
== Re-mount to Add *To test your new shares ==mounts, you can execute as root user:::<u>Mount</u>If you added new share to greyhole via the web admin. This does not automatically mount locally. systemctl daemon-reload 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.start
== Where everything is mounted ==You will find the mounted shares in ''/mnt/samba/*'':<u>Unmount<br/u>For example, your "Pictures" share would be located at '''/mnt/samba/Pictures'''. service mount_shares_locally stop
<b>:'''NOTE:<''' If you used /etc/rc.local and /etc/b> When working with files on fstab to mount shares locally in the HDApast, access them via this share and you can remove what you added in those files now (<u>DO NOT</u> remove the traditional /var/hda/files/pictures locationdrive mount lines). The above initd script replaces all this.
== Unable to Re-mount locally after upgrading to Amahi6 Add new shares ==If you try added new share to run mount using this script after Greyhole, you upgraded need to Amahi6 restart the script by executing as root user (or sudo): service mount_shares_locally restartThis will unmount and remount all your shares, reflecting all the new shares you might get greeted by this type of erroradded.
[root@localhost ~]# /etc/init.d/mount_shares_locally start== Where everything is mounted == Mounting Samba You will find the mounted shares locally: in ''/etcmnt/init.dsamba/mount_shares_locally: line 27*'' and should look something like this: <br/sbin/mount.cifs><pre>drwxrwx--- 2 your_username users 0 Aug 9 23: No such file or directory31 Booksdrwxrwx--- 2 your_username users 0 Aug /etc/init.d/mount_shares_locally9 23: line 2731 Docsdrwxrwx--- 2 your_username users 0 Mar 2 16: /sbin/mount.cifs15 Moviesdrwxrwx--- 2 your_username users 0 Aug 9 23: No such file or directory31 Musicdrwxrwx--- 2 your_username users 0 Aug /etc/init.d/mount_shares_locally: line 27: /sbin/mount.cifs9 23: No such file or directory31 Picturesdrwxrwx--- 2 your_username users 0 Aug /etc/init.d/mount_shares_locally9 23: line 27: /sbin/mount.cifs31 Publicdrwxrwx--- 2 your_username users 0 Jul 29 02: No such file or directory02 TVdrwxrwx--- 2 your_username users 0 Aug /etc/init.d/mount_shares_locally: line 279 23: 31 Videos</sbin/mount.cifs: No such file or directorypre> /etc/init.dFor example, your "Pictures" share would be located at '''/mount_shares_locally: line 27: mnt/sbinsamba/mountPictures'''.cifs: No such file or directory When working with files on the HDA, access them via this share and <u>NOT</etcu> the traditional /init.dvar/mount_shares_locally: line 27: hda/sbinfiles/mountpictures location.cifs: No such file or directory [ OK ]
It== Uninstall==To uninstall 's easily fixed by installing 'mount_shares_locally'', do the missing dependencyfollowing as '''root''': service mount_shares_locally stop rm -rf /etc/init.d/mount_shares_locally rm -rf /home/your_username/.smb_credentials chkconfig --del mount_shares_locally rm -rf /mnt/samba/*Now if you choose to reinstall later, your machine will be in a clean state.
{{Code|yum install cifs-utils}}==Revise mount_shares_locally ==
Now {{Warning|<div style<nowiki>=</nowiki>"color:darkred">This is <b>NOT</b> an officially supported script for Amahi. Use at your own risk. We cannot guarantee it should will work fine to run.</div>}}
{{Code|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/etchda/files/initTV''. There are two downsides to this though.d/mount_shares_locally start}}
== MySQL Problems With Newer Versions * Greyhole is not notified of Greyhole ==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. Since Greyhole moved from SQL Lite to MySQL, you may hit * Files deleted through apps in this folder don't register a problem where ''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 mount_shares_locally script both attempt clients are allowed to start before MySQL in bootup, leading ''delete contents'' and the server is configured to work on the services not starting properlylanding zone. If I described this happens, you can try this to fix it:issue when packaging Plex a long time ago [[Plex_Media_Server|here]].
{{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:
{{Code|rm S-1*}}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.
== Updated script for 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 then instantly picked up by Greyhole users ==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
<pre style="white-space: pre-wrap; word-break: keep-all;">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</pre>
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.with
* 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<pre style="white-space: httpspre-wrap; word-break:keep-all;">mysql -u root -p -e "select comment from shares" hda_production | grep -v "^comment$" | xargs -d "\n" mkdir -p<//wiki.amahi.org/index.php/Plex_Media_Serverpre>
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 users ''apache'WARNING:' it will not be able to access ''/mnt/samba'' which is Please see [[Database Root Password]] for 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 apacheappropriate login password.
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.==Troubleshooting===== MySQL Problems ===
Note that this script is based of the Since Greyhole moved from SQL Lite to MySQL, you may hit a problem where Greyhole original one and uses ''/etc/samba/smb.conf'' as the source of your shares and does mount_shares_locally script both attempt to start before MySQL in bootup, leading to the services not load the shares from the database like the old HDA version of the script didstarting properly. If that behaviour is desired that this happens, you can be easily added by replacing the linestry this to fix it:
testparm -s ls /etc/sambarc.d/smbrc3.conf 2>d/dev/null | grep "^\[" | grep * Look for any entries marked S-v "\[global\]" | grep -v "\[homes\]" | awk -F'[' '{print $2}' | awk -F']' '{print $1}' | xargs -d "\n" mkdir -p with . If there are any, they need to be removed. mysql -u Run the following as root -phda -e "select comment from shares" hda_production | grep -v "^comment$" | xargs -d "\n" mkdir -p :
rm S-1*
=== Share Permissions ===
Ensure your share file and ownership permissions are correct:
ls -al /var/hda/files
For example, the correct permissions are:
drwxr-xr-x. 10 root root 4096 Jul 29 17:02 .
drwxr-xr-x. 13 root root 4096 Dec 5 2013 ..
drwxrwxr-x 2 1stadmin users 4096 Dec 5 2013 books
If this is not correct, you will need to change them:
chmod -R 775 /var/hda/files/sharename
chown -R 1stadminuser:users /var/hda/files/sharename
### 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}NOTE:' | awk -F']' Replace '{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 -F1stadminuser'[' with your admin user name and '{print $2}' | awk -Fsharename']' '{print $1}' | xargs -d "\n" mkdir -p sleep 5 ls -1 | while read d; do /sbin/mount.cifs "//127with the actual share name.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 $?
12,424

edits